1

Рассмотрим следующую настройку:

X@Y:~$ sudo ip link add link eth0 name eth0.3 type vlan id 3
X@Y:~$ sudo ip link add link eth0 name eth0.2 type vlan id 2
X@Y:~$ sudo ifconfig eth0.2 192.168.2.1/30
X@Y:~$ sudo ifconfig eth0.3 192.168.2.2/29
X@Y:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
192.168.2.0     0.0.0.0         255.255.255.252 U     0      0        0 eth0.2
192.168.2.0     0.0.0.0         255.255.255.248 U     0      0        0 eth0.3

Как вы можете видеть, хотя они имеют перекрывающиеся подсети, оба пути для eth0.2 и eth0.3 устанавливаются. Тем не менее, когда я пытаюсь это:

X@Y:~$ sudo ifconfig eth0.3 192.168.2.3/29
X@Y:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
192.168.2.0     0.0.0.0         255.255.255.252 U     0      0        0 eth0.2

Вы можете видеть, что маршрут для eth0.3 не существует. В чем главное отличие? eth0.3 ip является широковещательным адресом подсети, настроенной на eth0.2 . Хорошо, да, это не так, как надо, но интерфейс подключен, единственное, чего не происходит, это добавить маршрут в таблицу маршрутов. И на самом деле, таблица маршрутов даже не заботится об этом широковещательном адресе:

X@Y:~$ sudo route add -net 192.168.2.0/29 dev eth0.3
X@Y:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
192.168.2.0     0.0.0.0         255.255.255.252 U     0      0        0 eth0.2
192.168.2.0     0.0.0.0         255.255.255.248 U     0      0        0 eth0.3
X@Y:~$ sudo ip link del eth0.3
X@Y:~$ sudo ip link del eth0.2

Есть ли способ обойти это? Прежде чем вы заявите, что я сам узнал об этом, добавив маршрут впоследствии: в моей настройке фактический ifconfig происходит через скрипт dhclient, который я не могу редактировать, поэтому для этого добавления маршрута потребуется перехватить dhclient, прочитать IP-адрес откуда-то и выполнить маршрут добавить, что довольно утомительно. Я надеялся, что смогу изменить это поведение с помощью некоторых флагов на интерфейсе?

PS Это, конечно, не реальный дизайн сети, но требуется для настройки тестирования.

1 ответ1

0

Активный /30 маршрут всегда будет предпочтительнее любого /29 маршрута. Таким образом, если у вас не установлен маршрут хоста /32 для 192.168.2.2, таблица маршрутизации будет по-прежнему отправлять трафик на 192.168.2.2 на интерфейс /30.

Непонятно, был ли когда-либо установлен интерфейс 192.168.2.3, поскольку .3 - широковещательная передача для 192.168.2.0/30, а пакет, отправленный на 192.168.2.3, имеет специальную функцию: отправляется всем хостам на 192.168.2.0/. 30, чтобы не быть одноадресной к менее определенной сети на другом интерфейсе.

Если бы вместо /30 и /29 вы работали с /29 и /28, у вас возникла бы проблема с .7.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .