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.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]