Вопрос или проблема
В качестве учебного задания я использую 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: Сеть недоступна“.
Что я пробовал, чтобы решить эту проблему?
ifdown
иifup
моего интерфейса;- Переоконфигурировать интерфейс с помощью
ifconfig
; - Перезапустить демона
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 меню не всегда срабатывает из-за состояния сетевого интерфейса и таблицы маршрутизации.
Шаги к решению
-
Проверка статуса интерфейса:
Вначале используйте командуifconfig
илиip a
, чтобы удостовериться, что ваш интерфейсeth0
активен. Если интерфейс не активен, выполните командуifup eth0
для его активации. -
Проверка таблицы маршрутизации:
Выполнитеroute -n
илиip route show
, чтобы убедиться, что текущая таблица маршрутов соответствует вашим ожиданиям. Если ваш шлюз отсутствует, это объясняет сообщение об ошибке. -
Удаление неверных маршрутов:
Если в таблице присутствуют неверные маршруты, их необходимо удалить с помощью команды:route del default gw 192.168.0.1
или
ip route del default via 192.168.0.1
-
Добавление маршрута заново:
После удаления неверного маршрута попробуйте добавить его снова:route add default gw 192.168.0.1
или
ip route add default via 192.168.0.1
-
Проверка доступности шлюза:
Убедитесь, что ваш шлюз доступен, отправив ping:ping 192.168.0.1
Альтернативные подходы
Если указанные шаги не помогают и ошибка продолжает появляться, вы также можете рассмотреть следующие методы:
-
Перезапуск сетевого демона: В случае если данные шага выше не помогают, вы можете попробовать перезапустить сетевой демон с помощью команды:
systemctl restart networking
-
Использование
ip
вместоroute
: Командаip
более современная и рекомендуется для настройки маршрутизации. Используйте:ip route add default via 192.168.0.1
Заключение
Ошибки подключения в сетевой конфигурации могут быть болезненно сложными, но соблюдение вышеизложенных шагов обычно поможет решить проблему с маршрутизацией без необходимости перезагрузки системы. Также стоит отметить, что для долгосрочного решения желательно задать параметры маршрутов в конфигурационном файле /etc/network/interfaces
, для автоматического применения настроек при перезагрузке.