Win10 IoT 上通过 SoftAP 进行多播 DNS

Win10 IoT 上通过 SoftAP 进行多播 DNS

当我将 Win10 IoT 开发板连接到 WiFi 时,我可以通过 macOS 连接到其 Web 界面http://minwinpc.local:8080。主机名的解析通过多播 DNS 进行,可以通过运行观察到dns-sd -q minwinpc.local.

在 Win10 IoT 主板的启动过程中可以观察到相同的行为。在此模式下,AJ_SoftAPSsid主板会公布一个接入点。连接到它之后,再次dns-sd -q minwinpc.local.解析其 IP,并且可以http://minwinpc.local:8080从 macOS 正常访问。

不过,当我手动将 Win10 IoT 板设置为 SoftAP 模式时,事情变得有趣了,例如使用自定义 UWP 应用程序(通过 Powershell,我还没有找到直接使用托管网络的方法,它似乎仅支持 WiFi Direct)。

WiFiDirectAdvertisementPublisher^ p;
p = ref new WiFiDirectAdvertisementPublisher();
p->Advertisement->ListenStateDiscoverability = 
    WiFiDirectAdvertisementListenStateDiscoverability::Intensive;
p->Advertisement->IsAutonomousGroupOwnerEnabled = true;
p->Advertisement->LegacySettings->IsEnabled = true;
p->Advertisement->LegacySettings->Ssid = L"My-SSID";
PasswordCredential^ password = ref new PasswordCredential();
password->Password = L"123456789";
p->Advertisement->LegacySettings->Passphrase = password;
p->Start();

然后我将应用程序添加到自动启动(iotstartup add headless)并重新启动。

当我使用普通 WiFi 访问设备时,一切仍然像以前一样。但是,当我连接到自定义 SoftAP 时,我无法再解析地址,因为多播 DNS 不再通告。有趣的是,如果我使用专用的 Windows 客户端(而不是 Mac 上的 VM),我仍然可以访问http://minwinpc.local:8080http://minwinpc:8080根据 MSDN 文章链接https://stackoverflow.com/a/45619667,这是预期的行为([...]此外,SoftAP不提供DNS解析。[...]

恢复 DNS 解析的一个解决方法是打开 ICS。当我从 IoT Windows 设备门户执行此操作、重新启动并使用 macOS 加入 SoftAP 时,我确实获得了 192.168.137.1(IoT 板)作为 DNS 服务器。我还获得了搜索域mshome.net

启用 ICS 后,行为会发生两种变化:

• 首先,单播 DNS 现在似乎可以工作了(之前单播 DNS 无法工作,无论是在初始AJ_SoftAPSsidWiFi 上还是在常规 WiFi 上)。

dig minwinpc.local. @192.168.137.1

;; QUESTION SECTION:
;minwinpc.local.    IN  A

;; ANSWER SECTION:
minwinpc.       0   IN  A   192.168.137.1
minwinpc.       0   IN  A   172.20.10.7

此外minwinpc.mshome.net.还进行了广告宣传。

;; QUESTION SECTION:
;minwinpc.mshome.net.      IN  A

;; ANSWER SECTION:
minwinpc.mshome.net.    0  IN  A  192.168.137.1

这意味着我现在可以http://minwinpc.mshome.net:8080从 macOS 访问。这也意味着我可以http://minwinpc.local:8080从 VMware 中的 Windows 访问。对于这两个平台,我甚至可以使用,http://minwinpc:8080因为搜索域会自动将其重定向到http://minwinpc.mshome.net:8080

然而,这里最大的问题是它http://minwinpc.local:8080无法在 macOS 上运行,原因是.local域是通过多播 DNS 处理的。

• ICS 开启后的第二个变化与多播 DNS 有关。确实,dns-sd -q minwinpc.mshome.net.ICS 可以解析,但dns-sd -q minwinpc.local.仍然不起作用。

但是,当我使用 注册自己的服务时,当使用而不是进行浏览时DnssdServiceInstance,它会在域 上进行宣传。local.dns-sd -B _mycustom._tcpmshome.net.

但是,当我使用 解析分配给服务的名称时dns-sd -L myname _mycustom._tcp,我得到了minwinpc.local.域名 ^_^: myname._mycustom._tcp.local. can be reached at minwinpc.local.:12345 (interface 5)

这是有问题的,因为minwinpc.local.在多播 DNS 中没有正确公布(minwinpc.mshome.net.而是),并且 macOS 没有遵循该local.域的单播 DNS。


最终,一切都归结为这个问题:

  • 如何使本地多播 DNS 在 SoftAP 接口上工作?

多播 DNS 在初始AJ_SoftAPSsid入职网络上工作正常,如果我将主板连接到与 MacBook 相同的 WiFi,它也能正常工作。如果没有 ICS,它根本无法通过 SoftAP 工作。使用 ICS,它会在除 之外的其他域上进行广告local


免责声明:请注意,所有这些步骤对于当前的 Win10 IoT 来说都有点不可靠。需要很大的耐心和重新启动。此外,除了 WiFi 之外,MacBook 不应通过以太网连接,以免干扰解析过程。

相关内容