Qual é a melhor maneira de adicionar uma rota permanente?


11

Preciso adicionar uma rota que não será excluída após a reinicialização. Eu li estas duas maneiras de fazer isso:

Adicionar up route add -net 172.X.X.0/24 gw 172.X.X.X dev ethXao arquivo /etc/network/interfaces

ou

Crie o arquivo /etc/network/if-up.d/route com:

#!/bin/sh
route add -net 172.X.X.0/24 gw 172.X.X.X dev ethX

e torná-lo executável:

chmod +x /etc/network/if-up.d/route

Então, eu estou confuso. Qual é a melhor maneira de fazer isso?


1
parece que você está focado em um sistema Linux? (temos AIX, HPUX, Irix, Solaris, ....) no site.
— Jeff Schaller

Você está arrependido por não ter especificado que estava em um sistema Debian Linux. Obrigado por me lembrar.
— Pozinux 8/11

Respostas:


14

Você mencionou /etc/network/interfaces, então é um sistema Debian ...

Crie uma tabela de roteamento nomeada. Como exemplo, usei o nome "mgmt" abaixo.

echo '200 mgmt' >> /etc/iproute2/rt_tables

Acima, o kernel suporta muitas tabelas de roteamento e se refere a elas por números inteiros únicos, numerados de 0 a 255. Um nome, mgmt, também é definido para a tabela.

Abaixo, /etc/iproute2/rt_tablessegue um padrão , mostrando que alguns números são reservados. A escolha nesta resposta de 200 é arbitrária; pode-se usar qualquer número que ainda não esteja em uso, 1-252.

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#

Abaixo, um arquivo de interfaces Debian 7/8 define eth0e eth1. eth1é a rede 172. eth0poderia usar o DHCP também. 172.16.100.10é o endereço IP ao qual atribuir eth1. 172.16.100.1é o endereço IP do roteador.

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The production network interface
auto eth0
allow-hotplug eth0
# iface eth0 inet dhcp 
# Remove the stanzas below if using DHCP.
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# The management network interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 172.16.100.10
  netmask 255.255.255.0
  post-up ip route add 172.16.100.0/24 dev eth1 src 172.16.100.10 table mgmt
  post-up ip route add default via 172.16.100.1 dev eth1 table mgmt
  post-up ip rule add from 172.16.100.10/32 table mgmt
  post-up ip rule add to 172.16.100.10/32 table mgmt

Reinicie ou reinicie a rede.

Atualização - Explicando sobre EL

Percebi em um comentário que você estava "imaginando o RHEL também". No Enterprise Linux ("EL" - RHEL / CentOS / et al), crie uma tabela de roteamento nomeada conforme mencionado acima.

O /etc/sysconfig/networkarquivo EL :

NETWORKING=yes
HOSTNAME=host.sld.tld
GATEWAY=10.10.10.1

O /etc/sysconfig/network-scripts/ifcfg-eth0arquivo EL , usando uma configuração estática (sem o NetworkManager e não especificando "HWADDR" e "UUID" para o exemplo abaixo), segue.

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=10.10.10.140
NETMASK=255.255.255.0
NETWORK=10.10.10.0
BROADCAST=10.10.10.255

O /etc/sysconfig/network-scripts/ifcfg-eth1arquivo EL (sem o NetworkManager e sem especificar "HWADDR" e "UUID" para o exemplo abaixo) é apresentado a seguir.

DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=172.16.100.10
NETMASK=255.255.255.0
NETWORK=172.16.100.0
BROADCAST=172.16.100.255

O /etc/sysconfig/network-scripts/route-eth1arquivo EL :

172.16.100.0/24 dev eth1 table mgmt
default via 172.16.100.1 dev eth1 table mgmt

O /etc/sysconfig/network-scripts/rule-eth1arquivo EL :

from 172.16.100.0/24 lookup mgmt

0

Na distribuição baseada no Debian, você pode adicionar uma rota estática permanentemente da seguinte maneira:

 echo "up route add -net 172.X.X.X/24 gw 172.X.X.X dev ethX" | sudo tee --append /etc/network/interfaces

Na distribuição baseada em RHEL:

echo "172.X.X.X/24 via 172.X.X.X" | sudo tee --append /etc/sysconfig/network-scripts/route-ethX

3
O sudonão tem sentido nos dois comandos. Você já é root, então >>funciona ou não, nesse caso, o >>é aplicado como seu usuário original e apenas o echoé executado como root. Além disso, isso falha tristemente se houver várias interfaces definidas em /etc/network/interfaces.
— roaima

1
eco "sth" | nome do arquivo sudo tee
— JSBach 15/09

isso não está funcionando para instâncias debian no GCP
— Parv Sharma

Na verdade, a respeito da versão Debian, o comando dado altamente depende do que interface é configurada última no arquivo / etc / network / interfaces
— Gohu
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.