[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 2 conexões de banda larga + iproute2



Salve, Fábio...
Eu estou postando o script que eu usei para dois gateways. Adapte-o para suas necessidades.
Tenha em conta o seguinte:
Meu roteador usa o CL8 com as seguintes características:
ppp0: IP variável, gateway variável (conexão de internet banda larga)
eth0: 172.16.0.0 - rede local de 100mbps (onde estão pendurados minhas estaçoes locais wired e o o modem, com pppoe relay - a autenticação é feita no linux, para facilitar o repasse de portas -tipo e-mule, http e vnc-) eth1: 10.0.0.33, gateway 10.0.0.7 - (conexão de internet banda média, via rádio com ip fixo) eth2: 10.10.1.0 - rede local de 11Mps (rádio 'ad-hoc' local, que eu uso para conectar o notebook e meus HP Jornada) eth3: 192.168.254.0 - rede local de 10Mbps (eu uso para uma segunda conexão ADSL, mas o login é feito no próprio modem -speedlink- e está fora dessas tabelas que eu estou te passando, pois estou experimentando um balanço com uma TERCEIRA conexão). Como ainda estou testando, vou passar o que está testado e funciona perfeitamente: Ah, sim... acredite se quiser: meu roteador tem 4 dispositivos de rede, é servidor de impressão, servidor de rádio, servidor VNC e X e... é um 486 DX4-100 com 32mb de ram... kkkkkkkkkkk
Bem... Aqui está o script que você precisa, jovem padawan:

########## Inicio do script rc.balanco
#!/bin/bash
# Configura roteamento para duas portas [com diferentes classes de IP], cada qual com seu próprio gateway.
# Author: Rogério Batista Ayres, claro..

## ANTES DE MAIS NADA, Defina duas novas tabelas, incluindo seus nomes
## no rodapé de /etc/iproute2/rt_tables, assim:
## 1 tabela1
## 2 tabela2

# Este script deverá ser rodado no final de rc.local ou
# a) em caso de IP fixo: imediatamente após /etc/rc.d/init.d/network;
# b) em caso de ip dinâmico, logo após a conexão PPPoE
# c) diretamente no prompt (basta dar um chmod 755 nele e copiar para /sbin)

echo
echo "Configurando Portas Ethernet duplas:"
TESTE="`/sbin/ifconfig |grep ppp0`"
#route del default

if [ -x $TESTE ] ; then
echo Ihhhh, caramba... a ADSL não está no ar... vou definir uma rota só para o rádio.
  echo Verifique se:
  echo     - o modem está ligado;
  echo     - os cabos estão em ordem;
echo - Se a configuração de repasse de PPPoE (PPPoE Relay) do modem está ok
  echo     - Se você configurou o cliente PPPoE aqui no linux
  echo     - Se você comandou o login, seu mané.
echo - Se você pagou a conta da companhia telefônica, seu nó-cego! hehehe.

  route add default gw 10.0.0.7
else

  ######
  # Interface principal (rádio) em eth1:
  IF0=eth1
  NET0=10.0.0.0   # É a classe de IP da cepain (meu provedor via rádio)
  IP0=10.0.0.33   # É o meu IP na cepain
  GW0=10.0.0.7    # É o gateway da cepain
  echo "NET0=$NET0"
  echo "IP0=$IP0"
  echo "GW0=$GW0"


  ######
  # Interface secundária em ppp0 (Dinâmica):
  IF1=ppp0

  # Início da parte crítica deste script.
NET1="`/sbin/ifconfig ppp0 | /bin/awk \ /ppp0/'{next}//{split($0,a,":");split(a[3],a," ");print a[1];exit}'`" IP1="`/sbin/ifconfig ppp0 | /bin/awk \ /ppp0/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`" GW1="`/sbin/ifconfig ppp0 | /bin/awk \ /ppp0/'{next}//{split($0,a,":");split(a[3],a," ");print a[1];exit}'`"
  # A linha acima é equivalente a
  # GW1=`ifconfig ppp0 | grep "inet end." | cut -d: -f3 | cut -d' ' -f1`
# mas no rc.local costuma dar zica causa da tradução nas coxas que fizeram no binário do ifconfig

  if [ -x $NET1 ] ; then
# Bem, aqui deve ter dado algo errado. No caso de autoexecução em /etc/rc.d/rc.local as linhas acima não # fungam. Então, vamos recorrer ao velho e bom GREP e CUT, mas tendo em conta que a resposta ao comando # "ipconfig" na inicialização é gerada em inglês. Assim, a busca deve ser pela string 'inet addr'.
     # Meu... até eu descobrir isso eu penei, heim?!
     NET1=`ifconfig ppp0 |grep "inet addr:"|cut -d: -f3 | cut -d' ' -f1`
     IP1=`ifconfig ppp0  |grep "inet addr:"|cut -d: -f2 | cut -d' ' -f1`
     GW1=`ifconfig ppp0  |grep "inet addr:"|cut -d: -f3 | cut -d' ' -f1`
  fi
  ##  final da parte crítica deste script.

echo "NET1=$NET1" # É a classe de ip do PPPoE descoberta pelas linhas acima
  echo "IP1=$IP1"   # É o meu IP na PPPoE no momento
  echo "GW1=$GW1"   # É o gateway do PPPoE

  ######
  #testa se o ip do ppp0 é nulo.
  if [ -x $NET1 ] ; then
#Mesmo após todas essas firulas com o bash, o script não conseguiu pegar seu IP...
     #Aí lascou!! (melhor checar se está tudo em ordem com o script).
     echo
     echo "Ihhhh, fodeu!!! Não consegui pegar o IP da conexão PPPoE."
     echo "Vou criar uma rota default só para o rádio."
     Echo "Verifique se está tudo em ordem com a parte crítica do script."
     route add default gw $GW0
  else

     #Load balance... nova abordagem, by Doctor_Roger, obvious.

# Para copiar sua própria tabela, copie a tabela 'main', que naturalmente já existe
     # no seu sistema, a partir do seguinte comando:
     # ip route show >minha_tabela
# edite o arquivo 'minha_tabela' para saber como preencher as tabelas abaixo.
     # Vamos lá então. . .

# primeiro vamos copiar as rotas existentes da tabela 'main' para as duas tabelas
     # Começando pela tabela1
     echo Criando a tabela1
ip route add $GW1 dev ppp0 proto kernel scope link src $IP1 table tabela1 ip route add 10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.33 table tabela1 ip route add 172.16.0.0/24 dev eth0 proto kernel scope link src 172.16.0.254 table tabela1 ip route add 10.10.1.0/24 dev eth2 proto kernel scope link src 10.10.1.254 table tabela1 ip route add 127.0.0.0/8 dev lo scope link table tabela1
     ip route add 10.10.10.0/24 dev eth1 via $GW0 table tabela1

# Agora na tabela2 - mesma coisa; é cópia fiel. A coisa só muda mesmo no que # diz respeito ao gateway padrão, sacou?! [Mas isso é mais pra frente].
     echo criando a tabela2
ip route add $GW1 dev ppp0 proto kernel scope link src $IP1 table tabela1 ip route add 10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.33 table tabela2 ip route add 172.16.0.0/24 dev eth0 proto kernel scope link src 172.16.0.254 table tabela2 ip route add 10.10.1.0/24 dev eth2 proto kernel scope link src 10.10.1.254 table tabela2 ip route add 127.0.0.0/8 dev lo scope link table tabela2
     ip route add 10.10.10.0/24 dev eth1 via $GW0 table tabela2

# Assim, temos três tabelas com rotas idênticas de destino (main -que é nativa-, # tabela1 e tabela2). Mas a tabela1 a tabela 2 AINDA NÃO TEM gateway default configurado

     ###########
# Na tabela1 irei colocar o outro gateway default EXCLUSIVO, que é o rádio da cepain [10.0.0.7 em eth1]
     ip route add default via $GW0 dev eth1 table tabela1

# Agora iremos adicionar a origem dos ips ou rede que irão respeitar essa tabela1 usando somente
     # o novo link de internet [o rádio da cepain]:
ip rule add from 172.16.0.253 table tabela1 #É a minha Estacao1 [navegará só pelo rádio] # Os ips e a rede acima irão sair para a internet SOMENTE pelo novo link de internet [10.0.0.7].

     ###########
# Na tabela2 iremos fazer um load-balance dos 2 links de internet [o ip da ppp0 e 10.0.0.7]
     # com peso igual dos dois:
ip route add default table tabela2 nexthop via $IP1 dev ppp0 weight 1 nexthop via 10.0.0.7 dev eth1 weight 1

# Vamos agora adicionar os ips que fazem parte dessa tabela [tabela2, balanceada]: ip rule add from 10.10.1.0/24 table tabela2 #O Notebook e os dois HP Jornada [via rádio local]
     ip rule add from 172.16.0.100   table tabela2 #A Estação do Eduardo
     ip rule add from 172.16.0.236   table tabela2 #A Estação do Fábio


# Vamos agora adicionar os ips que fazem parte da tabela principal - não balanceada, saindo exclusivamente na ppp0: #ip rule add from 172.16.0.11 table main #A estacao3 [minha estação sai só pela ADSL] # Besteira. Não precisa, pois na main já estava definida a rota default para a ppp0 e eu comentei # o comando route del default no início deste script [mesmo assim eu deixei só para fins didáticos].
  fi
fi
########## Final do script rc.balanco

Finalmente, use o comando iptables normalmente, sem pudor ou cerimônia...
Quando eu testar o script para TRÊS gateways ou mais, eu mando.. fechado?!
Qualquer coisa, é só perguntar!
Um abração do Doctor_Roger.



Reply to: