Como configurar o Azure IoT Edge para Linux no Windows em uma DMZ
Aplica-se a: IoT Edge 1.5 IoT Edge 1.4
Importante
O IoT Edge 1.5 LTS e o IoT Edge 1.4 LTS são versões com suporte. O IoT Edge 1.4 LTS chegará ao fim da vida útil em 12 de novembro de 2024. Se você estiver em uma versão anterior, confira Atualizar o IoT Edge.
Este artigo descreve como configurar a máquina virtual (VM) do Azure IoT Edge para Linux (EFLOW) para dar suporte a várias NICs (placas de interface de rede) e conectar-se a várias redes. Ao habilitar o suporte a várias NICs, os aplicativos em execução na VM do EFLOW podem se comunicar com dispositivos conectados à rede offline ao mesmo tempo em que usam o IoT Edge para enviar dados para a nuvem.
Pré-requisitos
- Um dispositivo Windows com EFLOW já configurado. Para obter mais informações sobre a instalação e configuração do EFLOW, consulte Criar e provisionar um IoT Edge para Linux no dispositivo Windows usando chaves simétricas.
- Um comutador virtual diferente do padrão usado durante a instalação do EFLOW. Para obter mais informações sobre a criação de um comutador virtual, consulte Criar um comutador virtual para o Azure IoT Edge para Linux no Windows.
Cenário industrial
O IoT Industrial está superando a era de convergência da tecnologia da informação (TI) e da tecnologia operacional (OT). No entanto, tornar os ativos OT tradicionais mais inteligentes com tecnologias de TI também significa uma exposição maior a ataques cibernéticos. Esse cenário é uma das principais razões pelas quais vários ambientes são projetados usando zonas desmilitarizadas, também conhecidas como DMZs.
Imagine um cenário de fluxo de trabalho em que você tem uma configuração de rede dividida em duas redes ou zonas diferentes. Na primeira zona, você pode ter uma rede segura definida como a rede offline. A rede offline não tem conectividade com a Internet e está limitada ao acesso interno. Na segunda zona, você pode ter uma zona desmilitarizada (DMZ), na qual é possível ter alguns dispositivos com conectividade limitada com a Internet. Ao mover o fluxo de trabalho a ser executado na VM EFLOW, você pode ter problemas para acessar as diferentes redes, já que a VM EFLOW, por padrão, tem apenas uma NIC anexada.
Neste cenário, você tem um ambiente com alguns dispositivos, como PLCs (controles lógicos programáveis) ou dispositivos compatíveis com OPC UA (Open Plataform Communications Unified Architecture) conectados à rede offline, e quer carregar todas as informações do dispositivo no Azure usando o módulo OPC Publisher em execução na VM EFLOW.
Como o dispositivo host EFLOW e os dispositivos do agente do usuário PLC ou OPC estão fisicamente conectados à rede offline, você pode usar as Várias configurações de NIC virtual do Azure IoT Edge para Linux no Windows para conectar a VM EFLOW à rede offline. Usando um comutador virtual externo, você pode conectar a VM EFLOW à rede offline e se comunicar diretamente com outros dispositivos offline.
Para a outra rede, o dispositivo host EFLOW está fisicamente conectado à DMZ (rede online) com conectividade com a Internet e o Azure. Usando um comutador interno ou externo, você pode conectar a VM EFLOW ao Hub IoT do Azure usando módulos do IoT Edge e carregar as informações enviadas pelos dispositivos offline por meio da NIC offline.
Resumo do cenário
Rede segura:
- Sem conectividade com a Internet – acesso restrito.
- Dispositivos compatíveis com PLCs ou UPC UA conectados.
- VM EFLOW conectada usando um comutador virtual externo.
DMZ:
- Conectividade com a Internet – Conexão do Azure permitida.
- VM EFLOW conectada ao Hub IoT do Azure, usando um comutador virtual interno/externo.
- OPC Publisher em execução como um módulo na VM EFLOW usada para publicar dados no Azure.
Configurar os comutadores virtuais de rede de VM
As etapas a seguir são específicas para a rede descrita no cenário de exemplo. As configurações e o comutador virtual sendo usados devem estar alinhados com seu ambiente de rede.
Observação
As etapas neste artigo pressupõem que a VM EFLOW foi implantada com um comutador virtual externo conectado à rede segura (offline). Você pode alterar as etapas a seguir para a configuração de rede específica que deseja atingir. Para obter mais informações sobre o suporte a várias NICs do EFLOW, consulte Várias configurações de NIC virtual do Azure IoT Edge para Linux no Windows.
Para concluir o provisionamento da VM EFLOW e se comunicar com o Azure, é necessário atribuir outra NIC conectada à rede DMZ (online).
Nesse cenário, você atribui um comutador virtual externo conectado à rede DMZ. Para obter mais informações, confira Criar um comutador virtual para máquinas virtuais do Hyper-V.
Para criar um comutador virtual externo, siga estas etapas:
- Abra o Gerenciador do Hyper-V.
- Em Ações, selecione Gerenciador de Comutador Virtual.
- Em Comutadores Virtuais, selecione Novo comutador de rede virtual.
- Escolha o tipo Externo e, em seguida, selecione Criar Comutador Virtual.
- Insira um nome que represente a rede segura. Por exemplo, OnlineOPCUA.
- Em Tipo de Conexão, selecione Rede Externa e escolha o adaptador de rede conectado à rede DMZ.
- Selecione Aplicar.
Depois que o comutador virtual externo for criado, você precisará anexá-lo à VM EFLOW usando as etapas a seguir. Se você precisar anexar várias NICs, consulte Várias NICs do EFLOW.
Para o comutador virtual externo personalizado que você criou, use os seguintes comandos do PowerShell para:
Anexar o comutador à VM do EFLOW.
Add-EflowNetwork -vswitchName "OnlineOPCUA" -vswitchType "External"
Definir um IP estático.
Add-EflowVmEndpoint -vswitchName "OnlineOPCUA" -vEndpointName "OnlineEndpoint" -ip4Address 192.168.0.103 -ip4PrefixLength 24 -ip4GatewayAddress 192.168.0.1
Depois de concluída, você terá o comutador OnlineOPCUA atribuído à VM do EFLOW. Para verificar a anexação de NIC múltiplo, use as seguintes etapas:
Abra uma sessão com privilégios elevados do PowerShell começando com Executar como Administrador.
Conecte-se à máquina virtual EFLOW.
Connect-EflowVm
Quando você estiver na VM, liste todas os adaptadores de rede atribuídos à máquina virtual do EFLOW.
ifconfig
Examine a configuração de IP e verifique se a interface eth0 (conectada à rede segura) e a interface eth1 (conectada à rede DMZ) são exibidas.
Definir roteamentos de rede de VMs
Ao usar o recurso de várias NICs do EFLOW, convém configurar as diferentes prioridades de rota. Por padrão, o EFLOW cria uma rota padrão por interface ehtX atribuída à VM. O EFLOW atribui à rota padrão uma prioridade aleatória. Se todas as interfaces estão conectadas à Internet, as prioridades aleatórias podem não representar um problema. Mas, se uma das NICs está conectada a uma rede offline, convém priorizar a NIC online em vez da NIC offline para conectar a VM EFLOW à Internet.
O EFLOW usa o serviço de rota para gerenciar as alternativas de roteamento de rede. Para verificar as rotas da VM EFLOW disponíveis, use as seguintes etapas:
Abra uma sessão com privilégios elevados do PowerShell começando com Executar como Administrador.
Conecte-se à máquina virtual EFLOW.
Connect-EflowVm
Quando você estiver na VM, liste todas as rotas de rede configuradas na máquina virtual do EFLOW.
sudo route
Dica
A imagem anterior mostra a saída do comando de rota com as duas NIC atribuídas (eth0 e eth1). A máquina virtual cria duas regras de destinos padrão diferentes com métricas diferentes. Um valor de métrica mais baixo tem prioridade mais alta. Essa tabela de roteamento variará dependendo do cenário de rede configurado nas etapas anteriores.
Configuração de rotas estáticas
Sempre que a VM EFLOW é iniciada, os serviços de rede recriam todas as rotas e qualquer prioridade atribuída anteriormente pode ser alterada. Para contornar esse problema, você pode atribuir a prioridade desejada para cada rota sempre que a VM EFLOW for iniciada. Você pode criar um serviço que é executado em cada inicialização de VM e usa o comando route
para definir as prioridades de rota desejadas.
Primeiro, crie um script bash que execute os comandos necessários para definir as rotas. Por exemplo, seguindo o cenário de rede mencionado anteriormente, a VM EFLOW tem duas NICs (redes offline e online). A NIC eth0 é conectada usando o IP do gateway xxx.xxx.xxx.xxx. A NIC eth1 é conectada usando o IP do gateway yy.yy.yyy.y.yy.
O script a seguir redefine as rotas padrão para eth0 e *eth1 e adiciona as rotas com a métrica de <número> desejada. Lembre-se de que um valor de métrica mais baixo tem prioridade mais 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>
Você pode usar o script anterior para criar o script personalizado específico para seu cenário de rede. Depois que o script for definido, salve-o e atribua a permissão de execução. Por exemplo, se o nome do script for route-setup.sh, você poderá atribuir a permissão de execução usando o comando sudo chmod +x route-setup.sh
. Você pode testar se o script funciona corretamente executando-o manualmente com o comando sudo sh ./route-setup.sh
e verificando a tabela de roteamento usando o comando sudo route
.
A etapa final é a criação de um serviço Linux executado na inicialização e execução do script bash para definir as rotas. Você precisa criar um arquivo de unidade systemd para carregar o serviço. Veja um exemplo desse arquivo.
[Unit]
after=network
[Service]
Type=simple
ExecStart=/bin/bash /home/iotedge-user/route-setup.sh
[Install]
WantedBy=default.target
Para verificar se o serviço funciona, reinicialize a VM do EFLOW (Stop-EflowVm
e Start-EflowVm
) e, em seguida, Connect-EflowVm
para se conectar à VM. Liste as rotas usando sudo route
e verifique se elas estão corretas. Você deve poder ver as novas regras padrão com a métrica atribuída.
Próximas etapas
Siga as etapas em Como configurar a rede para o Azure IoT Edge para Linux no Windows para verificar se todas as configurações de rede foram aplicadas corretamente.