1

Я создал новый VLAN IP для машины, используя

vconfig add eth0 22

Тогда я сделал:

ifconfig eth0.22 192.168.3.2 netmask 255.255.255.0 up`.

После этого, когда я делаю ping 192.168.3.2 это успешно.

После этого, когда я повторяю этот процесс, чтобы создать другой IP-адрес VLAN на другом компьютере в той же локальной сети (192.168.3.1), и пропинговать его, он завершается неудачно. Однако он будет успешным, если я пингую его как с командой ping 192.168.3.1 -I eth0 .

У меня вопрос, что происходит внутри, что вызывает:

  1. VLAN IP той же машины успешно работает.
  2. VLAN IP другого компьютера с общей командой ping не выполняется.
  3. VLAN IP другой машины с командой ping с указанным eth0 успешно выполняется.

1 ответ1

3

Вы создаете VLAN, что означает (в данном случае), что любые пакеты, отправленные из пакета eth0.22, имеют префикс заголовка 802.1Q (тег), говорящий о том, что пакет предназначен для VLAN 22. Коммутатор принимает этот пакет по транковому интерфейсу и пересылает пакет из любых портов, которые определены как разрешающие VLAN 22 (или определенные как разрешающие любые VLAN).

Если выходной интерфейс является портом коммутатора доступа (т. Е. Не транком), тогда заголовок 802.1Q удаляется, и пакет пересылается. Если порт является транком, тег 802.1Q остается на месте.

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

При неуправляемом коммутаторе помеченный пакет не понимается и поэтому отбрасывается.

В вашем случае происходит пинг, когда ваша ОС выбирает соответствующий интерфейс - eth0.22 и отправляет пакет с тегом 802.1q.

ОС выбирает соответствующий интерфейс на основе таблицы маршрутизации. Поскольку 192.168.3.0 явно подключен к интерфейсу eth0.22, то любые пакеты для этой сети по умолчанию отправляются через это взаимодействие. Смотрите таблицу маршрутизации:

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
[..snip..]
192.168.3.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0.22

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

Когда вы заставляете ping из интерфейса eth0, он выходит из нетегированного интерфейса, и поэтому коммутатор понимает пакет и пересылает его. Принимающая машина видит это, и, как это ни странно, работает ping, она будет реагировать не на более подходящий интерфейс eth0.22, а на интерфейс, на который поступил ping.

Может случиться так, что пока ping работает, другие сервисы могут не работать.

Если вы хотите использовать VLAN, вам нужен коммутатор с поддержкой VLAN, в противном случае вы можете просто использовать вторичную адресацию на интерфейсе eth0, если у вас его нет.

Причина, по которой это работает, когда вы пингуете себя, состоит в том, что тегирование 802.1q не происходит до выхода. Поэтому, если 192.168.3.1 отправляет эхо- запрос 192.168.3.1 , он не будет отправлять пакет в сеть и не будет помечать его.

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