постоянный маршрут по умолчанию на debian 9

Вопрос или проблема

У меня есть три интерфейса на сервере с Debian 9. Мне нужно установить маршрут по умолчанию постоянно для всей системы. Я пытался добавить его разными способами в файл /etc/network/interfaces, но не могу найти правильный вариант. Я добавил маршрут вниз в секцию интерфейсов, а также внизу файла, но ни один из них не сработал. Какой правильный синтаксис? Все маршруты должны выходить через ens256, а все локальные маршруты должны выходить через остальные интерфейсы.

    # Основной сетевой интерфейс
allow-hotplug ens192
iface ens192 inet static
  address 10.21.30.10
  netmask 255.255.255.0
  gateway 10.21.30.254
down route del default gw 10.21.30.254

allow-hotplug ens224
iface ens224 inet static
  address 10.21.10.10
  netmask 255.255.255.0
  gateway 10.21.10.254
down route del default gw 10.21.10.254

allow-hotplug ens256
iface ens256 inet static
  address 1.2.3.157
  netmask 255.255.255.248
  gateway 1.2.3.153
  dns-nameservers 4.2.2.2 8.8.8.8
up route add default gw 1.2.3.153

Если я помещаю конфигурацию post в конец файла. “post-up /bin/ip route add default via 1.2.3.153 dev ens256” Это работает, и я могу пинговать и выходить в интернет, но не могу выполнить apt-get. Когда я пытаюсь это сделать, я получаю следующую ошибку.

Ign:1 http://security.debian.org/debian-security stretch/updates InRelease
Err:2 http://security.debian.org/debian-security stretch/updates Release
  Connection failed [IP: 199.232.32.204 80]
Ign:3 http://ftp.us.debian.org/debian stretch InRelease
Ign:4 http://ftp.us.debian.org/debian stretch-updates InRelease
Err:5 http://ftp.us.debian.org/debian stretch Release
  Connection failed [IP: 208.80.154.15 80]
Err:6 http://ftp.us.debian.org/debian stretch-updates Release
  Connection failed [IP: 64.50.233.100 80]
Чтение списков пакетов... Готово
E: Репозиторий 'http://security.debian.org/debian-security stretch/updates Release' больше не имеет файла Release.
N: Обновление из такого репозитория не может быть выполнено безопасно, и поэтому по умолчанию отключено.
N: См. man-страницу apt-secure(8) для получения информации о создании репозиториев и настройке пользователей.
E: Репозиторий 'http://ftp.us.debian.org/debian stretch Release' больше не имеет файла Release.
N: Обновление из такого репозитория не может быть выполнено безопасно, и поэтому по умолчанию отключено.
N: См. man-страницу apt-secure(8) для получения информации о создании репозиториев и настройке пользователей.
E: Репозиторий 'http://ftp.us.debian.org/debian stretch-updates Release' больше не имеет файла Release.
N: Обновление из такого репозитория не может быть выполнено безопасно, и поэтому по умолчанию отключено.
N: См. man-страницу apt-secure(8) для получения информации о создании репозиториев и настройке пользователей.

Я полагаю, что у вас должна быть только одна строка с шлюзом.

У меня было что-то похожее здесь

allow-hotplug ens192
iface ens192 inet static
  address 10.21.30.10/24
  gateway 10.21.30.254
  down /bin/ip route del default via 10.21.30.254

allow-hotplug ens224
iface ens224 inet static
  address 10.21.10.10/24
  gateway 10.21.10.254
  down /bin/ip route del default via 10.21.10.254

allow-hotplug ens256
iface ens256 inet static
  address 1.2.3.157/29
  up /bin/ip route add default via 1.2.3.153 dev ens256

После директив up или post-up вы можете добавлять любую команду, которую хотите. В этом случае я использовал /bin/ip route.

Ваш вопрос в основном касается синтаксиса метода static. Вот что man interfaces говорит о доступных параметрах:

IFACE OPTIONS
   Следующие "командные" параметры доступны для каждой семьи и
   метода. Каждый из этих параметров может быть указан несколько раз в одном
   разделе, в этом случае команды выполняются в порядке их появления в разделе. 
   (Вы можете убедиться, что команда никогда не завершится с ошибкой, добавив в конце "|| true".)

   pre-up command
      Выполнить команду перед включением интерфейса. Если эта команда
      завершится с ошибкой, then ifup прерывается, не отмечая интерфейс как
      сконфигурированный, выводит сообщение об ошибке и завершает работу с кодом 0. Это
      поведение может измениться в будущем.

   up command

   post-up command
      Выполнить команду после включения интерфейса. Если эта команда завершится с ошибкой,
      тогда ifup прерывается, не отмечая интерфейс как сконфигурированный
      (хотя на самом деле он был настроен), выводит сообщение об ошибке
      и завершает работу с кодом 0. Это поведение может измениться в будущем.

   down command

   pre-down command
      Выполнить команду перед выключением интерфейса. Если эта команда завершится с ошибкой,
      then ifdown прерывается, отмечает интерфейс как деактивированный
      (хотя на самом деле он не был деактивирован) и завершает работу с кодом 0. Это
      поведение может измениться в будущем.

   post-down command
      Выполнить команду после выключения интерфейса. Если эта команда завершится с ошибкой,
      тогда ifdown прерывается, отмечает интерфейс как деактивированный и завершает работу
      с кодом 0. Это поведение может измениться в будущем.

   description name
      Псевдоним интерфейса по имени

Метод static
   Этот метод может использоваться для определения Ethernet интерфейсов с
   статически выделенными IPv4 адресами.

   Параметры
      address address
         Адрес (точечный квадрат/маска) обязательный

      netmask mask
         Маска (точечный квадрат или количество бит) устаревшая

      broadcast broadcast_address
         Широковещательный адрес (точечный квадрат, + или -) устаревший. 
         Значение по умолчанию: "+"

      metric metric
         Метрика маршрутизации для шлюза по умолчанию (целое число)

      gateway address
         Шлюз по умолчанию (точечный квадрат)

      pointopoint address
         Адрес другого конечного пункта (точечный квадрат). Обратите внимание на написание
         "point-to".

      hwaddress address
         Локальный адрес или "случайный".

      mtu size
         Размер MTU

      scope  Область действия адреса. Возможные значения: global, link, host

Вы можете заметить, что route не является параметром. Вам нужно использовать /bin/ip route или gateway для этого. Также dns-nameservers тоже не является параметром. Вам нужно использовать resolv.conf для этого (или, возможно, сетевой менеджер, если он перезаписывает его).

Когда все интерфейсы активны, у вас есть несколько записей шлюзов по умолчанию, которые конфликтуют друг с другом.

Если вы не делаете что-то сложное и действительно знаете, что делаете, вы должны применять “Правило высокогорца” к записям шлюза по умолчанию: Может быть только один.

Мне кажется, что правильный синтаксис будет таким:

allow-hotplug ens192
iface ens192 inet static
  address 10.21.30.10
  netmask 255.255.255.0
  # нет маршрута к Интернету через этот интерфейс, поэтому нет "шлюза" здесь! 

allow-hotplug ens224
iface ens224 inet static
  address 10.21.10.10
  netmask 255.255.255.0
  # нет маршрута к Интернету через этот интерфейс, поэтому нет "шлюза" здесь!

allow-hotplug ens256
iface ens256 inet static
  address 1.2.3.157
  netmask 255.255.255.248
  gateway 1.2.3.153
  dns-nameservers 4.2.2.2 8.8.8.8

Другой ответ сказал, что dns-nameservers не указан в man interfaces. Это правда, но синтаксис /etc/network/interfaces в Debian можно расширить с помощью дополнительных пакетов.

Например, если у вас установлен пакет resolvconf, dns-nameservers может быть действительным. Или если у вас установлен пакет wpasupplicant, вы можете использовать некоторые ключевые слова, начинающиеся с wpa- в /etc/network/interfaces, чтобы настроить интерфейсы WiFi.

