Compartir a través de


Configuración de Azure IoT Edge para Linux en Windows en una red perimetral

Se aplica a:marca de verificación de IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 son versiones compatibles. IoT Edge 1.4 LTS finaliza su ciclo de vida el 12 de noviembre de 2024. Si está usando una versión anterior, consulte Actualización de IoT Edge.

En este artículo se describe cómo configurar la máquina virtual (VM) de Azure IoT Edge para Linux (EFLOW) para admitir varias tarjetas de interfaz de red (NIC) y conectarse a varias redes. Al habilitar la compatibilidad con varias NIC, las aplicaciones que se ejecutan en la máquina virtual de EFLOW pueden comunicarse con dispositivos conectados a la red sin conexión y, al mismo tiempo, usar IoT Edge para enviar datos a la nube.

Requisitos previos

Escenario industrial

IoT industrial está superando la era de la convergencia de tecnología de la información (TI) y tecnología operativa (OT). Sin embargo, hacer que los recursos tradicionales de OT sean más inteligentes con las tecnologías de IT también significa una mayor exposición a los ciberataques. Este escenario es una de las razones principales por las que se diseñan varios entornos mediante redes perimetrales, también conocidas como DMZ.

Imagine un escenario de flujo de trabajo en el que tiene una configuración de red dividida en dos redes o zonas diferentes. En la primera zona, es posible que tenga una red segura definida como la red sin conexión. La red sin conexión no tiene conectividad a internet y está limitada al acceso interno. En la segunda zona, es posible que tenga una red perimetral (DMZ), en la que puede tener un par de dispositivos que tienen conectividad a internet limitada. Al mover el flujo de trabajo para que se ejecute en la máquina virtual de EFLOW, es posible que tenga problemas para acceder a las distintas redes, ya que la máquina virtual de EFLOW de forma predeterminada solo tiene una NIC conectada.

En este escenario, tiene un entorno con algunos dispositivos como controladores lógicos programables (PLC) o dispositivos compatibles con la arquitectura unificada de comunicaciones de plataforma abierta (OPC UA) conectados a la red sin conexión y desea cargar toda la información de los dispositivos en Azure mediante el módulo OPC Publisher que se ejecuta en la máquina virtual EFLOW.

Dado que el dispositivo host EFLOW y los dispositivos PLC o OPC UA están conectados físicamente a la red sin conexión, puede usar Azure IoT Edge para Linux en varias configuraciones de NIC virtuales Windows para conectar la máquina virtual de EFLOW a la red sin conexión. Mediante un conmutador virtual externo, puede conectar la máquina virtual de EFLOW a la red sin conexión y comunicarse directamente con otros dispositivos sin conexión.

Para la otra red, el dispositivo host EFLOW está conectado físicamente a la red perimetral (red en línea) con conectividad a internet y Azure. Con un conmutador interno o externo, puede conectar la máquina virtual de EFLOW a Azure IoT Hub mediante módulos IoT Edge y cargar la información enviada por los dispositivos sin conexión a través de la NIC sin conexión.

Captura de pantalla de un escenario de EFLOW Industrial IoT que muestra una máquina virtual EFLOW conectada a una red sin conexión y en línea.

Resumen del escenario

Red segura:

  • Sin conectividad a internet, acceso restringido.
  • Dispositivos compatibles con PLC o UPC UA conectados.
  • Máquina virtual de EFLOW conectada mediante un conmutador virtual externo.

DMZ:

  • Conectividad a internet: conexión de Azure permitida.
  • Máquina virtual de EFLOW conectada a Azure IoT Hub, mediante un conmutador virtual interno o externo.
  • OPC Publisher se ejecuta como un módulo dentro de la máquina virtual de EFLOW que se usa para publicar datos en Azure.

Configuración de conmutadores virtuales de red de máquina virtual

Los siguientes pasos son específicos para las redes descritas en el escenario de ejemplo. Asegúrese de que los conmutadores virtuales usados y las configuraciones usadas se alineen con el entorno de red.

Nota:

En los pasos de este artículo se supone que la máquina virtual de EFLOW se implementó con un conmutador virtual externo conectado a la red segura (sin conexión). Puede adaptar los siguientes pasos a la configuración de red específica que desea lograr. Para más información sobre la compatibilidad con varias NIC de EFLOW, consulte Configuraciones de varias NIC virtuales en Azure IoT Edge para Linux en Windows.

Para finalizar el aprovisionamiento de la máquina virtual de EFLOW y comunicarse con Azure, debe asignar otra NIC conectada a la red perimetral (en línea).

En este escenario, asignará un conmutador virtual externo conectado a la red perimetral. Para obtener más información sobre cómo crear un conmutador virtual, consulte Crear un conmutador virtual para las máquinas virtuales de Hyper-V.

Para crear un conmutador virtual externo, siga estos pasos:

  1. Abra el administrador de Hyper-V.
  2. En Acciones, seleccione Administrador de conmutadores virtuales.
  3. En Conmutadores virtuales, seleccione Nuevo conmutador de red virtual.
  4. Elija el tipo Externo y, después, seleccione Crear conmutador virtual.
  5. Escriba un nombre que represente la red segura. Por ejemplo, OnlineOPCUA.
  6. En Tipo de conexión, seleccione Red externa y, después, elija el adaptador de red conectado a la red perimetral.
  7. Seleccione Aplicar.

