Windows 10: включите просмотр сети / WS-Discovery / UPnP / обнаружение служб SSDP в подсетях из проводника Windows.
У меня есть следующий сценарий: два сайта, каждый из которых имеет свою собственную сеть (неперекрывающуюся частную подсеть), соединенные с помощью VPN типа «сеть-сеть» (уровень 3, Wireguard). Маршруты к другим сайтам настраиваются в шлюзах по умолчанию, а также передаются клиентам через DHCP. IP-трафик (v4 и v6) прекрасно передается между сетями.
На обоих VPN-шлюзах avahi-daemon работает как повторитель mDNS (enable-reflector=yes
) между локальной сетью и туннелем Wireguard, а smcroute настроен на пересылку маршрутизируемых многоадресных пакетов SSDP (отправленных в , , ) из локальной сети в туннель 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 отправляются на адреса многоадресной рассылки и . Адрес IPv6 является локальным многоадресным адресом и не маршрутизируется в другую сеть, но запрос отправляется на239.255.255.250
доходит до другой сети, а ответы от устройств там доходят до локальной сети. Но эти устройства не отображаются в проводнике Windows.
Я нашел документацию по Windows UPnP API . Есть раздел о настройках конфигурации , которые можно изменить с помощью ключей реестра. Большинство упомянутых путей реестра существуют, но ни один из упомянутых ключей не установлен. Оба ключа и оба по умолчанию имеют значение , что позволяет обнаруживать хосты в частных подсетях. Я также добавил оба ключа в реестр (как 32-битный DWORD), явно установил для них значение 1 и перезагрузил компьютер с Windows, но проводник Windows по-прежнему показывает только другие компьютеры из той же подсети.
UPnPDeviceFinder можно использовать из PowerShell для получения списка устройств UPnP ( кредитов) :
$ssdpFinder = New-Object -ComObject 'UPnP.UPnPDeviceFinder'
$ssdpFinder.FindByType('ssdp:all', 0)
Это позволяет найти устройства UPnP как из локальной, так и из удаленной сети, также имеющие и не указанные в реестре. Однако запросы IPv6 SSDP M-SEARCH отправляются даже приDownloadScope
иReceiveScope
оба явно установлены на1
и, таким образом, не будут перенаправляться в другие сети .
Итак, остаются два вопроса:
- Как можно настроить Windows 10 так, чтобы Проводник Windows показывал в представлении «Сеть» устройства из других сетей, обнаруженные через WS-Discovery/UPnP/SSDP?
- Как можно настроить Windows 10 (UPnPDeviceFinder, Windows Explorer) для трансляции запросов IPv6 SSDP M-SEARCH на
ff05::c
илиff08::c
вместоff02::c
, чтобы многоадресные сообщения могли перенаправляться в другие сети?