O Linux adiciona a rota padrão incorreta

5

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.

    
por Zoon 22.05.2014 / 14:43

3 respostas

6

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 22.05.2014 / 14:48
3

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:

  • Editar /etc/iproute2/rt_tables
  • Na parte inferior do arquivo, adicione:
    • 100 bond0tbl
    • 101 bond1tbl

Agora você definiu suas tabelas internas chamadas bond0tbl e bond1tbl, respectivamente. Agora você precisa criar as regras para essas tabelas

  • Abrir / criar /etc/sysconfig/network-scripts/rule-bond0
  • Adicione o seguinte: from 192.168.10.11 table bond0tbl
  • Abrir / criar /etc/sysconfig/network-scripts/rule-bond1
  • Adicione o seguinte: from 192.168.0.15 table bond1tbl

Agora que você definiu as regras, é hora de definir as rotas.

  • Abrir / criar /etc/sysconfig/network-scripts/route-bond0
  • Adicione o seguinte:
    • padrão via 192.168.10.1 dev bond0 tabela bond0tbl
    • 192.168.10.0/24 via 192.168.10.11 dev bond0 tabela bond0tbl
    • 192.168.10.0/24 via 192.168.10.11 dev bond0 tabela main
  • Abrir / criar /etc/sysconfig/network-scripts/rule-bond1
  • Adicione o seguinte:
    • padrão via 192.168.0.254 dev bond1 tabela bond1tbl
    • 192.168.0.0/24 via 192.168.0.15 dev bond1 tabela bond1tbl
    • 192.168.0.0/24 via 192.168.0.15 dev bond1 tabela principal

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,

  1. Definir tabelas com uma convenção de nomenclatura significativa
  2. Definir regras para forçar o tráfego de um IP específico para uma interface específica
  3. Definir a rota padrão para essa interface / IP
  4. Defina a rota a ser adicionada à tabela recém-criada
  5. Defina a rota a ser adicionada à tabela "principal".
  6. Deixe a reinicialização / reinicialização da rede ifup / service fazer o trabalho
por 23.05.2014 / 08:05
-2

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
    
por 14.09.2015 / 15:12