Я пытаюсь подписаться на группу многоадресной рассылки с машины Red Hat с четырьмя сетевыми интерфейсами, каждый из которых находится в другой подсети. Это работает только в том случае, если я привязываю многоадресный сокет к сетевому интерфейсу, на котором шлюз совпадает с настроенным шлюзом по умолчанию.
Моя таблица маршрутов (вывод команды "route"):
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.37.0 * 255.255.255.0 U 0 0 0 eth2
10.1.39.0 * 255.255.255.0 U 0 0 0 eth3
10.1.38.0 * 255.255.255.0 U 0 0 0 eth1
10.1.33.0 * 255.255.255.0 U 0 0 0 eth0
link-local * 255.255.0.0 U 1002 0 0 eth3
link-local * 255.255.0.0 U 1003 0 0 eth0
link-local * 255.255.0.0 U 1004 0 0 eth1
link-local * 255.255.0.0 U 1005 0 0 eth2
default 10.1.33.1 0.0.0.0 UG 0 0 0 eth0
В каждой подсети есть брандмауэр, настроенный как шлюз (в каждом файле конфигурации ifcfg-ethX), во всех интерфейсах он имеет адрес * .1 в этой подсети.
Вот мое исследование с использованием Wireshark:
Если я привяжу сокет к eth0, операционная система отправит пакет многоадресного соединения с полем Dst на уровне Ethernet, установленным на 01: 00: 5e: 02: 02: 11, MAC-адрес многоадресной рассылки. Межсетевой экран принимает этот пакет и начинает ретрансляцию пакетов для этой группы многоадресной рассылки.
Если я привяжу сокет к eth2, операционная система отправит пакет многоадресного соединения с полем Dst на уровне Ethernet, установленным на 84: b8: 02: d2: cd: 88, физический MAC-адрес межсетевого экрана. Брандмауэр отбрасывает этот пакет, поскольку у него нет действительного MAC-адреса многоадресной рассылки.
Если я изменю шлюз по умолчанию на 10.1.37.1, тогда многоадресная рассылка начнет работать на eth2, но не на eth0.
Есть ли у меня неправильная конфигурация? Есть ли способ заставить разные группы многоадресной рассылки одновременно работать с разными сетевыми интерфейсами?