Condividi tramite


Come configurare Azure IoT Edge per Linux in Windows in una rete perimetrale

Si applica a: Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

Azure IoT Edge 1.5 LTS e IoT Edge 1.4 sono versioni supportate. IoT Edge 1.4 LTS sta raggiungendo la fine del servizio il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

Questo articolo descrive come configurare la macchina virtuale di Azure IoT Edge per Linux (EFLOW) in modo che possa supportare più schede di interfaccia di rete (NIC) e connettersi a più reti. Abilitando il supporto di più schede di interfaccia di rete, le applicazioni in esecuzione nella macchina virtuale EFLOW possono comunicare con i dispositivi connessi alla rete offline, usando IoT Edge per inviare dati al cloud.

Prerequisiti

Scenario industriale

L'IoT industriale sta superando l'era della convergenza della tecnologia informatica (IT) e della tecnologia operativa (OT). Tuttavia, rendere gli asset OT tradizionali più intelligenti con le tecnologie IT si traduce anche in una maggiore esposizione agli attacchi informatici. Questo scenario è uno dei motivi principali per cui più ambienti vengono progettati usando zone demilitarizzate, note anche come DMZ o reti perimetrali.

Si immagini uno scenario del flusso di lavoro in cui si dispone di una configurazione di rete divisa in due reti o zone diverse. Nella prima zona potrebbe essere presente una rete sicura definita come rete offline. La rete offline non ha connettività Internet ed è limitata all'accesso interno. Nella seconda zona potrebbe essere presente una rete perimetrale, in cui potrebbero essere presenti un paio di dispositivi con connettività Internet limitata. Quando si sposta il flusso di lavoro per l'esecuzione nella macchina virtuale EFLOW, potrebbero verificarsi problemi di accesso alle diverse reti perché per impostazione predefinita la macchina virtuale EFLOW ha una sola scheda di interfaccia di rete collegata.

In questo scenario si dispone di un ambiente con alcuni dispositivi come PLC (Programmable Logic Controller) o dispositivi compatibili con l'architettura unificata OPC UA (Open Platform Communications Unified Architecture) connessi alla rete offline e si vogliono caricare tutte le informazioni dei dispositivi in Azure usando il modulo OPC Publisher in esecuzione nella macchina virtuale EFLOW.

Poiché il dispositivo host EFLOW e i dispositivi PLC o OPC UA sono fisicamente connessi alla rete offline, è possibile usare le configurazioni con più schede di interfaccia di rete virtuali di Azure IoT Edge per Linux in Windows per connettere la macchina virtuale EFLOW alla rete offline. Usando un commutatore virtuale esterno, è possibile connettere la macchina virtuale EFLOW alla rete offline e comunicare direttamente con altri dispositivi offline.

Per l'altra rete, il dispositivo host EFLOW è fisicamente connesso alla rete perimetrale (rete online) con connettività Internet e Azure. Usando un commutatore interno o esterno, è possibile connettere la macchina virtuale EFLOW all'hub IoT di Azure usando i moduli IoT Edge e caricare le informazioni inviate dai dispositivi offline tramite la scheda di interfaccia di rete offline.

Screenshot di uno scenario IoT industriale EFLOW che mostra una macchina virtuale EFLOW connessa a una rete offline e online.

Riepilogo dello scenario

Rete protetta:

  • Nessuna connettività Internet - accesso limitato.
  • PLC o dispositivi compatibili con UPC UA connessi.
  • Macchina virtuale EFLOW connessa con un commutatore virtuale esterno.

Rete perimetrale:

  • Connettività Internet - Connessione ad Azure consentita.
  • Macchina virtuale EFLOW connessa all'hub IoT di Azure usando un commutatore virtuale interno/esterno.
  • OPC Publisher in esecuzione come modulo all'interno della macchina virtuale EFLOW usata per pubblicare i dati in Azure.

Configurare i commutatori virtuali di rete della macchina virtuale

