IoT Edge for Linux on Windows 网络

适用于:IoT Edge 1.4 checkmark IoT Edge 1.4

本文介绍了如何在 Windows 主机 OS 与 IoT Edge for Linux on Windows (EFLOW) 虚拟机之间部署网络。 EFLOW 使用 CBL-Mariner Linux 虚拟机来运行 IoT Edge 模块。 有关 EFLOW 体系结构的详细信息,请参阅什么是 Azure IoT Edge for Linux on Windows

网络

若要在 Windows 主机 OS 与 EFLOW 虚拟机之间建立通信通道,请使用 Hyper-V 网络堆栈。 有关 Hyper-V 网络的详细信息,请参阅“Hyper-V 网络基础知识”。 EFLOW 中的基本网络很简单;它使用两个部分:虚拟交换机和虚拟网络。

在 Windows 客户端 SKU 上建立基本网络的最简单方法是使用 Hyper-V 功能已创建的默认交换机。 在 EFLOW 部署期间,如果未使用 -vSwitchName-vSwitchType 标志指定任何特定的虚拟交换机,将使用默认交换机创建虚拟机。

但是,在 Windows Server SKU 设备上,网络会稍微复杂一些,因为没有可用的默认交换机。 但是,我们提供了一个有关 Azure IoT Edge for Linux on Windows 虚拟交换机创建的全面指南。

若要处理不同类型的网络,可以使用不同类型的虚拟交换机并添加多个虚拟网络适配器。

虚拟交换机选项

EFLOW 支持两种类型的 Hyper-V 虚拟交换机:内部和外部。 你需要在 EFLOW 部署之前选择创建所需的其中一个。 可以使用适用于 Windows PowerShell 的 Hyper-V 管理器或 Hyper-V 模块来创建和管理虚拟交换机。 若要详细了解如何创建虚拟交换机,请参阅“为 Hyper-V 虚拟机创建虚拟交换机”。

创建虚拟交换机后,可以对其进行一些更改。 例如,可以将现有交换机更改为其他类型,但这样做可能会影响连接到该交换机的 EFLOW 虚拟机的网络功能。 因此,除非出错或需要测试某些内容,否则不建议更改虚拟交换机配置。

根据 EFLOW VM 是部署在 Windows 客户端 SKU 还是 Windows Server SKU 设备中,我们支持不同类型的交换机,如下表所示。

虚拟交换机类型 Windows 客户端 SKU Windows Server SKU
外部 External on Client External on Server
内部 - Internal on Server
默认交换机 Default on Client -
  • 外部虚拟交换机 - 通过绑定到物理网络适配器连接到有线物理网络。 它允许虚拟机访问物理网络,以便与外部网络上的设备通信。 此外,它还允许同一个 Hyper-V 服务器上的虚拟机相互通信。

  • 内部虚拟交换机 - 连接到一个网络,该网络只能由在具有虚拟交换机的主机上运行的虚拟机使用,以及在主机与虚拟机之间使用。

    注意

    默认交换机是在 Windows 客户端 SKU 中启用 Hyper-V 后默认创建的特定内部虚拟交换机。 虚拟交换机已具有用于 IP 分配的 DHCP 服务器,已启用 Internet 连接共享 (ICS),并具有 NAT 表。 对于 EFLOW,默认交换机是一个虚拟内部交换机,无需进一步配置即可使用。

IP 地址分配

若要启用 EFLOW VM 网络 IP 通信,必须为虚拟机分配 IP 地址。 可以通过两种不同的方法配置此 IP 地址:静态 IP 或 DHCP。

根据所使用的虚拟交换机类型,EFLOW VM 支持不同的 IP 分配,如下表所示。

