Como posso manter uma entrada na minha tabela de roteamento, mesmo quando a interface associada cai?

2

Eu tenho uma caixa de Linux configurada como meu roteador de internet. Eu tenho a interface eth0 conectada à lan, e a interface eth1 conectada a um modem pppoa e configurada com dhcp para meu ip público. Devido a problemas com o ARP eu tenho que conectar à internet usando o próprio modem (que tem o ip 172.16.0.1) como o próximo salto. Para fazer isso, eu uso as duas linhas a seguir:

route add -host 172.16.0.1 dev eth1
route add default gw 172.16.0.1

Isso geralmente é executado depois que a interface foi configurada com o dhcp e está tudo bem. O problema surge quando o modem é desconectado, reconectado e alocado um novo endereço IP pelo meu isp. Quando o daemon dhcpc reconfigurou a interface eth1 para o novo ip, minha tabela de roteamento perde as entradas necessárias para acessar a Internet, o que significa que preciso inserir novamente os comandos 2 route . Existe uma maneira de forçar o linux a manter as rotas, ou possivelmente tê-las adicionadas automaticamente quando dhcpcd faz isso?

Uma pesquisa no Google por "rotas persistentes" mostra maneiras de manter rotas em todas as etapas, mas não é isso que eu preciso.

    
por Robbie Mckennie 10.05.2014 / 06:46

2 respostas

3

Opção 1

Normalmente, é possível configurar o gateway padrão no servidor DHCP para que sempre que ele atribuir IPs também forneça um gateway padrão para os clientes usarem. Consulte a configuração do seu servidor DHCP sobre como fazer isso.

Opção 2

Outra maneira que isso pode ser feito no cliente é criar um gancho dhcpcd em /usr/lib/dhcpcd/dhcpcd-hooks (o diretório pode ser diferente no slackware, mas eu duvido muito dele). Crie um novo arquivo chamado 40-route com conteúdo:

route add -host 172.16.0.1 dev eth1
route add default gw 172.16.0.1

Ou, alternativamente, isso também deve funcionar:

ip route add 172.16.0.0/24 via 172.16.0.1

Isto deve executar este comando depois que o dhcpcd obtiver o novo IP. Você precisa alterar 192.168.0.0/24 para o que sua rede está usando.

    
por 10.05.2014 / 15:34
0

Para a posteridade, aqui está o que funcionou para mim.

# /lib/dhcpcd/dhcpcd-hooks/40-route
if [ "$reason" = "BOUND" ] && [ "$interface" = "eth1" ]; then
  route add -host 172.16.0.1 dev eth1
  route add default gw 172.16.0.1
fi
    
por 10.05.2014 / 17:59