Привет, товарищи программисты / разработчики / сетевики / Девопс / ...
У меня проблема с настройкой _1 _ / _ 2_ в контексте WSL2 (версия Windows 10 2004)
У меня дома довольно простая установка с главным сервером и Raspberry Pi, и я хотел бы активировать обнаружение службы DNS, что позволяет мне иметь простой способ автоматического обнаружения моего сервера на моем Raspberry PI.
Используя простую библиотеку, такую как dnssd, или даже самостоятельно передавая нужные данные, мне удается заставить ее работать легко, когда не используется WSL2. Однако у меня есть требование, чтобы он работал на WSL2, и здесь все усложняется.
Поскольку WSL2 работает в своей собственной подсети, широковещательная передача больше не работает. Использование mDNS в подсети работает только в этой подсети. Однако Windows уже перенаправляет часть широковещательного трафика между хостом и WSL.
Это легко проверить: выполнение простого Ping
с моего сервера на адрес Avahi Pi, который полагается на mDNS, работает.
В левой части экрана вы можете увидеть трафик, захваченный Wireshark на сетевом интерфейсе хоста, а в правой части вы можете увидеть трафик, захваченный Wireshark на сетевом интерфейсе WSL. Первые 3 строки представляют собой простой пинг: он выполняется в контексте WSL, но отображаемый здесь IP-адрес - 172.28.192.1
- не является IP-адресом клиента WSL, это IP-адрес внутреннего DNS-сервера WSL. . Он идеально перенаправлен на хост, как вы можете видеть справа, с IP-адресом хоста Windows: 192.168.0.39
Однако второй запрос, который выполняется сценарием, имеет исходный IP-адрес WSL (172.28.204.42
), и этот запрос не перенаправляется на хост.
Мои знания о сети очень ограничены, и я не понимаю, как это работает, и как я могу заставить WSL маршрутизировать мои собственные запросы mDNS на хосте. Было бы безумно предположить, что это как-то связано с iptables, но это все, что мне нужно.
Если кто-то знает, почему он работает на исходном адресе DNS-сервера, а не на том, когда я это выполняю сам, это мне очень поможет!