Вопрос или проблема
У меня есть три интерфейса на сервере с 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 должным образом. Если у вас возникнут дополнительные вопросы, не стесняйтесь справляться за помощью.