Необходимость перезагрузки после добавления/удаления того же маршрута шлюза

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

В качестве учебного задания я использую VirtualBox с Debian 8, чтобы изучить основы сетевого взаимодействия с интерфейсом в режиме мост.

Я отключил dhcp для моего сетевого интерфейса eth0 в /etc/network/interfaces:

# ...
# iface eth0 inet manual

Теперь я конфигурирую интерфейс самостоятельно:

# ifconfig eth0 192.168.0.99/24

Затем я тестирую свой шлюз (который 192.168.0.1) с помощью ping, и он работает отлично.

После этого я добавляю шлюз по умолчанию в таблицу маршрутов:

# route add default gateway 192.168.0.1 netmask 255.255.255.0 dev eth0

После некоторых тестов, загрузок и т.д. я вижу, что все в порядке.

Затем я решил узнать, как удалять маршруты, и протестировал это на своем шлюзе по умолчанию. Это работает.

Вот моя проблема

После попытки снова добавить мой шлюз с той же строкой выше я получил ошибку “SIOCADDRT: Сеть недоступна“.

Что я пробовал, чтобы решить эту проблему?

  1. ifdown и ifup моего интерфейса;
  2. Переоконфигурировать интерфейс с помощью ifconfig;
  3. Перезапустить демона networking.

Единственное, что работает – это перезагрузка машины.

Есть ли способ снова добавить мой маршрут без перезагрузки машины?

Я воспроизвел ваш вопрос на своем сервере

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

Настройка:
Домашний ПК -> добавлен статический IP 192.169.3.2, цель – достичь этого IP с сервера, подключенного к тому же коммутатору (виртуальный коммутатор или физический коммутатор – все равно)

Начальная конфигурация сервера

root@raspberrypi:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr b8:27:eb:fd:73:1b
          inet addr:192.169.1.2  Bcast:192.169.1.255  Mask:255.255.255.0
          inet6 addr: fe80::d89e:52c:aa96:d2b5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3883499 errors:0 dropped:46 overruns:0 frame:0
          TX packets:5939416 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:580337982 (553.4 MiB)  TX bytes:1486713518 (1.3 GiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:370 errors:0 dropped:0 overruns:0 frame:0
          TX packets:370 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:29124 (28.4 KiB)  TX bytes:29124 (28.4 KiB)



root@raspberrypi:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
link-local      *               255.255.0.0     U     202    0        0 eth0
192.169.1.0     *               255.255.255.0   U     0      0        0 eth0

Теперь я создам интерфейс для получения IP ПК (192.169.3.2)

Создание и проверка интерфейса

    root@raspberrypi:~# ifconfig eth0:1 192.169.3.5/24
    root@raspberrypi:~# ifconfig eth0:1
    eth0:1    Link encap:Ethernet  HWaddr b8:27:eb:fd:73:1b
              inet addr:192.169.3.5  Bcast:192.169.3.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Пинг моего домашнего ПК без добавления маршрутов

    root@raspberrypi:~# ping 192.169.3.2
    PING 192.169.3.2 (192.169.3.2) 56(84) bytes of data.
    64 bytes from 192.169.3.2: icmp_seq=1 ttl=128 time=32.3 ms
    64 bytes from 192.169.3.2: icmp_seq=2 ttl=128 time=2.95 ms
    ^C
    --- 192.169.3.2 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 2.956/17.642/32.329/14.687 ms

Проверка текущей таблицы маршрутов

    root@raspberrypi:~# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    link-local      *               255.255.0.0     U     202    0        0 eth0
    192.169.1.0     *               255.255.255.0   U     0      0        0 eth0
    192.169.3.0     *               255.255.255.0   U     0      0        0 eth0

Как видите, маршрут 192.169.3.0/24 через интерфейс eth0 автоматически был добавлен в таблицу маршрутов. Если я удалю этот маршрут, я не смогу получить доступ к этой сети и не смогу добавить маршрут по умолчанию через эту сеть.

Удаление маршрута и проверка доступности

root@raspberrypi:~# route del -net 192.169.3.0/24 dev eth0 
root@raspberrypi:~# route
root@raspberrypi:~# ping 192.169.3.2
PING 192.169.3.2 (192.169.3.2) 56(84) bytes of data.
^C
--- 192.169.3.2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1005ms

Проверка конфигурации интерфейса

root@raspberrypi:~# ifconfig eth0:1
eth0:1    Link encap:Ethernet  HWaddr b8:27:eb:fd:73:1b
          inet addr:192.169.3.5  Bcast:192.169.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

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

Проверка таблицы маршрутов

root@raspberrypi:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
link-local      *               255.255.0.0     U     202    0        0 eth0
192.169.1.0     *               255.255.255.0   U     0      0        0 eth0
root@raspberrypi:~#

Если я снова вручную добавлю маршрут, сеть будет доступна, и я смогу пинговать.

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

Когда вы используете VirtualBox с Debian 8 в режиме моста, для настройки сетевого интерфейса и маршрутизации могут возникнуть сложности. Рассмотрим ситуацию, когда вы сталкиваетесь с ошибкой "SIOCADDRT: Network is unreachable" после того, как удалили и повторно попытались добавить маршрут к шлюзу без перезагрузки системы.

Проблема и ее решение

Первое, что следует понимать, это то, что когда вы добавляете маршрут по умолчанию, система ожидает, что интерфейс будет активен и будет связан с правильной сетью. В вашей ситуации, после удаления маршрута, reinstauration меню не всегда срабатывает из-за состояния сетевого интерфейса и таблицы маршрутизации.

Шаги к решению

  1. Проверка статуса интерфейса:
    Вначале используйте команду ifconfig или ip a, чтобы удостовериться, что ваш интерфейс eth0 активен. Если интерфейс не активен, выполните команду ifup eth0 для его активации.

  2. Проверка таблицы маршрутизации:
    Выполните route -n или ip route show, чтобы убедиться, что текущая таблица маршрутов соответствует вашим ожиданиям. Если ваш шлюз отсутствует, это объясняет сообщение об ошибке.

  3. Удаление неверных маршрутов:
    Если в таблице присутствуют неверные маршруты, их необходимо удалить с помощью команды:

    route del default gw 192.168.0.1

    или

    ip route del default via 192.168.0.1
  4. Добавление маршрута заново:
    После удаления неверного маршрута попробуйте добавить его снова:

    route add default gw 192.168.0.1

    или

    ip route add default via 192.168.0.1
  5. Проверка доступности шлюза:
    Убедитесь, что ваш шлюз доступен, отправив ping:

    ping 192.168.0.1

Альтернативные подходы

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

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

    systemctl restart networking
  • Использование ip вместо route: Команда ip более современная и рекомендуется для настройки маршрутизации. Используйте:

    ip route add default via 192.168.0.1

Заключение

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

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

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