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

Проблема с сообщениями IGMP, поступающими только на один интерфейс

Ситуация:

Коробка Linux имеет два интерфейса (eth0 и wlan0). Для обоих есть маршрут по умолчанию, но eth0 предпочтительнее из-за настроек метрики.

Цель:

Я хочу получать многоадресный трафик для определенного IP-адреса многоадресной рассылки на обе интерфейсы.

Что я сделал до сих пор:

Я создал простой скрипт Python, который открывает многоадресный UDP-сокет и выгружает полученные пакеты на стандартный вывод. Я добавил правило регистрации исходящих пакетов через

iptables -I OUTPUT 1 -d 224.0.0.22 -j LOG

Я мог видеть, что, когда я запускаю сценарий Python, Linux отправляет пару сообщений IGMP через eth0, чтобы сообщить локальной сети, что я заинтересован в многоадресном трафике. К сожалению, это не так для интерфейса wlan0. Но оба интерфейса поддерживают многоадресную рассылку.

Соответствующие строки для интерфейсов, которые ip link дает мне:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DORMANT group default qlen 1000  

dmesg показывает мне много сообщений IGMP, исходящих только от 192.168.x.y (eth0):

IN= OUT=eth0 SRC=192.168.x.y DST=224.0.0.22 LEN=40 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2 MARK=0x144

Что я ожидать чтобы увидеть в дополнение к этому "OUT = wlan0 SRC = 10.a.b.c ...", но они не идут.

Просто в целях тестирования я изменил метрики маршрута по умолчанию, так что предпочтительнее использовать wlan0. Но результат не изменился. Сообщения IGMP по-прежнему отправляются только через eth0, а не через wlan0.

Я также попытался изменить адрес привязки сокета с 0.0.0.0 на 10.a.b.c (wlan0), чтобы принудительно использовать интерфейс wlan0. я по-прежнему видеть только пакеты IGMP с OUT = eth0, SRC = 192.168.x.y.

Что мне кажется странным, так это «MARK = 0x144» в конце соответствующих строк dmesg. Я не ожидал увидеть маркировку для сообщений IGMP. Я, конечно, не устанавливал никаких правил изменения iptables, чтобы установить такую ​​отметку.

Вопросы:

Ожидается ли такое поведение?

Что со сделкой MARK=0x144?

Как мне заставить Linux использовать интерфейс wlan0 для многоадресной рассылки или даже использовать только wlan0, если ему нужно выбрать только один интерфейс?

Возможно, мне придется установить демон многоадресной маршрутизации, чтобы эта работа работала, даже если я не заинтересован в пересылке какого-либо многоадресного трафика?