Как установить статические маршруты в Ubuntu Server?
Я использовал Ubuntu начиная с Ubuntu 8.10; сегодня я работаю с Ubuntu 12.04 Server.
У меня проблемы с сохранением статических маршрутов при загрузке. Я обычно ставлю команды маршрута
/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?
8 ответов
Вы можете поместить статические маршруты в /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
Я часто обнаруживал, что правильное место для определения статического маршрута находится в /etc/network/interfaces, и это нормально, если вы собираетесь глобально перезапустить сеть, например, с помощью /etc/init.d/networking restart. Но если вы собираетесь использовать ifdown и ifup для индивидуального выключения интерфейса, ifup завершится с ошибкой:
ifup eth1
RTNETLINK answers: File exists
Failed to bring up eth1.
Из-за этого пытается определить маршрут, но он уже определен. Интерфейс все равно будет включен, но ifup не будет обновлять / запускать /network / ifstate, поэтому в следующий раз, когда вы будете использовать нас, вы не сможете это сделать, если не используете флаг --force.
Чтобы заставить 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
Поскольку это 2021 год, вы можете настроить его, используя
netplan
на Ubuntu 18.04 или новее (проверено на Ubuntu 20.04).полная ссылка доступна на сайте netplan . файл конфигурации можно найти в разделе
/etc/netplan/
каталог.
network:
version: 2
ethernets:
ens160: # in my case the interface name is ens160
dhcp4: false # or true. depends on your situation
addresses: [192.168.0.10/24] # your static IP address
# the actual answer is here
routes:
- to: 0.0.0.0/0 # or any other subnet you like. 0.0.0.0/0 means default gateway
via: 172.16.0.1 # or any other gateway you want.
on-link: true # as you see my interface IP address and default gateway are not in the same subnet so we should put this true but if they are in the same subnet this is not required.
PS. файлы конфигурации YAML чувствительны к отступам и не принимают вкладки. отступ 2 пробела.
не забывай бежать
netplan apply
.
Вы можете попробовать это (добавить его в /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/
Существует пакет ifupdown-extra, доступный в Ubuntu.
Предоставляет автоматические скрипты (устанавливаются в /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
С помощью
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
Я предпочитаю использовать 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
Что сработало для нас
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)