Як встановити статичні маршрути на сервері Ubuntu?


51

Я використовував Ubuntu з Ubuntu 8.10; сьогодні я працюю з сервером Ubuntu 12.04.

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

/sbin/route add -net <IP>/<MASK> <GW> dev <ethX>

в /etc/rc.localабо я створив би файл (названий routes) всередині каталогу /etc/network/if-up/, але помічаю, що в Ubuntu 12.04 він не працює.

Якщо я набираю команди в оболонці, вони працюють, але ті ж команди не працюють, коли вони знаходяться у вказаному файлі.

Я вже намагався змінити ім'я файлу на інші імена, думаючи, що моє ім'я файлу ( routes) може бути помилковим в Ubuntu 12.04, але це також не вийшло.

Я також помічаю, що команда /sbin/ifconfigпрацює, менше /sbin/route.

Що змінилося в налаштуваннях мережі?

Як я можу визначити статичні маршрути на Ubuntu 12.04?


Просто для перевірки: чи виконується rc.local, і він починається з лінії shebang? Можливо, це проблема з вашою командою. Ви можете спробувати перенаправити stderr до файлу ( your_command > stderr.txt 2>&1) та перевірити його вихід ...
Salem

Ви повинні встановлювати маршрути в / etc / network / interfaces, а не в /etc/rc.local. І нові команди, які ви повинні використовувати, є ip addі ip route. Одна команда для управління мережею. :)
Андерс

Однозначно читайтеman 5 interfaces
Девід Тонхофер

Відповіді:


64

Ви можете розмістити статичні маршрути в /etc/network/interfaces:

auto eth0
iface eth0 inet static
      address 192.168.1.2
      netmask 255.255.255.0
      up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
      up route add -net 172.16.0.0 netmask 255.240.0.0 gw 192.168.1.1

13
Синтаксис для / sbin / ip:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t

1
Чи ласкаво поясніть свої останні два рядки у відповіді чи надасте посилання на джерело знань? Дякую!
itsols

Ви можете розглядати -net 192.68.0.0 в якості підстановки, кажучи, що всі пакети, призначені для 192.168. *. *, Повинні бути спрямовані через шлюз за замовчуванням 192.168.1.1. Потім ядро ​​спробує вирішити цей шлюз за замовчуванням, але якщо у нього вже є запис ARP, то він відправить пакет із інтерфейсу, за яким він дізнався, що шлюз знаходиться з MAC призначення для наступного переходу. Сподіваюся, що трохи допомагає.
Ніл Макгілл

Також є /etc/network/interfaces.d/, який може бути кращим місцем для розміщення маршруту.
Ілля Лінн

Це працює, але це не описано на підручних сторінках мережевих інтерфейсів. Це стандарт?
BЈовић

18

Я дуже часто виявляв, що правильне місце для визначення статичного маршруту знаходиться в / etc / network / interfaces, це нормально, якщо ви збираєтеся глобально перезапустити мережу, наприклад /etc/init.d/networking перезапуском, наприклад. Але якщо ви збираєтесь використовувати ifdown та ifup для індивідуального відключення інтерфейсу, ifup закінчиться помилкою:

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

Через нього намагається визначити маршрут, але він уже визначений. Інтерфейс все одно буде налаштований, але, якщо ifup не оновлюватиме / запустить / мережу / ifstate, тож наступного разу, якщо ви не будете використовувати прапор --force, наступного разу ви зробите це нам ifdown.

Щоб зробити ifup для продовження налаштування, навіть якщо маршрути вже визначені, ви можете використовувати цей формат, визначаючи маршрути в / etc / network / interfaces

up ip route add 172.16.0.0/24 via 192.168.10.1 || true
up ip route add 192.168.0.0/16 via 192.168.10.1 || true

Таким чином у вас буде попередження на виході, але конфігурація інтерфейсу буде завершена

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553

1
Чому б просто не додати в конфігурацію "down ip route del 192.168.0.0/16 через 192.168.10.1"?
w00t

Оскільки люди роблять такі речі, як використовувати ifconfigвручну, замість того, щоб бігати ifdown, то хочуть мати можливість відновити за допомогою правильних інструментів. Тому корисно, якщо ці інструменти стійкі до несподіваного стану, коли вони намагаються виправити стан. || trueПропозиція є хорошим один. Додавання нижньої лінії також є корисним.
Філ П

5
Від випадкового користувача: Використовуйте «заміну» замість «додати» в команді ip. Наприклад: up ip route replace 172.16.0.0/24 via 192.168.10.1"Замінити" додасть маршрут, якщо він ще не існує, але якщо маршрут з тим самим селектором існує, він буде замінений на поточний, навіть якщо вони мають те саме призначення.
Xen2050

9

Ви можете спробувати це (додати його /etc/network/interfaces), це майже повний спосіб встановлення маршрутів:

auto eth0
iface eth0 inet static
    post-up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
    post-up /bin/mount -t nfs 192.168.0.203:/motd/ /motd/

6

У Ubuntu є пакунок ifupdown-extra .
Він надає автоматичні сценарії (встановлені в /etc/network/*/), один з яких використовується для додавання статичних маршрутів.

Файл конфігурації для цього є /etc/network/routes

У верхній частині цього конфігураційного файлу є хороший опис:

Цей файл конфігурації читається сценарієм if-updown статичних маршрутів та сценарієм /etc/init.d/networking-routes для встановлення списку маршрутів, пов'язаних або з заданим інтерфейсом, або з глобальними маршрутами.

Приклад я використовую:

192.168.240.0 255.255.255.0 192.168.130.3 em3

1

що для нас працювало

sudo route add -net 192.168.0.2/32 gw 192.168.1.1 netmask 255.255.0.0

я працював на Mac:

sudo route -n add -net 192.168.0.2/32 192.168.1.1

але в ubuntu відсутній "gw" між IP-адресами та останньою "мережевою маскою" (також -n не потрібно для ubuntu)


10
це ідеально підходить для тимчасових (непостійних) маршрутів, питання про отримання стійких маршрутів
вівторок,

0

Я вважаю за краще використовувати nmcli.

nmcli device modify <device-name> ipv4.routes "<ip>/<mask> <gw>" ipv4.route-metric 25

Наприклад:

nmcli device modify wlp2s0 ipv4.routes "1.1.1.0/24 192.168.0.1" ipv4.route-metric 25

Після цього застосуйте зміни, перезапустивши послугу NetworkManager:

sudo systemctl restart NetworkManager.service

0

За допомогою nmcliмене вдалося запустити стійке рішення (рішення @isapir не працювало на моєму пристрої).

sudo nmcli connection modify <conection-name> +ipv4.routes "<ip>/<mask> <gw> <mt>"

Наприклад:

sudo nmcli connection modify ssid-name +ipv4.routes "1.1.1.0/24 192.168.0.1 100"

Після цього застосування змін можливо, встановивши з'єднання вниз і знову (не потрібно повного перезавантаження NetworkManager):

sudo nmcli con down ssid-name ; sudo nmcli con up ssid-name

Щоб побачити поточні з'єднання:

sudo nmcli connection
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.