Який найкращий спосіб додати постійний маршрут?


11

Мені потрібно додати маршрут, який не буде видалено після перезавантаження. Я читав ці два способи зробити це:

Додати ip 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

Тож я розгублений. Який найкращий спосіб це зробити?


1
схоже, ви зосереджені на системі Linux? (у нас на сайті є AIX, HPUX, Irix, Solaris, ....).
Джефф Шаллер

Ви маєте рацію, вибачте, що я не вказав, що це в системі Linux Debian. Дякую, що нагадали про це мені.
Pozinux

Ви повинні використовувати команди iproute2, наприклад, ip route add <network> via <IP> dev <DEV>замість команд net-tools (ifconfig, route тощо)
AdamKalisz

Відповіді:


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 / та ін.) Створіть названу таблицю маршрутизації, як згадувалося вище.

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

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

Файл EL /etc/sysconfig/network-scripts/ifcfg-eth0, що використовує статичну конфігурацію (без 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

-1

У дистрибутиві на основі 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

3
sudoЧи не має сенсу в обох ваших двох команд. Або ви вже користуєтеся root, тому >>працює, або ви не працюєте. У цьому випадку >>застосований як ваш оригінальний користувач, і тільки the echoзапускається як root. Крім того, це виходить з ладу, якщо в ньому визначено кілька інтерфейсів /etc/network/interfaces.
roaima

1
відлуння "sth" | sudo tee filename
JSBach

це не працює для екземплярів debian в gcp
Parv Sharma

Дійсно, що стосується версії Debian, дана команда сильно залежить від того, який інтерфейс останній налаштований у файлі / etc / network / interfaces
Gohu

Будь-які сценарії в Debian тепер повинні використовувати команди iproute2, наприклад ip route add <network> via <IP> dev <DEV>замість маршруту net-tools та команди ifconfig, які не встановлені за замовчуванням.
АдамКаліш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.