Azure IoT Edge for Linux on Windows 的网络配置

适用于:IoT Edge 1.4 复选标记IoT Edge 1.4

重要

Azure IoT Edge 1.5 LTS 和 IoT Edge 1.4 是受支持的版本。 IoT Edge 1.4 LTS 将于 2024 年 11 月 12 日终止服务。 如果你使用的是较低的版本,请参阅更新 IoT Edge

本文可帮助确定哪种网络选项最适合你的方案,并提供有关 IoT Edge for Linux on Windows (EFLOW) 配置要求的见解。

若要通过网络将 IoT Edge for Linux on Windows (EFLOW) 虚拟机连接到主机、Windows 主机上的其他虚拟机以及外部网络上的其他设备/位置,必须相应地配置虚拟机网络。

在 Windows 客户端 SKU 上建立基本网络的最简单方法是使用默认交换机(在启用 Windows Hyper-V 功能时已创建)。 但是,在 Windows Server SKU 设备上,网络会稍微复杂一些,因为没有默认交换机可用。

有关 EFLOW 网络概念的详细信息,请参阅 IoT Edge for Linux on Windows 网络

配置 VM 虚拟交换机

部署 EFLOW 虚拟机前的第一步是确定要使用的虚拟交换机类型。 有关 EFLOW 支持的虚拟交换机的详细信息,请参阅 EFLOW 虚拟交换机选择。 确定要使用的虚拟交换机的类型后,请确保正确创建虚拟交换机。 有关创建虚拟交换机的详细信息,请参阅为 Hyper-V 虚拟机创建虚拟交换机

注意

如果使用的是 Windows 客户端,并且想要使用默认交换机,则无需创建交换机,也不需要 -vSwitchType-vSwitchName 参数。

注意

如果要使用 VMware 基础结构内的 Windows 虚拟机和“外部交换机”,请参阅 EFLOW 嵌套虚拟化

创建虚拟交换机之后、开始部署之前,请确保虚拟交换机名称和类型已经过正确设置并已在 Windows 主机 OS 下列出。 若要列出 Windows 主机 OS 中的所有虚拟交换机,请在权限提升的 PowerShell 会话中使用以下 PowerShell cmdlet:

Get-VmSwitch

视 Windows 主机的虚拟交换机而定,输出应类似于以下内容:

Name           SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
Default Switch Internal
IntOff         Internal
EFLOW-Ext      External

若要使用特定的虚拟交换机(“内部”或“外部”),请确保指定正确的参数:-vSwitchNamevSwitchType。 例如,如果要部署带有名为 EFLOW-Ext 的外部交换机的 EFLOW VM,请在权限提升的 PowerShell 会话中使用以下命令:

Deploy-Eflow -vSwitchType "External" -vSwitchName "EFLOW-Ext"

配置 VM IP 地址分配

决定要使用的虚拟交换机类型后,第二步是确定虚拟交换机的 IP 地址分配类型。 有关 IP 分配选项的详细信息,请参阅 EFLOW 支持的 IP 分配。 根据要使用的虚拟交换机类型,确保使用受支持的 IP 地址分配机制。

默认情况下,如果未设置静态 IP 地址,EFLOW VM 会尝试使用 DHCP 将 IP 地址分配给虚拟交换机。 请确保虚拟交换机网络上有 DHCP 服务器;如果不可用,则 EFLOW VM 安装无法分配 IP 地址,安装会失败。 如果使用的是默认交换机,则无需检查 DHCP 服务器,因为虚拟交换机默认已具有 DHCP。 但是,如果使用的是内部或外部虚拟交换机,可以使用以下步骤进行检查:

  1. 打开命令提示符。
  2. 显示所有 IP 配置和信息
    ipconfig /all
    
  3. 如果使用的是外部虚拟交换机,请检查用于创建虚拟交换机的网络接口。 如果使用的是内部虚拟交换机,只需查找用于交换机的名称。 找到交换机后,检查 DHCP Enabled 的值是“Yes”还是“No”,并检查 DHCP server 地址。

如果使用的是静态 IP,则必须在 EFLOW 部署期间指定三个参数:-ip4Addressip4GatewayAddressip4PrefixLength。 如果一个参数丢失或不正确,则 EFLOW VM 安装无法分配 IP 地址,安装失败。 有关 EFLOW VM 部署的详细信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数。 例如,如果要部署带有名为 EFLOW-Ext 的外部交换机和静态 IP 配置的 EFLOW VM(其 IP 地址等于 192.168.0.2,网关 IP 地址等于 192.168.0.1,IP 前缀长度等于 24),请在权限提升的 PowerShell 会话中使用以下命令:

Deploy-Eflow -vSwitchType "External" -vSwitchName "EFLOW-Ext" -ip4Address "192.168.0.2" -ip4GatewayAddress "192.168.0.1" -ip4PrefixLength "24"

提示

EFLOW VM 将在重新启动后为主要(在部署期间使用)虚拟交换机保留相同的 MAC 地址。 如果使用的是 DHCP MAC 地址预留,可以使用 PowerShell cmdlet 获取主要虚拟交换机 MAC 地址:Get-EflowVmAddr

检查 IP 分配

可通过多种方式检查分配给 EFLOW VM 的 IP 地址。 首先,使用权限提升的 PowerShell 会话,使用 EFLOW cmdlet:

Get-EflowVmAddr

输出应类似于以下内容:

C:\> Get-EflowVmAddr

[03/31/2022 12:54:31] Querying IP and MAC addresses from virtual machine (DESKTOP-EFLOW)

 - Virtual machine MAC: 00:15:5d:4e:15:2c
 - Virtual machine IP : 172.27.120.111 retrieved directly from virtual machine
00:15:5d:4e:15:2c
172.27.120.111

另一种方法是使用 Connect-Eflow cmdlet 远程连接到 VM,然后可以使用 ifconfig eth0 bash 命令并检查 eth0 接口。 输出应如下所示:

eth0      Link encap:Ethernet  HWaddr 00:15:5d:4e:15:2c
          inet addr:172.27.120.111  Bcast:172.27.127.255  Mask:255.255.240.0
          inet6 addr: fe80::215:5dff:fe4e:152c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5636 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2214 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:766832 (766.8 KB)  TX bytes:427274 (427.2 KB)

配置 VM DNS 服务器

默认情况下,EFLOW Linux 虚拟机没有 DNS 配置。 使用 DHCP 的部署会尝试获取由 DHCP 服务器传播的 DNS 配置。 如果使用的是静态 IP,则需要手动设置 DNS 服务器。 有关 EFLOW VM DNS 的详细信息,请参阅 EFLOW DNS 配置

若要检查默认接口 (eth0) 使用的 DNS 服务器,可以使用以下命令:

resolvectl | grep eth0 -A 8

输出应类似于以下内容。 请检查列表的“当前 DNS 服务器”和“DNS 服务器”字段的 IP 地址。 如果没有 IP 地址,或者 IP 地址不是有效的 DNS 服务器 IP 地址,则 DNS 服务将无法正常工作。

Link 2 (eth0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
  Current DNS Server: 172.27.112.1
         DNS Servers: 172.27.112.1

如果需要手动设置 DNS 服务器地址,可以使用 EFLOW PowerShell cmdlet Set-EflowVmDNSServers。 有关 EFLOW VM DNS 配置的详细信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

查看 DNS 解析

可通过多种方式检查 DNS 解析。

首先,从 EFLOW VM 内使用 resolvectl query 命令查询特定 URL。 例如,若要检查名称解析是否对地址 microsoft.com 起作用,请使用:

resolvectl query microsoft.com

输出应如下所示:

PS C:\> resolvectl query
microsoft.com: 40.112.72.205
               40.113.200.201
               13.77.161.179
               104.215.148.63
               40.76.4.15

-- Information acquired via protocol DNS in 1.9ms.
-- Data is authenticated: no

也可以使用 dig 命令查询特定 URL。 例如,若要检查名称解析是否对地址 microsoft.com 起作用,请使用:

dig microsoft.com

输出应如下所示:

PS C:\> dig microsoft.com
; <<>> DiG 9.16.22 <<>> microsoft.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36427
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;microsoft.com.                 IN      A

;; ANSWER SECTION:
microsoft.com.          0       IN      A       40.112.72.205
microsoft.com.          0       IN      A       40.113.200.201
microsoft.com.          0       IN      A       13.77.161.179
microsoft.com.          0       IN      A       104.215.148.63
microsoft.com.          0       IN      A       40.76.4.15

;; Query time: 11 msec
;; SERVER: 127.0

后续步骤

详细了解 Azure IoT Edge for Linux on Windows 安全性

随时了解最新的 IoT Edge for Linux on Windows 更新