Jaki jest najlepszy sposób na dodanie stałej trasy?

11

Muszę dodać trasę, która nie zostanie usunięta po ponownym uruchomieniu. Przeczytałem te dwa sposoby:

Dodaj ip route add -net 172.X.X.0/24 gw 172.X.X.X dev ethXdo pliku /etc/network/interfaces

lub

Utwórz plik /etc/network/if-up.d/route za pomocą:

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

i uczyń go wykonywalnym:

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

Więc jestem zdezorientowany. Jak najlepiej to zrobić?

Pozinux
źródło
1
wygląda na to, że koncentrujesz się na systemie Linux? (mamy AIX, HPUX, Irix, Solaris, ....) na stronie.
Jeff Schaller
Masz rację, przepraszam, ale nie określiłem, że jest w systemie Linux Debian. Dzięki za przypomnienie mi tego.
Pozinux
Powinieneś używać poleceń iproute2 jak ip route add <network> via <IP> dev <DEV>zamiast poleceń net-tools (ifconfig, route itp.)
AdamKalisz

Odpowiedzi:

14

Wspomniałeś /etc/network/interfaces, więc jest to system Debian ...

Utwórz nazwaną tabelę routingu. Jako przykład użyłem poniżej nazwy „mgmt”.

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

Powyżej, jądro obsługuje wiele tabel routingu i odnosi się do nich przez unikalne liczby całkowite o numerach 0-255. Nazwa, mgmt, jest również zdefiniowana dla tabeli.

Poniżej przedstawiono domyślne ustawienie /etc/iproute2/rt_tablespokazujące, że niektóre liczby są zastrzeżone. Wybór w tej odpowiedzi 200 jest arbitralny; można użyć dowolnej liczby, która nie jest jeszcze używana, 1-252.

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

Poniżej plik interfejsów Debiana 7/8 definiuje eth0i eth1. eth1to sieć 172. eth0mógłby również użyć DHCP. 172.16.100.10to adres IP do przypisania eth1. 172.16.100.1to adres IP routera.

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

Uruchom ponownie lub uruchom ponownie sieć.

Aktualizacja - opisująca EL

W komentarzu zauważyłem, że „również zastanawiasz się nad RHEL”. W Enterprise Linux („EL” - RHEL / CentOS / et al) utwórz nazwaną tablicę routingu, jak wspomniano powyżej.

Plik EL /etc/sysconfig/network:

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

Plik EL /etc/sysconfig/network-scripts/ifcfg-eth0, wykorzystujący konfigurację statyczną (bez NetworkManager i nie określający „HWADDR” i „UUID” w poniższym przykładzie) poniżej.

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

/etc/sysconfig/network-scripts/ifcfg-eth1Następuje plik EL (bez NetworkManager i bez określenia „HWADDR” i „UUID” w poniższym przykładzie).

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

Plik EL /etc/sysconfig/network-scripts/route-eth1:

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

Plik EL /etc/sysconfig/network-scripts/rule-eth1:

from 172.16.100.0/24 lookup mgmt
Krzysztof
źródło
-1

W dystrybucji opartej na Debianie możesz na stałe dodać trasę statyczną w następujący sposób:

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

W dystrybucji opartej na RHEL:

echo "172.X.X.X/24 via 172.X.X.X" | sudo tee --append /etc/sysconfig/network-scripts/route-ethX
GAD3R
źródło
3
Nie sudoma to znaczenia w obu twoich poleceniach. Albo jesteś już rootem, więc >>działa, albo nie, w takim przypadku >>jest stosowany jako oryginalny użytkownik i tylko echojako root. Nie powiedzie się to również, jeśli istnieje wiele interfejsów zdefiniowanych w /etc/network/interfaces.
roaima,
1
echo „sth” | nazwa pliku sudo tee
JSBach
to nie działa dla instancji Debiana w gcp
Parv Sharma
Rzeczywiście, w odniesieniu do wersji Debian, podane polecenie w dużym stopniu zależy od tego, który interfejs jest skonfigurowany jako ostatni w pliku / etc / network / interfaces
Gohu
Wszelkie skrypty w Debianie powinny teraz używać poleceń iproute2, takich jak polecenie ip route add <network> via <IP> dev <DEV>net-tools route i polecenia ifconfig, które nie są instalowane domyślnie.
AdamKalisz