Назад | Перейти на главную страницу

Linux dual VLAN, ping работает только в первой VLAN

Я построил эту простую конфигурацию:

----------------                              ----------------
| Linux host A |  <----- patch cable -------> | Linux host B |
----------------                              ----------------

Затем я настроил 2 VLAN на каждом хосте:

eth1                                           eth1
 |                                              |
 |-- eth1.2 -> 192.168.1.2/24                   |-- eth1.2 -> 192.168.1.4/24
 |-- eth1.3 -> 192.168.1.3/24                   |-- eth1.3 -> 192.168.1.5/24

На хосте A, когда я делаю:

ping -I eth1.2 192.168.1.4

это работает, но когда я делаю:

ping -I eth1.3 192.168.1.5

это не работает.

Я пробовал установить на обоих хостах:

sysctl net.ipv4.conf.enth1.rp_filter=0
sysctl net.ipv4.conf.enth1/2.rp_filter=0
sysctl net.ipv4.conf.enth1/3.rp_filter=0

но это не решило проблему.

Использование wirehark на хосте B, отслеживание eth1, показывает, что эхо-запрос с идентификатором VLAN 3 получен правильно, но хост B не отвечает.

Конечно, я проверил свои iptables:

  Chain INPUT
  target     prot opt in   out  source   destination
  ACCEPT     all  --  eth1 any  anywhere anywhere

  Chain OUTPUT (policy ACCEPT)

Когда я делаю на хосте А простой:

ping 192.168.1.5

Хост B отвечает, НО я вижу с помощью wirehark, что пакеты помечены VLAN id 2, это, конечно, работает.

Я предполагаю, что что-то не так с маршрутизацией пакетов с тегами VLAN на хост B, но я не могу найти что!

Вы используете один и тот же IP-сегмент, и у вас нет специальных правил маршрутизации. Это означает, что всегда используется маршрут по умолчанию, а в вашем случае маршрут по умолчанию установлен на VLAN2.

Лучше всего, если вы дифференцируете свои VLAN по разным IP-сегментам. Например, ваша VLAN2 может использовать существующие 192.168.1.1/24, а VLAN3 может использовать 192.168.3.1/24.