У меня есть следующий сценарий: два сайта, каждый со своей собственной сетью (непересекающаяся частная подсеть), подключенные с помощью межсайтовой VPN (уровень 3, Wireguard). Маршруты к другим сайтам настраиваются в шлюзах по умолчанию и также распределяются клиентам по DHCP. IP-трафик (v4 и v6) нормально перемещается между сетями.
На обоих VPN-шлюзах авахи-демон работает как ретранслятор mDNS (включить-отражатель = да
) между локальной сетью и туннелем wireguard, и хитрый настроен на пересылку маршрутизируемые многоадресные пакеты SSDP (отправлено в 239.255.255.250
, ff05::c
, ff08::c
) из локальной сети в туннель wireguard и наоборот. Это работает хорошо, пакеты MDNS и SSDP перемещаются из одной сети в другую, я проверил это с помощью Wireshark.
В Windows 10 (21H2) разрешение имен mDNS для доменов .local хорошо работает в обеих сетях благодаря отражению демона avahi.В VLC в Windows мультимедийные устройства из обеих сетей обнаруживаются с помощью mDNS, а также UPnP (SSDP), и к ним можно получить доступ. Однако проводник Windows показывает только устройства из локальной сети в представлении «Сеть».
Я уже проверил и попробовал следующие вещи:
- Служба публикации ресурсов обнаружения функций (FDResPub) включена и работает.
- Служба узла провайдера обнаружения функций (fdPHost) включена и работает (хотя, насколько я понимаю, это не обязательно для обнаружения службы).
- Обнаружение сети и общий доступ к файлам и принтерам включены для активного сетевого профиля (частного) в дополнительных настройках общего доступа.
- Я полностью отключил брандмауэр Windows для тестирования (другие брандмауэры не установлены).
При нажатии Ctrl + F5 в представлении «Сеть» в проводнике Windows я вижу, что запросы SSDP M-SEARCH отправляются на многоадресные адреса. 239.255.255.250
и ff02::c
. IPv6-адрес ff02::c
является локальным многоадресным адресом и не маршрутизируется в другую сеть, а запрос, отправленный в 239.255.255.250
достигает другой сети, и ответы от устройств достигают локальной сети. Но эти устройства не отображаются в проводнике Windows.
я нашел документация по Windows UPnP API. Есть раздел про параметры конфигурации это можно изменить с помощью ключей реестра. Большинство упомянутых путей реестра существуют, но ни один из упомянутых ключей не установлен. Ключи СкачатьScope
и Приемескопе
оба по умолчанию 1
, что позволяет обнаруживать хосты в частных подсетях. Я также добавил оба ключа в реестр (как 32-битный DWORD), явно установил для них значение 1 и перезагрузил компьютер с Windows, но проводник Windows по-прежнему показывает только другие компьютеры из той же подсети.
UPnPDeviceFinder можно использовать из PowerShell для получения списка устройств UPnP (кредиты):
$ssdpFinder = New-Object -ComObject 'UPnP.UPnPDeviceFinder'
$ssdpFinder.FindByType('ssdp:все', 0)
Этот делает найти UPnP-устройства как в локальной, так и в удаленной сети, а также с помощью СкачатьScope
и Приемескопе
не указано в реестре. Однако запросы IPv6 SSDP M-SEARCH отправляются на ff02::c
даже с СкачатьScope
и Приемескопе
оба явно настроены на 1
и поэтому не должны направляться в другие сети.
Так что осталось два вопроса:
- Как можно настроить Windows 10 так, чтобы проводник Windows показывал устройства из других сетей, обнаруженные с помощью WS-Discovery / UPnP / SSDP, в представлении «Сеть»?
- Как можно настроить Windows 10 (UPnPDeviceFinder, Windows Explorer) для трансляции запросов IPv6 SSDP M-SEARCH на
ff05::c
или же ff08::c
вместо ff02::c
, чтобы многоадресные сообщения могли маршрутизироваться в другие сети?