Установка маршрута по умолчанию в Debian Stretch с несколькими интерфейсами, настроенными с помощью dhcp

Установка маршрута по умолчанию в Debian Stretch с несколькими интерфейсами, настроенными с помощью dhcp

В системе Debian Stretch с несколькими интерфейсами мне нужно определить маршрут по умолчанию через определенный интерфейс ens3. Этот интерфейс получает свой IP-адрес 10.33.34.2через dhcp.

Я адаптировал следующее руководство под свои нужды:

5.3 Современная конфигурация сети без графического интерфейса

Таким образом, я создал файл /etc/systemd/network/route.networkсо следующим содержанием

[Match]
Name=ens3

[Network]
Gateway=10.33.34.1

Однако при запуске маршрут по умолчанию устанавливается неправильно.

Я включил отладку systemd-networkdсогласноКак отладить systemd-networkd?

После перезапуска systemd-networkdв логах вижу следующее:

Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Setting routes
Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Could not set route: Network is unreachable
Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Routes set
Aug 21 13:43:13 vpn dhclient[15709]: Listening on LPF/ens3/52:54:00:3f:f1:d0
Aug 21 13:43:13 vpn dhclient[15709]: Sending on LPF/ens3/52:54:00:3f:f1:d0
Aug 21 13:43:13 vpn dhclient[15709]: Sending on Socket/fallback
Aug 21 13:43:13 vpn dhclient[15709]: DHCPDISCOVER on ens3 to 255.255.255.255 port 67 interval 8
Aug 21 13:43:13 vpn dhclient[15709]: DHCPREQUEST of 10.33.34.2 on ens3 to 255.255.255.255 port 67
Aug 21 13:43:13 vpn dhclient[15709]: DHCPOFFER of 10.33.34.2 from 10.33.34.1
Aug 21 13:43:13 vpn dhclient[15709]: DHCPACK of 10.33.34.2 from 10.33.34.1
Aug 21 13:43:13 vpn systemd-networkd[15671]: ens3: Adding address: 10.33.34.2/24 (valid forever)

Похоже, что networkd пытается установить маршрут до назначения IP-адреса через DHCP.

Как мне установить маршрут по умолчанию для определенного интерфейса с помощью systemd?

== Редактировать ==

Я ошибался, предполагая, что systemd-networkd поднимает интерфейсы. Если я перезапущу систему, я увижу

$ sudo service systemd-networkd status
● systemd-networkd.service - Network Service
   Loaded: loaded (/lib/systemd/system/systemd-networkd.service; disabled; vendor pres
  Drop-In: /etc/systemd/system/systemd-networkd.service.d
           └─10-debug.conf
   Active: inactive (dead)
     Docs: man:systemd-networkd.service(8)

Таким образом, конфигурация /etc/systemd/network/route.networkне вступает в силу при загрузке. В настоящее время мне интересно, какая служба отвечает за включение всех сетевых устройств.

== Редактировать 2 ==

Эта статья Стивена Айвсонадает хорошее представление о том, как запускаются сетевые устройства systemd-udevdи как изменять конфигурацию интерфейса.

Тестируя и читая дальше, я бы также переформулировал свою проблему: несколько интерфейсов поднимаются в случайном порядке. Каждый получает правильную конфигурацию dhcp. Первый поднятый интерфейс установит маршрут по умолчанию и, следовательно, 10.33.34.1не всегда будет использоваться как маршрут по умолчанию

решение1

Есливсеинтерфейсы получают допустимые предложения DHCP с маршрутом по умолчанию, то не будет возможности настроить dhclientих игнорирование — это то, что вы не сможете сделать с помощью systemd, udev, или чего-либо еще, подключенного к системе инициализации.

Один из способов сделать это описанздесь: Вы создаете (конечно, вы также можете использовать редактор) фрагмент скрипта оболочки в одном из каталогов «hook» dhclient,

cat << EOF > /etc/dhcp/dhclient-enter-hooks.d/restrict-default-route
## Only the DHCP server talking to ens3 is allowed to give us a default
## route.  Other interfaces only get local-segment configuration.
case ${interface} in
  ens3)
    ;;
  *)
    unset new_routers
    ;;
esac
EOF

который примет только routersопцию с маршрутом по умолчанию для ens3. Никаких проблем с синхронизацией, никаких проблем с определением того, какие systemdфайлы использовать, и маршрут будет действителен только тогда, когда ens3он включен и получил предложение DHCP.

решение2

Для Debian Stretch интерфейсы именуются udev, а базовая настройка происходит в /etc/network/interfaces. Как указано в редактировании 2, несколько интерфейсов запускаются в случайном порядке. Каждый получает правильную конфигурацию dhcp. Первый запускается интерфейс, который будет задан маршрутом по умолчанию. Нам нужно только принять маршрут по умолчанию для нужного интерфейса. Это может бытьдостигнуто с помощью крючкакdhcpclient

Добавьте новый скрипт-хук /etc/dhcp/dhclient-enter-hooks.d/nodefaultroute:

#!/bin/sh
## Prevent DHCP server on eth0 from forcing a default route on us

case ${interface} in
  ens8|ens9)
     printf "executing ip route delete default via $new_routers\n" 
     ip route delete default via $new_routers
  ;;
     *)
  ;;
esac

Где ens8|ens9можно расширить, чтобы составить список всех интерфейсов, для которых маршрут по умолчанию не может быть принят.

Связанный контент