Una vez creado el conmutador virtual externo, debe asociarlo a la máquina virtual de EFLOW mediante los siguientes pasos. Si necesita adjuntar varias NIC, consulte Varias NIC de EFLOW.

Para el nuevo conmutador virtual externo personalizado que ha creado, use los siguientes comandos de PowerShell para:

  1. Conectar el modificador a la máquina virtual de EFLOW.

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

    Captura de pantalla de una creación correcta de la red externa denominada OnlineOPCUA.

  2. Establecer una dirección IP estática.

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

    Captura de pantalla de una configuración correcta del modificador OnlineOPCUA.

Una vez completado, tendrá asignado el conmutador OnlineOPCUA a la máquina virtual de EFLOW. Para comprobar los datos adjuntos de varias NIC, siga estos pasos:

  1. Abra una sesión de PowerShell con privilegios elevados empezando por Ejecutar como administrador.

  2. Conéctese a la máquina virtual EFLOW.

    Connect-EflowVm
    
  3. Una vez que esté en la máquina virtual, enumere todas las interfaces de red asignadas a la máquina virtual EFLOW.

    ifconfig
    
  4. Revise la configuración de IP y compruebe que ve la interfaz eth0 (conectada a la red segura) y la interfaz eth1 (conectada a la red perimetral).

    Captura de pantalla que muestra la configuración IP de varias NIC conectadas a dos redes diferentes.

Configuración del enrutamiento de red de máquina virtual

Al usar la característica de varias NIC de EFLOW, es posible que desee configurar las diferentes prioridades de rutas. De forma predeterminada, EFLOW creará una ruta predeterminada por ehtX interfaz asignada a la máquina virtual. EFLOW asigna a la ruta predeterminada una prioridad aleatoria. Si todas las interfaces están conectadas a Internet, es posible que las prioridades aleatorias no sean un problema. Sin embargo, si una de las NIC está conectada a una red sin conexión, es posible que quiera priorizar la NIC en línea antes que la NIC sin conexión para conectar la máquina virtual de EFLOW a internet.

EFLOW usa el servicio de ruta para administrar las alternativas de enrutamiento de red. Para comprobar las rutas de máquina virtual de EFLOW disponibles, siga estos pasos:

  1. Abra una sesión de PowerShell con privilegios elevados empezando por Ejecutar como administrador.

  2. Conéctese a la máquina virtual EFLOW.

    Connect-EflowVm
    
  3. Una vez que esté en la máquina virtual, enumere todas las rutas de red configuradas en la máquina virtual EFLOW.

    sudo route
    

    Captura de pantalla que muestra la tabla de enrutamiento de la máquina virtual EFLOW.

    Sugerencia

    En la imagen anterior se muestra la salida del comando de ruta con las dos NIC asignadas (eth0 y eth1). La máquina virtual crea dos reglas de destinos diferentes predeterminadas con métricas diferentes. Un valor de métrica inferior tiene una prioridad más alta. Esta tabla de enrutamiento variará en función del escenario de red configurado en los pasos anteriores.

Configuración de rutas estáticas

Cada vez que se inicia la máquina virtual de EFLOW, los servicios de red vuelven a crear todas las rutas y cualquier prioridad asignada previamente podría cambiar. Para solucionar este problema, puede asignar la prioridad deseada para cada ruta cada vez que se inicie la máquina virtual de EFLOW. Puede crear un servicio que se ejecute en cada arranque de máquina virtual y use el comando route para establecer las prioridades de ruta deseadas.

En primer lugar, cree un script de Bash que ejecute los comandos necesarios para establecer las rutas. Por ejemplo, siguiendo el escenario de red mencionado anteriormente, la máquina virtual de EFLOW tiene dos NIC (redes con y sin conexión). La NIC eth0 se conecta mediante la IP de puerta de enlace xxx.xxx.xxx.xxx. La NIC eth1 se conecta mediante la IP de puerta de enlace yyy.yyy.yyy.yyy.

El siguiente script restablece las rutas predeterminadas para eth0 y *eth1 y, a continuación, agrega las rutas con la métrica de <número> deseada. Recuerde que un valor de métrica inferior tiene mayor prioridad.

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

Puede usar el script anterior para crear su propio script personalizado específico para su escenario de red. Una vez definido el script, guárdelo y asigne el permiso de ejecución. Por ejemplo, si el nombre del script es route-setup.sh, puede asignar el permiso de ejecución mediante el comando sudo chmod +x route-setup.sh. Puede probar si el script funciona correctamente si lo ejecuta manualmente mediante el comando sudo sh ./route-setup.sh y, a continuación, comprueba la tabla de enrutamiento mediante el comando sudo route.

El último paso es crear un servicio de Linux que se ejecute en el inicio y ejecute el script de bash para establecer las rutas. Tendrá que crear un archivo de unidad systemd para cargar el servicio. A continuación, se muestra un ejemplo del archivo.

[Unit]
after=network

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

[Install]
WantedBy=default.target

Para comprobar que el servicio funciona, reinicie la máquina virtual de EFLOW (Stop-EflowVm y Start-EflowVm) y, a continuación, Connect-EflowVm para conectarse a la máquina virtual. Enumere las rutas con sudo route y compruebe que son correctas. Debería poder ver las nuevas reglas predeterminadas con la métrica asignada.

Pasos siguientes

Siga los pasos descritos en Configuración de red para Azure IoT Edge para Linux en Windows para comprobar que las configuraciones de red se aplicaron correctamente.