Solucionar problemas do dispositivo IoT Edge para Linux na rede do Windows
Aplica-se a: IoT Edge 1.4
Importante
O IoT Edge 1.5 LTS e o IoT Edge 1.4 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.
Se você tiver problemas de rede usando o EFLOW (Azure IoT Edge para Linux no Windows) no seu ambiente, use este artigo como um guia para solucionar esses problemas. Além disso, confira Solução de problemas do seu IoT Edge para Linux no dispositivo Windows para obter mais ajuda para solução de problemas da máquina virtual EFLOW.
Isolar o problema
Ao solucionar problemas IoT Edge para Linux na rede do Windows, há quatro recursos de rede que podem estar causando problemas:
- Configuração de endereços IP
- Configuração DNS (Sistema de Nomes de Domínio)
- Configurações de firewall e porta
- Outros componentes
Para obter mais informações sobre conceitos de rede EFLOW, consulte IoT Edge para Linux em rede Windows. Além disso, para obter mais informações sobre as configurações de rede do EFLOW, confira Configuração de rede do Azure IoT Edge para Linux no Windows.
Confira os endereços IP
Sua primeira etapa ao solucionar problemas IoT Edge para Linux na rede do Windows deve ser verificar as configurações de endereço IP da VM. Se a comunicação IP estiver configurada incorretamente, todas as conexões de entrada e saída falharão.
- Inicie uma sessão com privilégios elevados do PowerShell usando Executar como Administrador.
- Verifique o endereço IP retornado pelo agente de ciclo de vida da VM. Anote o endereço IP e compare-o com o obtido de dentro da VM nas etapas posteriores.
Get-EflowVmAddr
- Conecte-se à máquina virtual EFLOW.
Connect-EflowVm
- Verifique a configuração da interface de rede da VM Eth0.
Na saída, você deve ver as informações de configuração da eth0. Verifique se o endereço de inet está definido corretamente.ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.31.100.171 netmask 255.255.240.0 broadcast 172.31.111.255 inet6 fe80::215:5dff:fe2a:2f62 prefixlen 64 scopeid 0x20<link> ether 00:15:5d:2a:2f:62 txqueuelen 1000 (Ethernet) RX packets 115746 bytes 11579209 (11.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 976 bytes 154184 (150.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Se o endereço IP de inet estiver em branco ou diferente do fornecido usando o cmdlet Get-EflowVmAddr
, você precisará solucionar por que a VM EFLOW tem um endereço IP inválido ou nenhum endereço IP atribuído. Use esta tabela para solucionar o problema:
Comutador Virtual | Atribuição de endereço IP | Solucionar problemas |
---|---|---|
Externo | IP Estático | Verifique se a configuração de IP está correta. Todos os três parâmetros ip4Address, ip4GateWayAddress e ip4PrefixLength devem ser usados. O endereço IP atribuído à VM deve ser válido e não ser usado por outro dispositivo na rede externa. Você pode verificar as configurações da interface da VM EFLOW verificando os arquivos em /etc/systemd/network/ . |
Externo | DHCP | Verifique se há um servidor DHCP na rede externa. Se nenhum servidor DHCP estiver disponível, use configurações de IP estáticas. Além disso, verifique se o servidor DHCP não tem nenhuma política de firewall em relação aos endereços MAC. Se tiver, você poderá obter o endereço MAC do EFLOW usando o cmdlet Get-EflowVmAddr . |
Comutador padrão | DHCP | Geralmente, o problema está relacionado a um mau funcionamento do comutador padrão. Tente reinicializar o sistema operacional host do Windows. Se o problema persistir, tente desabilitar e habilitar o Hyper-V |
Interna | IP Estático | Verifique se a configuração de IP está correta. Todos os três parâmetros ip4Address, ip4GateWayAddress e ip4PrefixLength devem ser usados. O endereço IP atribuído à VM deve ser válido e não ser usado por outro dispositivo na rede externa. Além disso, para se conectar à Internet, você precisará configurar uma tabela NAT. Siga as etapas de configuração da NAT na criação do comutador virtual do Azure IoT Edge para Linux no Windows. |
Interna | DHCP | Verifique se há um servidor DHCP na rede interna. Para configurar um servidor DHCP e uma tabela NAT no Windows Server, siga as etapas na criação do comutador virtual do Azure IoT Edge para Linux no Windows. Se nenhum servidor DHCP estiver disponível, use configurações de IP estáticas. |
Aviso
Em alguns casos, se você estiver usando o comutador virtual externo em uma VM do Windows Server ou cliente, talvez precise de algumas configurações extras. Para mais informações sobre configurções de virtualização aninhadas, confira Virtualização aninhada para Azure IoT Edge para Linux no Windows.
Se você ainda estiver tendo problemas com a atribuição de endereço IP, tente configurar outra máquina virtual do Windows ou Linux e atribua a mesma opção e configuração de IP. Se você tiver o mesmo problema com a nova VM não EFLOW, o problema provavelmente será com o comutador virtual ou configuração de IP e não é específico da EFLOW.
Configuração DNS (Sistema de Nomes de Domínio)
Sua segunda etapa ao solucionar problemas IoT Edge para Linux na rede do Windows deve ser verificar os servidores DNS atribuídos à VM EFLOW. Para verificar a configuração de DNS da VM EFLOW, consulte Configuração de rede do Azure IoT Edge para Linux no Windows. Se a resolução de endereços estiver funcionando, o problema provavelmente está relacionado a configurações de firewall ou segurança na rede.
A VM EFLOW usa o serviço systemd-resolved para gerenciar a resolução DNS. Para obter mais informações sobre esse serviço, consulte Systemd-resolved. Para configurar um endereço de servidor DNS específico, você pode usar o cmdlet Set-EflowVmDnsServers
. Se você precisar de mais informações sobre a configuração de DNS, poderá conferir o /etc/systemd/resolved.conf e o serviço resolvido pelo sistema usando o comando sudo systemctl status systemd-resolved
. Além disso, você pode definir um servidor DNS específico como parte da configuração do módulo, consulte a Opção 2: Definir o servidor DNS em implantação de IoT Edge por módulo.
A resolução de endereço pode falhar por vários motivos. Primeiro, os servidores DNS podem ser configurados corretamente, no entanto, eles não podem ser acessados da VM EFLOW. Se os servidores DNS responderem ao tráfego de ping do ICMP, você poderá tentar executar ping nos servidores DNS para verificar a conectividade de rede.
- Inicie uma sessão com privilégios elevados do PowerShell usando Executar como Administrador.
- Conecte-se à máquina virtual EFLOW.
Connect-EflowVm
- Faça ping no endereço do servidor DNS e verifique a resposta.
ping <DNS-Server-IP-Address>
Dica
Se o servidor for acessível, você deverá obter uma resposta e seu problema poderá estar relacionado a outras configurações de servidor DNS. Se não houver resposta, você provavelmente terá um problema de conexão com o servidor.
Em segundo lugar, alguns ambientes de rede limitarão o acesso dos servidores DNS a endereços de lista de permissões específicos. Nesse caso, primeiro verifique se você pode acessar o servidor DNS do sistema operacional host do Windows e verifique com sua equipe de rede se você precisa adicionar o endereço IP da EFLOW a uma lista de permissões.
Por fim, alguns ambientes de rede bloqueiam servidores DNS públicos, como o DNS do Google (8.8.8.8 e 8.8.4.4). Nesse caso, converse com sua equipe de ambiente de rede para definir um servidor DNS válido e configure-o usando o cmdlet Set-EflowVmDnsServers
.
Verifique as regras de configuração do firewall e da porta
O Azure IoT Edge para Linux no Windows permite a comunicação de um servidor local com a nuvem do Azure usando os protocolos do Hub IoT com suporte no Azure. Para obter mais informações sobre Hub IoT protocolos, consulte Escolhendo um protocolo de comunicação. Para obter mais informações sobre Hub IoT configurações de firewall e porta, consulte Solucionar problemas de seu dispositivo IoT Edge.
O IoT Edge para Linux no Windows ainda depende do sistema operacional host do Windows subjacente e da configuração de rede. Portanto, é fundamental garantir que regras de firewall e de rede apropriadas sejam definidas para obter uma comunicação segura da borda para a nuvem. Os seguinte pode ser usado como uma diretriz para configurar regras de firewall para os servidores subjacentes em que o runtime do Azure IoT Edge para Linux no Windows está hospedado:
Protocolo | Porta | Entrada | Saída | Diretrizes |
---|---|---|---|---|
MQTT | 8883 | BLOQUEADO (padrão) | BLOQUEADO (padrão) | Configure a Saída como Aberta ao usar o MQTT como o protocolo de comunicação. Não há suporte para o 1883 para MQTT no IoT Edge. - As conexões de Entrada devem ser bloqueadas. |
AMQP | 5671 | BLOQUEADO (padrão) | ABERTO (padrão) | Protocolo de comunicação padrão do IoT Edge. Precisa ser configurado como Aberto, quando o Azure IoT Edge não está configurado para outros protocolos com suporte ou quando o AMQP é o protocolo de comunicação desejado. Não há suporte para o 5672 para AMQP no IoT Edge. Bloqueie essa porta quando o Azure IoT Edge usar outro protocolo do Hub IoT com suporte. As conexões de Entrada devem ser bloqueadas. |
HTTPS | 443 | BLOQUEADO (padrão) | ABERTO (padrão) | Configure a Saída para ficar Aberta na porta 443 para provisionamento do IoT Edge. Essa configuração é necessária ao usar scripts manuais ou o DPS (serviço de provisionamento de dispositivos) do Azure IoT. A conexão de Entrada deve ser Aberta apenas em dois cenários específicos: 1. Se você tiver um gateway transparente com dispositivos de downstream que podem enviar solicitações de método. Nesse caso, a porta 443 não precisa estar aberta para redes externas para conectar-se ao Hub IoT ou fornecer serviços do Hub IoT por meio do Azure IoT Edge. Assim, a regra de entrada pode ser restrita para abrir somente a Entrada da rede interna. 2. Para cenários de cliente para dispositivo (C2D). Não há suporte ao 80 para HTTP no IoT Edge. Se os protocolos que não são HTTP (por exemplo, AMQP ou MQTT) não puderem ser configurados na empresa, as mensagens poderão ser enviadas por meio de WebSockets. A porta 443 é usada para comunicação WebSocket nesse caso. |
Observação
Se você estiver usando um comutador virtual externo, adicione as regras de firewall apropriadas para os mapeamentos de porta do módulo que você está usando dentro da máquina virtual EFLOW.
Para obter mais informações sobre o firewall EFLOW VM, consulte Segurança do IoT Edge para Linux no Windows. Para verificar as regras da máquina virtual EFLOW, use as seguintes etapas:
- Inicie uma sessão com privilégios elevados do PowerShell usando Executar como Administrador.
- Conecte-se à máquina virtual EFLOW.
Connect-EflowVm
- Liste as regras de firewall iptables.
sudo iptables -L
Para adicionar uma regra de firewall à VM EFLOW, você pode usar os cmdlets do PowerShell de exemplo EFLOW Util – Regras de Firewall. Além disso, você pode alcançar a mesma criação de regras seguindo estas etapas:
- Inicie uma sessão com privilégios elevados do PowerShell usando Executar como Administrador.
- Conecte-se à máquina virtual EFLOW
Connect-EflowVm
- Adicione uma regra de firewall para aceitar o tráfego de entrada na <porta> do <protocolo> ( udp ou tcp).
sudo iptables -A INPUT -p <protocol> --dport <port> -j ACCEPT
- Por fim, persista as regras para que elas sejam recriadas em cada inicialização de VM
sudo iptables-save | sudo tee /etc/systemd/scripts/ip4save
Verificar outras configurações
Há várias outras razões pelas quais a comunicação de rede pode falhar. A seção a seguir listará apenas alguns problemas que os usuários encontraram no passado.
A máquina virtual EFLOW não responderá às solicitações de ping (tráfego ICMP).
Por padrão, a resposta de tráfego de ping ICMP está desabilitada no firewall da VM EFLOW. Para responder às solicitações de ping, permita o tráfego ICMP usando o seguinte cmdlet do PowerShell:
Invoke-EflowVmCommand "sudo iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT"
Falha na descoberta do dispositivo usando o tráfego multicast.
Primeiro, para permitir a descoberta de dispositivos por meio de multicast, a VM do Hyper-V deve ser configurada para usar um comutador externo. Em segundo lugar, o módulo personalizado IoT Edge deve ser configurado para usar a rede de host por meio das opções de criação de contêiner:
{ "HostConfig": { "NetworkMode": "host" }, "NetworkingConfig": { "EndpointsConfig": { "host": {} } } }
Regras de firewall adicionadas, mas o tráfego ainda não consegue acessar o módulo IoT Edge.
Se a comunicação ainda não estiver funcionando depois de adicionar as regras de firewall apropriadas, tente desabilitar completamente o firewall para solucionar problemas.
sudo iptables -F sudo iptables -X sudo iptables -P INPUT ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -P FORWARD ACCEPT
Depois de concluído, reinicialize a VM (
Stop-EflowVm
eStart-EflowVm
) para obter o firewall da VM EFLOW de volta ao estado normal.Não é possível se conectar à Internet ao usar várias NICs.
Geralmente, esse problema está relacionado a ao roteamento. Verifique Como configurar o Azure IoT Edge para Linux no Windows para IoT Industrial e configuração de DMZ para configurar uma rota estática.
Próximas etapas
Você acha que encontrou um bug na plataforma IoT Edge? Envie um problema para que possamos continuar melhorando.
Se você tiver mais dúvidas, crie uma Solicitação de suporte para obter ajuda.