Присоединение к группам многоадресной рассылки на вновь созданных интерфейсах с IP_ADD_MEMBERSHIP - PullRequest
0 голосов
/ 12 июня 2018

У меня есть ответчик mDNS, который должен отвечать на многоадресные запросы на всех интерфейсах.

Например, при запуске он добавляет свой сокет в группы многоадресной рассылки, используя интерфейс ethernet.

ЗатемЯ подключаюсь к VPN, и появляется новый интерфейс ppp.Как добавить мой сокет во вновь созданные интерфейсы, чтобы иметь возможность отвечать и на них?

Пример:

  1. Я запускаю приложение респондента mDNS.Он создает сокет UDP и привязывает его к INADDR_ANY (0.0.0.0).Затем сокет присоединяется к многоадресной группе mDNS на интерфейсе ethernet - например, адрес 224.0.0.251, интерфейс 192.168.0.102.

  2. Я запускаю dig @224.0.0.251 hedgaron-debian-test.local -p 5353 и получаю ответ.

  3. Я подключаюсь к VPN, и создается новый интерфейс tun0.

  4. Я снова запускаю dig @224.0.0.251 hedgaron-debian-test.local -p 5353, и мой запрос не выполняетсячерез, потому что (я полагаю) сокет респондента не присоединен к многоадресной группе на вновь созданном интерфейсе.Конечно, на этот раз dig делает запрос из нового интерфейса.

ПРИМЕЧАНИЕ. Я слышал, что l2tp/ipsec VPN не работает вместе с ethernet.Может быть, это тоже проблема.

Как заставить сокет принимать многоадресные пакеты на всех интерфейсах?

1 Ответ

0 голосов
/ 23 июня 2018

Я нашел решение.l2tp/ipsec не проблема.

Сокет должен быть присоединен к многогруппе на каждом интерфейсе, а не только на 0.0.0.0.Чтобы присоединить вновь созданные интерфейсы в фоновом режиме, приложение должно запустить поток, который присоединяется ко всем интерфейсам каждые N секунд.

Это позволяет сокету принимать многоадресные пакеты из всех сетей.

...