虚拟交换机类型 静态 IP DHCP
外部 External with static IP External with DHCP
Internal Internal with static IP Internal with DHCP
默认交换机 - Default with DHCP
  • 静态 IP - 此 IP 地址在安装过程中永久分配给 EFLOW VM,不会在 EFLOW VM 或 Windows 主机重新启动时发生变化。 静态 IP 地址通常有两个版本:IPv4 和 IPv6;但是,EFLOW 仅支持 IPv4 地址的静态 IP。 在使用静态 IP 的网络上,网络上的每个设备都有其地址,而且没有重叠。 在 EFLOW 安装期间,必须输入 EFLOW VM IP4 地址 (-ip4Address)、IP4 前缀长度 (-ip4PrefixLength) 以及默认网关 IP4 地址 (-ip4GatewayAddress)。 所有三个参数都必须输入正确的配置。

    例如,如果要使用名为 ExternalEflow 的外部虚拟交换机部署 EFLOW VM,并且具有静态 IP 地址 192.168.0.100、默认网关 192.168.0.1 和前缀长度 24,需要以下部署命令

    Deploy-Eflow -vSwitchName "ExternalEflow" -vswitchType "External" -ip4Address 192.168.0.100 -ip4GatewayAddress 192.168.0.1 -ip4PrefixLength 24
    

    警告

    使用静态 IP 时,必须使用三个参数(ip4Addressip4GatewayAddresip4PrefixLength)。 此外,如果 IP 地址无效、正在由网络上的其他设备使用或者网关地址不正确,则 EFLOW 安装可能会失败,因为 EFLOW VM 无法获取 IP 地址。

  • DHCP - 与静态 IP 相反,使用 DHCP 时,EFLOW 虚拟机分配有动态 IP 地址;该地址可能会发生变化。 网络必须配置并运行 DHCP 服务器才能分配动态 IP 地址。 DHCP 服务器将空置 IP 地址分配给 EFLOW VM 和连接到网络的其他虚拟机。 因此,使用 DHCP 部署 EFLOW 时,不需要 IP 地址、网关地址或前缀长度,因为 DHCP 服务器会提供所有信息。

    警告

    使用 DHCP 部署 EFLOW 时,DHCP 服务器必须存在于连接到 EFLOW VM 虚拟交换机的网络中。 如果没有 DHCP 服务器,则 EFLOW 安装会失败,因为 VM 无法获取 IP 地址。

DNS

域名系统 (DNS) 可将人工可读域名(例如,www.microsoft.com)转换为计算机可读 IP 地址(例如 192.0.2.44)。 EFLOW 虚拟机使用 systemd(系统和服务管理器),因此 DNS 或名称解析服务通过 systemd-resolved 服务提供给本地应用程序和服务。

默认情况下,EFLOW VM DNS 配置文件包含本地存根 127.0.0.53 作为唯一的 DNS 服务器。 这会重定向到 /etc/resolv.conf 文件,该文件用于添加系统使用的名称服务器。 本地存根是在本地运行的 DNS 服务器,用于解析 DNS 查询。 在某些情况下,这些查询会转发到网络中的另一个 DNS 服务器,然后在本地缓存。

可以将 EFLOW 虚拟机配置为使用特定的 DNS 服务器或服务器列表。 若要执行此操作,可以使用 Set-EflowVmDnsServers PowerShell cmdlet。 有关 DNS 配置的详细信息,请参阅适用于 IoT Edge for Linux on Windows 的 PowerShell 函数

若要从 EFLOW VM 内部检查分配给 EFLOW VM 的 DNS 服务器,请使用以下命令:resolvectl status。 该命令的输出将显示为每个接口配置的 DNS 服务器列表。 具体而言,请务必检查 eth0 接口状态,这将是 EFLOW VM 通信的默认接口。 此外,请确保检查列表的“当前 DNS 服务器”和“DNS 服务器”字段的 IP 地址。 如果没有 IP 地址,或者 IP 地址不是有效的 DNS 服务器 IP 地址,则 DNS 服务将无法正常工作。

Screenshot of console showing sample output from resolvectl command.

静态 MAC 地址

Hyper-V 允许使用静态或动态 MAC 地址创建虚拟机。 在 EFLOW 虚拟机创建期间,MAC 地址会随机生成并存储在本地,以在虚拟机或 Windows 主机重新启动之间保留相同的 MAC 地址。 若要查询 EFLOW 虚拟机 MAC 地址,可以使用以下命令。

Get-EflowVmAddr

多个网络接口卡 (NIC)

有许多网络虚拟设备和方案需要多个 NIC。 EFLOW 虚拟机支持附加多个 NIC。 借助多个 NIC,可以更好地管理网络流量。 还可以隔离前端 NIC 和后端 NIC 之间的流量,或者将数据平面流量与管理平面通信隔离开来。

例如,有许多工业 IoT 方案需要将 EFLOW 虚拟机连接到非军事区域 (DMZ),以及连接到所有 OPC UA 兼容设备的脱机网络。 这只是将多个 NIC 附加到 EFLOW VM 支持的多个方案之一。

有关多个 NIC 的详细信息,请参阅多个 NIC 支持

警告

使用 EFLOW 的多个 NIC 功能时,可能需要设置不同的路由优先级。 默认情况下,EFLOW 将为每个分配给 VM 的 ehtX 接口创建一个默认路由,并分配随机优先级。 如果所有接口都连接到 Internet,则随机优先级可能不是问题。 但是,如果其中一个 NIC 连接到脱机网络,则可能需要使联机 NIC 优先于脱机 NIC,以便将 EFLOW VM 连接到 Internet。 有关自定义路由的详细信息,请参阅 EFLOW 路由

后续步骤

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

了解如何管理 EFLOW 网络:Azure IoT Edge for Linux on Windows 的网络配置