I passaggi seguenti sono specifici per la rete descritta nello scenario di esempio. Assicurarsi che i commutatori virtuali e le configurazioni usati siano allineati all'ambiente di rete.

Nota

I passaggi descritti in questo articolo presuppongono che la macchina virtuale EFLOW sia stata distribuita con un commutatore virtuale esterno connesso alla rete protetta (offline). È possibile modificare i passaggi seguenti per creare la configurazione di rete specifica che si vuole ottenere. Per altre informazioni sul supporto di più schede di interfaccia di rete di EFLOW, vedere Configurazioni di più schede di interfaccia di rete virtuali di Azure IoT Edge per Linux in Windows.

Per completare il provisioning della macchina virtuale EFLOW e comunicare con Azure, è necessario assegnare un'altra scheda di interfaccia di rete connessa alla rete perimetrale (online).

Per questo scenario, si assegna un commutatore virtuale esterno connesso alla rete perimetrale. Per altre informazioni, vedere Creare un commutatore virtuale per le macchine virtuali Hyper-V.

Per creare un commutatore virtuale esterno, seguire questa procedura:

  1. Aprire Hyper-V Manager.
  2. In Azioni selezionare Gestione commutatori virtuali.
  3. In Commutatori virtuali selezionare Nuovo commutatore di rete virtuale.
  4. Scegliere il tipo Esterno e quindi selezionare Crea commutatore virtuale.
  5. Immettere un nome che rappresenta la rete protetta. Ad esempio, OnlineOPCUA.
  6. In Tipo di connessione selezionare Rete esterna e quindi scegliere la scheda di rete connessa alla rete perimetrale.
  7. Selezionare Applica.

Dopo aver creato il commutatore virtuale esterno, è necessario collegarlo alla macchina virtuale EFLOW seguendo questa procedura. Se è necessario collegare più schede di interfaccia di rete, vedere Più schede di interfaccia di rete EFLOW.

Per il nuovo commutatore virtuale esterno personalizzato creato, usare i comandi di PowerShell seguenti per:

  1. Collegare il commutatore alla macchina virtuale EFLOW.

    Add-EflowNetwork -vswitchName "OnlineOPCUA" -vswitchType "External"
    

    Screenshot della creazione corretta della rete esterna denominata OnlineOPCUA.

  2. Impostare un indirizzo IP statico.

    Add-EflowVmEndpoint -vswitchName "OnlineOPCUA" -vEndpointName "OnlineEndpoint" -ip4Address 192.168.0.103 -ip4PrefixLength 24 -ip4GatewayAddress 192.168.0.1
    

    Screenshot della configurazione corretta del commutatore OnlineOPCUA.

Al termine, sarà disponibile il commutatore OnlineOPCUA assegnato alla macchina virtuale EFLOW. Per controllare il collegamento di più schede di interfaccia di rete, seguire questa procedura:

  1. Aprire una sessione di PowerShell con privilegi elevati avviandola con Esegui come amministratore.

  2. Connettersi alla macchina virtuale EFLOW.

    Connect-EflowVm
    
  3. Dopo aver eseguito l'accesso alla macchina virtuale, elencare tutte le interfacce di rete assegnate alla macchina virtuale EFLOW.

    ifconfig
    
  4. Controllare la configurazione IP e verificare che siano visibili l'interfaccia eth0 (connessa alla rete protetta) e l'interfaccia eth1 (connessa alla rete perimetrale).

    Screenshot che mostra la configurazione IP di più schede di interfaccia di rete connesse a due reti diverse.

Configurare il routing di rete della macchina virtuale

Quando si usa la funzionalità EFLOW con più schede di interfaccia di rete, è possibile configurare le diverse priorità di route. Per impostazione predefinita, EFLOW crea una route predefinita per ogni interfaccia htX assegnata alla macchina virtuale. EFLOW assegna alla route predefinita una priorità casuale. Se tutte le interfacce sono connesse a Internet, le priorità casuali potrebbero non essere un problema. Tuttavia, se una delle schede di interfaccia di rete è connessa a una rete offline, è consigliabile impostare come prioritaria la scheda di interfaccia di rete online tramite la scheda di interfaccia di rete offline per ottenere la macchina virtuale EFLOW connessa a Internet.

