Каков наилучший способ добавить постоянный маршрут?

11

Мне нужно добавить маршрут, который не будет удален после перезагрузки. Я прочитал эти два способа сделать это:

Добавить up route add -net 172.X.X.0/24 gw 172.X.X.X dev ethXв файл /etc/network/interfaces

или

Создайте файл /etc/network/if-up.d/route с помощью:

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

и сделать его исполняемым:

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

Так что я в замешательстве. Каков наилучший способ сделать это?

Pozinux
источник
1
Похоже, вы сосредоточены на системе Linux? (у нас есть AIX, HPUX, Irix, Solaris, ....) на сайте.
Джефф Шаллер
Вы правы, извините, я не указал, что это было в системе Linux Debian. Спасибо, что напомнили мне.
Pozinux

Ответы:

14

Вы упомянули /etc/network/interfaces, так что это система Debian ...

Создайте именованную таблицу маршрутизации. В качестве примера я использовал имя «mgmt» ниже.

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

Выше ядро ​​поддерживает множество таблиц маршрутизации и ссылается на них с помощью уникальных целых чисел с номерами 0-255. Имя, mgmt, также определено для таблицы.

Ниже приведен обзор по умолчанию /etc/iproute2/rt_tables, показывающий, что некоторые номера зарезервированы. Выбор в этом ответе 200 является произвольным; можно использовать любой номер, который еще не используется, 1-252.

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

Ниже файл интерфейсов Debian 7/8 определяет eth0и eth1. eth1это сеть 172. eth0может использовать DHCP также. 172.16.100.10это IP-адрес для назначения eth1. 172.16.100.1это IP-адрес маршрутизатора.

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

Перезагрузите или перезагрузите сеть.

Обновление - разъяснение на EL

Я заметил в комментарии, что вы тоже «интересуетесь RHEL». В Enterprise Linux («EL» - RHEL / CentOS / et al.) Создайте именованную таблицу маршрутизации, как указано выше.

EL /etc/sysconfig/networkфайл:

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

/etc/sysconfig/network-scripts/ifcfg-eth0Файл EL , использующий статическую конфигурацию (без NetworkManager и без указания «HWADDR» и «UUID» для примера ниже).

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-eth1Файл EL (без NetworkManager и без указания «HWADDR» и «UUID» для примера ниже) следует.

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

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

EL /etc/sysconfig/network-scripts/rule-eth1файл:

from 172.16.100.0/24 lookup mgmt
Кристофер
источник
0

В дистрибутиве на основе Debian вы можете постоянно добавлять статический маршрут следующим образом:

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

На дистрибутиве на основе RHEL:

echo "172.X.X.X/24 via 172.X.X.X" | sudo tee --append /etc/sysconfig/network-scripts/route-ethX
GAD3R
источник
3
Это sudoбессмысленно в обеих ваших командах. Либо вы уже root, так что >>работает, или нет, в этом случае >>применяется как исходный пользователь, и только echoroot запускается как root. Кроме того, это терпит неудачу, если в интерфейсе определено несколько интерфейсов /etc/network/interfaces.
roaima
1
эхо "чч" | Судо
Ти
это не работает для экземпляров Debian в gcp
Parv Sharma
Действительно, что касается версии Debian, данная команда сильно зависит от того, какой интерфейс был настроен последним в файле / etc / network / interfaces
Gohu