当我将 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:8080
和http://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_SoftAPSsid
WiFi 上还是在常规 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._tcp
mshome.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 不应通过以太网连接,以免干扰解析过程。