如何在 DMZ 上的 Windows 上設定 Azure IoT Edge for Linux on Windows
適用於: IoT Edge 1.5 IoT Edge 1.4
重要
IoT Edge 1.5 LTS 是 支援的版本。 自 2024 年 11 月 12 日起,IoT Edge 1.4 LTS 已結束生命週期。 如果您是舊版,請參閱更新 IoT Edge。
本文將說明如何設定適用於 Linux (EFLOW) VM 的 Azure IoT Edge,以支援多個網路介面卡 (NIC) 並連線到多個網路。 透過啟用多 NIC 支援,在 EFLOW VM 上執行的應用程式可以與連線到離線網路的裝置通訊,同時使用 IoT Edge 將資料傳送至雲端。
必要條件
- 已設定 EFLOW 的 Windows 裝置。 如需 EFLOW 安裝和設定的詳細資訊,請參閱使用對稱金鑰建立和佈建 Azure IoT Edge for Linux on Windows 裝置。
- 與 EFLOW 安裝期間所用預設虛擬交換器不同的虛擬交換器。 如需如何建立虛擬交換器的詳細資訊,請參閱為 Azure IoT Edge for Linux on Windows 建立虛擬交換器。
產業案例
工業 IoT 正在超越資訊技術 (IT) 和運營技術 (IT) 匯流的時代。 不過,透過 IT 技術讓傳統 OT 資產更聰明,也表示更容易受到網路攻擊。 這個情境是多個環境採用非管制區域 (DMZ) 設計的主要原因之一。
假設您有一個工作流程案例,其中網路設定分成兩個不同的網路或區域。 在第一個區域中,您可能有定義為離線網路的安全網路。 離線網路沒有網際網路連線能力,而且僅限內部存取。 在第二個區域中,您可能有一個非管制區域 (DMZ),其中幾個裝置可能具有有限的網際網路連線能力。 當工作流程推進到要在 EFLOW VM 上執行時,您可能會在存取不同網路時遇到問題,因為 EFLOW VM 僅預設連結一個 NIC。
在此案例中,您有一些裝置的環境,例如可程式化邏輯控制器 (PLC) 或開放式平台通訊整合架構 (OPC UA) 相容裝置連線到離線網路,而且您想要使用 EFLOW VM 上執行的 OPC 發行者模組,將所有裝置的資訊上傳至 Azure。
由於 EFLOW 主機裝置和 PLC 或 OPC UA 裝置實際連線到離線網路,因此您可使用 Azure IoT Edge for Linux on Windows 虛擬多個 NIC 設定,將 EFLOW VM 連線到離線網路。 透過使用外部虛擬交換器,您可以將 EFLOW VM 連線到離線網路,並直接與其他離線裝置通訊。
針對其他網路,EFLOW 主機裝置會實際連線到具有網際網路和 Azure 連線能力的 DMZ (線上網路)。 藉由內部或外部交換器,您可以使用 IoT Edge 模組將 EFLOW VM 連線到 Azure IoT 中樞,並透過離線 NIC 上傳離線裝置所傳送的資訊。
案例摘要
安全網路:
- 沒有網際網路連線能力,存取受限。
- 與 PLC 或與 UPC UA 相容的裝置連線。
- 使用外部虛擬交換器連線的 EFLOW VM。
DMZ:
- 網際網路連線能力 - 允許 Azure 連線。
- 連線到 Azure IoT 中樞的 EFLOW VM,使用內部/外部虛擬交換器。
- 在 EFLOW VM 內作為模組執行的 OPC 發行者,用來將資料發佈至 Azure。
設定 VM 網路虛擬交換器
下列步驟適用於範例案例中所述的網路功能。 請確認使用的虛擬交換器及組態與網路環境一致。
注意
本文中的步驟假設已部署 EFLOW VM,且外部虛擬交換器 已連線到安全網路 (離線)。 您可以將下列步驟變更為您想要達成的特定網路設定。 如需 EFLOW 多個 NIC 支援的詳細資訊,請參閱 Azure IoT Edge for Linux on Windows 虛擬多個 NIC 設定。
若要完成佈建 EFLOW VM 並與 Azure 通訊,您必須指派另一個連線到 DMZ 網路 (線上) 的 NIC。
在此案例中,您需要指派外部虛擬交換器連線到 DMZ 網路。 如需詳細資訊,請參閱為 Hyper-V 虛擬機器建立虛擬交換器。
若要建立外部虛擬交換器,請遵循下列步驟:
- 開啟 [Hyper-V 管理員]。
- 在 [動作] 中,選取 [虛擬交換器管理員]。
- 在 [虛擬交換器] 選取 [新增虛擬網路交換器]。
- 選擇 [外部] 類型,然後選取 [建立虛擬交換器]。
- 輸入代表安全網路的名稱。 例如:OnlineOPCUA。
- 在 [連線類型] 底下,選取 [外部網路],然後選擇連線到 DMZ 網路的「網路介面卡」。
- 選取套用。
建立外部虛擬交換器之後,您必須依照下列步驟將其連結至 EFLOW VM。 如果您需要附加多個 NIC,請參閱 EFLOW 多個 NIC。
針對您新建立的自訂外部虛擬交換器,請使用下列 PowerShell 命令以:
將參數連結至您的 EFLOW VM。
Add-EflowNetwork -vswitchName "OnlineOPCUA" -vswitchType "External"
設定靜態 IP。
Add-EflowVmEndpoint -vswitchName "OnlineOPCUA" -vEndpointName "OnlineEndpoint" -ip4Address 192.168.0.103 -ip4PrefixLength 24 -ip4GatewayAddress 192.168.0.1
完成後,請將 OnlineOPCUA 參數指派給 EFLOW VM。 若要檢查多個 NIC 連結,請遵循下列步驟:
用 [以系統管理員身分執行] 開啟提高權限的 PowerShell 工作階段。
連線至 EFLOW 虛擬機器。
Connect-EflowVm
進入 VM 之後,列出指派給 EFLOW 虛擬機的所有網路介面。
ifconfig
檢閱 IP 設定,並確認有看到 eth0 介面 (連線到安全網路),以及 eth1 介面 (連線到 DMZ 網路)。
設定 VM 網路路由
使用 EFLOW 的多個 NIC 功能時,您可以設定不同的路由優先順序。 根據預設,EFLOW 會為每個指派給 VM 的 ehtX 介面建立一個 default (預設) 路由。 EFLOW 會為預設路由指派隨機的優先順序。 如果所有介面都連線到網際網路,隨機優先順序可能不是問題。 不過,如果其中一個 NIC 連線到「離線」網路,您可以將「線上」NIC 的優先順序設定成高於「離線」NIC,藉此讓 EFLOW VM 可連線到網際網路。
EFLOW 會使用路由服務來管理網路路由替代方案。 若要檢查可用的 EFLOW VM 路由,請遵循下列步驟:
用 [以系統管理員身分執行] 開啟提高權限的 PowerShell 工作階段。
連線至 EFLOW 虛擬機器。
Connect-EflowVm
進入 VM 之後,請列出 EFLOW 虛擬機中設定的所有網路路由。
sudo route
提示
上圖顯示路由命令輸出,其中指派了兩個 NIC (eth0 和 eth1)。 虛擬機器會使用不同的計量建立兩個不同的 default (預設) 目的地規則。 較低的計量值具有較高的優先順序。 此路由表會根據先前步驟中設定的網路案例而有所不同。
靜態路由組態
每次啟動 EFLOW VM 時,網路服務都會重新建立所有路由,而且先前指派的任何優先順序都可能會變更。 若要解決此問題,您可以在每次啟動 EFLOW VM 時,為每個路由指派所需的優先順序。 您可以建立每當 VM 啟動時要執行的服務,並使用 route
命令來設定所需的路由優先順序。
首先建立 Bash 指令碼,以執行必要的命令來設定路由。 例如,按照先前所述的網路案例,EFLOW VM 有兩個 NIC (離線和線上網路)。 NIC eth0 會使用閘道 IP xxx.xxx.xxx.xxx 進行連線。 NIC eth1 會使用閘道 IP yyy.yyy.yyy.yyy 進行連線。
下列指令碼會重設 eth0 和 *eth1的 default (預設) 路由,然後新增具有所需 <數字> 計量的路由。 請注意,較低的計量值具有較高的優先順序。
#!/bin/sh
# Wait 30s for the interfaces to be up
sleep 30
# Delete previous eth0 route and create a new one with desired metric
sudo ip route del default via xxx.xxx.xxx.xxx dev eth0
sudo route add -net default gw xxx.xxx.xxx.xxx netmask 0.0.0.0 dev eth0 metric <number>
# Delete previous eth1 route and create a new one with desired metric
sudo ip route del default via yyy.yyy.yyy.yyy dev eth1
sudo route add -net default gw yyy.yyy.yyy.yyy netmask 0.0.0.0 dev eth1 metric <number>
您可以使用先前的指令碼來建立所需網路案例的專屬自訂指令碼。 定義指令碼之後,請將其儲存,然後指派執行權限。 例如,如果指令碼名稱是 route-setup.sh,便可以使用 sudo chmod +x route-setup.sh
命令來指派執行權限。 您可以使用 sudo sh ./route-setup.sh
命令來手動執行指令碼,以確認指令碼是否正常運作,然後使用 sudo route
命令檢查路由表。
最後一個步驟是建立在啟動時執行的 Linux 服務,並執行 bash 指令碼以設定路由。 您必須建立 systemd 單元檔案以載入服務。 以下是檔案的範例。
[Unit]
after=network
[Service]
Type=simple
ExecStart=/bin/bash /home/iotedge-user/route-setup.sh
[Install]
WantedBy=default.target
若要檢查服務是否正常運作,請重新啟動 EFLOW VM (Stop-EflowVm
& Start-EflowVm
),然後使用 Connect-EflowVm
連線到 VM。 使用 sudo route
列出路由,並確認內容正確無誤。 您應該會看到具有指派計量的新 default (預設) 規則。
下一步
請遵循如何為 Azure IoT Edge for Linux on Windows 設定網路中的步驟,驗證是否正確套用所有網路設定。