Вы создаете 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
, он не будет отправлять пакет в сеть и не будет помечать его.