EFLOW usa il servizio route per gestire le alternative di routing di rete. Per controllare le route della macchina virtuale EFLOW disponibili, seguire questa procedura:

  1. Aprire una sessione di PowerShell con privilegi elevati avviandola con Esegui come amministratore.

  2. Connettersi alla macchina virtuale EFLOW.

    Connect-EflowVm
    
  3. Dopo aver eseguito l'accesso alla macchina virtuale, elencare tutte le route di rete configurate nella macchina virtuale EFLOW.

    sudo route
    

    Screenshot che mostra la tabella di routing per la macchina virtuale EFLOW.

    Suggerimento

    L'immagine precedente mostra l'output del comando di route con le due schede di interfaccia di rete assegnate (eth0 ed eth1). La macchina virtuale crea due diverse regole di destinazione predefinite con metriche diverse. Un valore della metrica inferiore ha una priorità più alta. Questa tabella di routing varierà a seconda dello scenario di rete configurato nei passaggi precedenti.

Configurazione delle route statiche

Ogni volta che viene avviata la macchina virtuale EFLOW, i servizi di rete ricreano tutte le route e qualsiasi priorità assegnata in precedenza potrebbe cambiare. Per risolvere questo problema, è possibile assegnare la priorità desiderata per ogni route ogni volta che viene avviata la macchina virtuale EFLOW. È possibile creare un servizio che viene eseguito a ogni avvio della macchina virtuale e usa il comando route per impostare le priorità di route desiderate.

Creare prima di tutto uno script Bash che esegue i comandi necessari per impostare le route. Ad esempio, con riferimento allo scenario di rete indicato in precedenza, la macchina virtuale EFLOW ha due schede di interfaccia di rete (reti offline e online). La scheda di interfaccia di rete eth0 è connessa tramite l'IP del gateway xxx.xxx.xxx.xxx. La scheda di interfaccia di rete eth1 è connessa tramite l'IP del gateway yyy.yyy.yyy.yyy.

Lo script seguente reimposta le route predefinite per eth0 e *eth1, quindi aggiunge le route con la metrica <numero> desiderata. Ricordarsi che un valore della metrica inferiore ha una priorità più alta.

#!/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>

È possibile usare lo script precedente per creare uno script personalizzato specifico per lo scenario di rete. Dopo aver definito lo script, salvarlo e assegnare l'autorizzazione di esecuzione. Ad esempio, se il nome dello script è route-setup.sh, è possibile assegnare l'autorizzazione di esecuzione usando il comando sudo chmod +x route-setup.sh. È possibile verificare se lo script funziona correttamente eseguendolo manualmente con il comando sudo sh ./route-setup.sh e quindi controllando la tabella di routing con il comando sudo route.

Il passaggio finale consiste nel creare un servizio Linux che viene eseguito all'avvio ed esegue lo script Bash per impostare le route. È necessario creare un file di unità systemd per caricare il servizio. Di seguito è riportato un esempio di tale file.

[Unit]
after=network

[Service]
Type=simple
ExecStart=/bin/bash /home/iotedge-user/route-setup.sh

[Install]
WantedBy=default.target

Per controllare il funzionamento del servizio, riavviare la macchina virtuale EFLOW (Stop-EflowVm e Start-EflowVm) e quindi eseguire Connect-EflowVm per connettersi alla macchina virtuale. Elencare le route usando sudo route e verificare che siano corrette. Dovrebbero essere visibili le nuove regole predefinite con la metrica assegnata.

Passaggi successivi

Seguire la procedura descritta in Come configurare la rete per Azure IoT Edge per Linux in Windows per verificare che le configurazioni di rete siano state applicate correttamente.