我有一个mDNS响应器,它必须响应所有接口上的多播查询。
例如,在启动时,它使用ethernet
接口将其套接字添加到多播组。
然后我连接到VPN并出现一个新的ppp
接口。如何将我的套接字添加到新创建的接口,以便能够对它们做出响应?
示例:
我启动了我的mDNS响应程序应用程序。它创建一个UDP套接字并将其绑定到INADDR_ANY (0.0.0.0)
。然后套接字加入ethernet
接口上的mDNS多播组 - 例如地址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
并且我的查询无法通过,因为(我猜)响应者的套接字未加入新创建的接口上的组播组。 Ofc,这次挖掘从新界面进行查询。
注意:我听说l2tp/ipsec
VPN与ethernet
不兼容。也许这也是一个问题。
如何让套接字接受所有接口上的组播数据包?
答案 0 :(得分:0)
我找到了解决方案。 l2tp/ipsec
没问题。
套接字必须在每个接口上(而不只是在0.0.0.0
上)与多组连接。要在后台加入新创建的接口,应用程序必须启动一个线程,该线程每N秒在所有接口上重新加入。
它允许套接字接受来自所有网络的多播数据包。