У меня есть ответчик mDNS, который должен отвечать на многоадресные запросы на всех интерфейсах.
Например, при запуске он добавляет свой сокет в группы многоадресной рассылки, используя интерфейс ethernet
.
ЗатемЯ подключаюсь к VPN, и появляется новый интерфейс ppp
.Как добавить мой сокет во вновь созданные интерфейсы, чтобы иметь возможность отвечать и на них?
Пример:
Я запускаю приложение респондента mDNS.Он создает сокет UDP и привязывает его к INADDR_ANY (0.0.0.0)
.Затем сокет присоединяется к многоадресной группе mDNS на интерфейсе ethernet
- например, адрес 224.0.0.251
, интерфейс 192.168.0.102
.
Я запускаю dig @224.0.0.251 hedgaron-debian-test.local -p 5353
и получаю ответ.
Я подключаюсь к VPN, и создается новый интерфейс tun0
.
Я снова запускаю dig @224.0.0.251 hedgaron-debian-test.local -p 5353
, и мой запрос не выполняетсячерез, потому что (я полагаю) сокет респондента не присоединен к многоадресной группе на вновь созданном интерфейсе.Конечно, на этот раз dig делает запрос из нового интерфейса.
ПРИМЕЧАНИЕ. Я слышал, что l2tp/ipsec
VPN не работает вместе с ethernet
.Может быть, это тоже проблема.
Как заставить сокет принимать многоадресные пакеты на всех интерфейсах?