Почему маршруты, установленные в /etc/network/interfaces, не добавляются при поднятии интерфейса?

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

Вот мой файл интерфейсов:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth0:0
iface eth0:0 inet static
        address 10.20.8.231
        netmask 255.255.255.0
        gateway 10.20.8.1
        up /sbin/route add 1.2.3.4 gw 10.20.8.1
        down /sbin/route del 1.2.3.4 gw 10.20.8.1

Согласно множеству примеров, которые я нашел в интернете, это должно добавлять маршруты, когда поднимается eth0:0, но по какой-то причине у меня это не работает.

Когда я пытаюсь поднять интерфейс с помощью ifup eth0:0, я получаю:

RTNETLINK answers: File exists
Не удалось поднять eth0:0.

Затем ifconfig показывает, что eth0:0 поднят, но route -n не показывает новый маршрут. На самом деле он показывает те же маршруты, что и раньше. Ничего не изменилось.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.20.8.1       0.0.0.0         UG    0      0        0 eth0
10.20.8.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0

Эта конфигурация должна использоваться на удаленных системах, к которым можно получить доступ только через SSH. Вся идея заключается в том, чтобы оставить eth0 настроенным на dhcp в качестве резервного варианта, когда сеть сайта изменяется (это уже произошло дважды), что делает статический IP недоступным. Проблема в том, что SSH (используемый встроенными процессами) использует маршрут по умолчанию через eth0, что не срабатывает, так как брандмауэр (который нами не управляется) настроен на разрешение ssh только для статического IP на eth0:0.

Примечание: В приведенном выше примере 1.2.3.4 представляет собой наш ssh-сервер, и я пытаюсь маршрутизировать трафик через eth0:0 для этого единственного хоста, но после тестирования я, возможно, захочу установить маршрут по умолчанию на использование eth0:0 вместо этого. Но я также пробовал это, и это не сработало тем же образом. Я использовал эту строку:

up route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.20.8.1

Спасибо за вашу помощь.

Я не считаю хорошей идеей сначала помещать вторичные IP-адреса.

Проблема гораздо серьезнее, чем то, что вы используете маршрут по умолчанию eth0, так как это первый интерфейс: при маршрутизации в другие сети ваш исходный IP — это DHCP IP-адрес de facto, а не 10.20.8.231.

Таким образом, я бы рекомендовал разместить ваш статический адрес в eth0 вместо eth0:0 с следующей конфигурацией:

auto eth0
iface eth0 inet static
    address 10.20.8.231
    netmask 255.255.255.0
    gateway 10.20.8.1

auto eth0:0
iface eth0:0 inet dhcp

Кажется, ifupdown не работает хорошо с инструментами более низкого уровня, такими как iproute2 или net-tools. Это упоминается как предупреждение в официальной документации Debian:

Предупреждение

Не используйте инструменты конфигурации низкого уровня, такие как ifconfig(8) и ip(8), для настройки интерфейса в состоянии up.

Вы можете попробовать вручную сбросить и отключить ваш сетевой интерфейс перед использованием ifupdown, чтобы исправить вашу проблему:

 # ip addr flush dev [interface_name]
 # ip link set down dev [interface_name]
 # ifdown [interface_name]
 # ifup [interface_name]

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

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

1. Конфигурация интерфейсов

Ваша конфигурация интерфейса представлена следующим образом:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth0:0
iface eth0:0 inet static
        address 10.20.8.231
        netmask 255.255.255.0
        gateway 10.20.8.1
        up /sbin/route add 1.2.3.4 gw 10.20.8.1
        down /sbin/route del 1.2.3.4 gw 10.20.8.1

Ошибка RTNETLINK answers: File exists указывает на то, что вы пытаетесь добавить маршрут, который уже существует в таблице маршрутов. Это может происходить по нескольким причинам:

  • Дублирование маршрутов: Убедитесь, что маршрут 1.2.3.4 уже не существует. Используйте route -n или ip route для проверки существующих маршрутов.
  • Порядок поднятия интерфейсов: Ваш статический интерфейс eth0:0 может подниматься до того, как сетевой интерфейс eth0 полностью инициализируется с DHCP, что может вызвать конфликты.

3. Проблемы с конфигурацией маршрутов

Также стоит обратить внимание на то, как вы настраиваете маршруты для статического интерфейса. Ваша конфигурация маршрутизации может конфликтовать с правилами, установленными DHCP. Рекомендуется настроить статический IP прямо на интерфейсе eth0 и использовать DHCP для eth0:0, как показано ниже:

auto eth0
iface eth0 inet static
    address 10.20.8.231
    netmask 255.255.255.0
    gateway 10.20.8.1

auto eth0:0
iface eth0:0 inet dhcp

Таким образом, ваш статический IP будет основным, и DHCP будет поддерживать связь с другими сетями.

4. Использование утилит ifupdown

Важно помнить, что при использовании систем ifupdown не рекомендуется смешивать их с низкоуровневыми инструментами, такими как iproute2 или net-tools. Это может привести к непредсказуемым результатам. Вместо этого использование выводов ifup и ifdown для управления интерфейсами является наилучшей практикой.

5. Очищение и повторная инициализация интерфейсов

Если проблема не решается, вы можете отключить и повторно включить интерфейс, чтобы устранить возможные конфликтные настройки:

# Очищаем сетевой интерфейс
ip addr flush dev eth0

# Отключаем интерфейс
ifdown eth0

# Включаем интерфейс снова
ifup eth0

Заключение

Смешение статических и динамических настроек во многом усложняет управление маршрутами на системах Linux. Рекомендуется использовать один метод для управления IP-адресами на интерфейсах, чтобы минимизировать потенциальные проблемы. Настройка статического IP на основном интерфейсе и использование DHCP для дополнительных виртуальных интерфейсов остается наиболее рекомендованным подходом, особенно когда вы работаете с удаленными системами через SSH.

Если у вас остались вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться.

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

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