Como definir rotas estáticas no Ubuntu Server?

41

Eu tenho usado o Ubuntu desde o Ubuntu 8.10; hoje estou trabalhando com o Ubuntu 12.04 Server.

Estou com dificuldades para manter rotas estáticas na inicialização. Eu costumava colocar os comandos de rota

/sbin/route add -net <IP>/<MASK> <GW> dev <ethX>

em /etc/rc.local ou criaria um arquivo (denominado routes ) dentro do diretório /etc/network/if-up/ , mas percebo que no Ubuntu 12.04 não está funcionando.

Se eu digitar os comandos no shell, eles funcionam, mas os mesmos comandos não funcionam quando estão no arquivo especificado.

Eu já tentei mudar o nome do arquivo para outros nomes pensando que o meu nome de arquivo ( routes ) poderia estar errado no Ubuntu 12.04, mas isso também não funcionou.

Percebo também que o comando /sbin/ifconfig funciona, menos o /sbin/route .

O que mudou na configuração da rede?

Como posso definir rotas estáticas no Ubuntu 12.04?

    
por Frank Allan 25.07.2012 / 18:48

5 respostas

48

Você pode colocar rotas estáticas em /etc/network/interfaces :

auto eth0
iface eth0 inet static
      address 192.168.1.2
      netmask 255.255.255.0
      up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
      up route add -net 172.16.0.0 netmask 255.240.0.0 gw 192.168.1.1
    
por Eric Carvalho 25.07.2012 / 18:57
16

Eu achei com muita frequência que o local correto para definir uma rota estática é em / etc / network / interfaces, não há problemas se você for reiniciar a rede globalmente com /etc/init.d/networking restart, por exemplo. Mas se você for usar ifdown e ifup para desligar individualmente uma interface, o ifup terminará com o erro:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Por causa disso, tenta definir uma rota, mas ela já está definida. A interface estará ativa de qualquer forma, mas ifup não atualizará / run / network / ifstate, então da próxima vez você irá ifdown você não poderá fazê-lo a menos que você use o flag --force.

Para fazer o ifup continuar configurando mesmo que as rotas já estejam definidas, você pode usar este formato ao definir rotas em / etc / network / interfaces

up ip route add 172.16.0.0/24 via 192.168.10.1 || true
up ip route add 192.168.0.0/16 via 192.168.10.1 || true

Desta forma, você terá o aviso na saída, mas a configuração da interface será concluída

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553
    
por mseisdedos 08.02.2013 / 11:29
8

Você pode tentar isso (adicioná-lo a /etc/network/interfaces ), essa é uma maneira quase completa de configurar rotas:

auto eth0
iface eth0 inet static
    post-up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
    post-up /bin/mount -t nfs 192.168.0.203:/motd/ /motd/
    
por mmehboobhan 26.07.2012 / 07:49
4

Existe um pacote ifupdown-extra disponível no Ubuntu.
Ele fornece scripts automáticos (instalados em /etc/network/*/ ), um dos quais é usado para adicionar rotas estáticas.

O arquivo de configuração para isso é /etc/network/routes

O topo deste arquivo de configuração tem uma boa descrição:

  

Este arquivo de configuração é lido pelo script if-updown de rotas estáticas   e o script /etc/init.d/networking-routes para configurar uma lista de rotas   associado a uma determinada interface ou rotas globais.

Um exemplo de rota que uso é:

192.168.240.0 255.255.255.0 192.168.130.3 em3
    
por NGRhodes 20.08.2015 / 15:52
2

o que funcionou para nós foi

sudo route add -net 192.168.0.2/32 gw 192.168.1.1 netmask 255.255.0.0

eu costumava rodar em um Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

mas em um ubuntu o "gw" entre IPs e a última parte "netmask" estava faltando (também não é necessário no Ubuntu)

    
por Peter Perháč 08.09.2016 / 13:14