As rotas "padrão" são definidas com base nas linhas GATEWAY nos arquivos ifcfg-<interface>
. Como Dom mencionou em seu comentário, se você remover a linha GATEWAY incorreta, sua tabela de roteamento será a esperada.
Por alguma razão, meu Centos 5.9 Linux 2.6.18 x86_64 quer que eu tenha duas rotas padrão.
Sempre que eu reinicializo o servidor, minha tabela de roteamento fica assim:
[root@server1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
255.255.255.255 0.0.0.0 255.255.255.255 UH 0 0 0 bond0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 bond1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 bond1
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 bond0
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 bond1
bond1 é uma rede local, portanto, ter uma última rota padrão apontando para essa rede faz com que todas as solicitações de internet falhem.
É facilmente corrigido executando route del default gw 192.168.0.254
e eu poderia adicionar esse comando a algum script de inicialização. No entanto, gostaria de entender o que está acontecendo e chegar à raiz do problema.
Espero que alguém possa me dizer por que isso acontece. Minha pesquisa confirma que deve haver sempre apenas um gateway padrão, mas não consigo encontrar uma resposta para por que haveria automaticamente dois deles.
Aqui estão alguns arquivos de configuração:
[root@server1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=myhostname.com
[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.10.11
NETMASK=255.255.255.0
NETWORK=192.168.10.0
BROADCAST=192.168.10.255
GATEWAY=192.168.10.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
IPADDR=192.168.0.15
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
GATEWAY=192.168.0.254
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
Eu entendo que a troca de bond0 e bond1 faria com que as duas rotas padrão mudassem de lugar também, efetivamente me dando acesso à internet na inicialização. Mas ainda acho que não é a boa solução.
Por toda a internet as pessoas estão falando sobre arquivos em /etc/sysconfig/network-scripts/route-X
, mas eu não tenho nenhum desses.
Obrigado pelo seu tempo.
As rotas "padrão" são definidas com base nas linhas GATEWAY nos arquivos ifcfg-<interface>
. Como Dom mencionou em seu comentário, se você remover a linha GATEWAY incorreta, sua tabela de roteamento será a esperada.
Há uma diferença entre o GW e o GW padrão. Com base na sua configuração, parece que você deseja que ambas as interfaces possam acessar redes externas. Você poderia remover a linha GATEWAY como foi recomendado, mas isso evitará bond1 de qualquer comunicação externa.
Assim que você for multihomed, acho que é uma boa ideia usar o roteamento baseado em políticas. Também conhecido como roteamento de acesso dividido. É um bom hábito entrar e é necessário quando você deseja colocar várias interfaces na mesma sub-rede.
Para o seu caso especificamente eu gostaria de:
/etc/iproute2/rt_tables
100 bond0tbl
101 bond1tbl
Agora você definiu suas tabelas internas chamadas bond0tbl e bond1tbl, respectivamente. Agora você precisa criar as regras para essas tabelas
/etc/sysconfig/network-scripts/rule-bond0
from 192.168.10.11 table bond0tbl
/etc/sysconfig/network-scripts/rule-bond1
from 192.168.0.15 table bond1tbl
Agora que você definiu as regras, é hora de definir as rotas.
/etc/sysconfig/network-scripts/route-bond0
/etc/sysconfig/network-scripts/rule-bond1
Por último, removerei a linha GATEWAY dos arquivos BOTH ifcfg-devX e adicionarei a /etc/syconfig/network
.
É fácil ficar confuso sobre o GW que uma interface específica deve usar para o roteamento e o GW padrão que TODOS devem usar ... no caso de a rota desejada não existir. Configurá-lo em /etc/sysconfig/network
sempre me pareceu mais "global" para mim.
Quando todos os seus patos estão em uma fila, você usa service network restart
ou ifup/ifdown
ou reboot
para criar tudo. Para ver se funcionou, você pode fazer:
ip route show table bond0tbl
ip route show table bond1tbl
ip route show table main
ip rule show
Para recapitular,
Coloque essas linhas em seu arquivo / etc / sysconfig / network se você quiser bond0 como seu gateway padrão. Se você quiser bond1 como seu gateway padrão, coloque GATEWAYDEV = bond1.
NETWORKING=yes
HOSTNAME=mydbserver
GATEWAYDEV=bond0
GATEWAY=192.168.xxx.xxx