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?

Pozinux
fonte
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
Christopher
fonte
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
GAD3R
fonte
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