Если у вас была сеть 10.21.31.0/24, которая была доступна только через 10.21.30.254, вам нужно было бы добавить конкретный маршрут для нее. Тогда конфигурация для интерфейса ens192 будет такой:

allow-hotplug ens192
iface ens192 inet static
  address 10.21.30.10
  netmask 255.255.255.0
  # нет маршрута к Интернету через этот интерфейс, поэтому нет "шлюза" здесь!
  up /sbin/route add -net 10.21.31.0 netmask 255.255.255.0 gw 10.21.30.254

Другой способ указать сетевой маршрут, используя команду ip вместо route, будет таким:

  up /bin/ip route add 10.21.31.0/24 via 10.21.30.254 dev ens192

(В более новых версиях Debian route считается устаревшим и больше не устанавливается по умолчанию, в то время как ip является частью минимальной базовой установки.)

Обычно нельзя писать соответствующие записи down для маршрутов, потому что все маршруты, проходящие через интерфейс, который отключается, будут автоматически удалены ядром.

Ответ или решение

Для настройки постоянного маршрута по умолчанию на Debian 9 с несколькими сетевыми интерфейсами, необходимо правильно указать параметры в конфигурационном файле /etc/network/interfaces. Давайте рассмотрим, как это сделать, а также объясним некоторые важные аспекты конфигурации сетевых интерфейсов.

Шаг 1: Удалите лишние маршруты по умолчанию

Ошибка, с которой вы столкнулись, связана с тем, что у вас установлены несколько маршрутов по умолчанию. Согласно "правилу Хайлендера", у вас должен быть только один маршрутизатор по умолчанию в системе. Таким образом, для интерфейсов ens192 и ens224, которые не должны использоваться для выхода в интернет, следует удалить строки с указанием gateway.

Шаг 2: Правильная настройка интерфейсов

Ваш файл конфигурации /etc/network/interfaces должен выглядеть так:

allow-hotplug ens192
iface ens192 inet static
  address 10.21.30.10
  netmask 255.255.255.0
  # Не указываем шлюз, так как этот интерфейс не будет использоваться для выхода в интернет

allow-hotplug ens224
iface ens224 inet static
  address 10.21.10.10
  netmask 255.255.255.0
  # Не указываем шлюз

allow-hotplug ens256
iface ens256 inet static
  address 1.2.3.157
  netmask 255.255.255.248
  gateway 1.2.3.153
  dns-nameservers 4.2.2.2 8.8.8.8

Шаг 3: Объяснение конфигурации

  • allow-hotplug: Эта директива позволяет системе автоматически конфигурировать интерфейсы при их подключении.
  • iface: Задает параметры для конкретного интерфейса, включая IP-адрес и маску подсети.
  • gateway: Указание шлюза по умолчанию для интерфейса ens256, через который будет идти весь трафик в интернет.
  • dns-nameservers: Указывает DNS-серверы, которые следует использовать.

Дополнительные команды

Если вам нужно добавить дополнительные маршруты, вы можете использовать директиву up или post-up:

    up /bin/ip route add 10.21.31.0/24 via 10.21.30.254 dev ens192

Эта команда добавит маршрут для сети 10.21.31.0/24, который пройдет через интерфейс ens192.

Шаг 4: Проверка конфигурации

После внесения изменений в файл /etc/network/interfaces, рекомендуется перезапустить сетевые интерфейсы или саму систему, чтобы применить новые настройки:

sudo systemctl restart networking

Или перезагрузите систему:

sudo reboot

Шаг 5: Тестирование

После перезапуска, вы можете проверить текущие маршруты, выполнив команду:

ip route

Убедитесь, что у вас есть только один маршрут по умолчанию, указывающий на 1.2.3.153.

Заключение

Соблюдение правильной конфигурации сетевых интерфейсов критично для обеспечения корректной работы сети на сервере с несколькими интерфейсами. Следуя представленным советам, вы сможете настроить постоянный маршрут по умолчанию на Debian 9 должным образом. Если у вас возникнут дополнительные вопросы, не стесняйтесь справляться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...