다음을 통해 공유


IoT Edge for Linux on Windows 네트워킹 문제 해결

적용 대상: IoT Edge 1.4 확인 표시 IoT Edge 1.4

Important

Azure IoT Edge 1.5 LTS 및 IoT Edge 1.4는 지원되는 릴리스입니다. IoT Edge 1.4 LTS는 2024년 11월 12일에 서비스가 종료됩니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

환경에서 Azure IoT EFLOW(Edge for Linux on Windows)용 Edge를 사용하여 네트워킹 문제가 발생하는 경우 이 문서를 문제 해결 및 진단 가이드로 사용합니다. 또한 자세한 EFLOW 가상 머신 문제 해결 도움말은 IoT Edge for Linux on Windows 디바이스 문제 해결을 확인합니다.

문제 분리

IoT Edge for Linux on Windows 네트워킹 문제를 해결할 때 발생하는 문제를 일으킬 수 있는 네 가지 네트워크 기능이 있습니다.

  • IP 주소 구성
  • DNS(도메인 이름 시스템) 구성
  • 방화벽 및 포트 구성
  • 기타 구성 요소

EFLOW 네트워킹 개념에 대한 자세한 내용은 IoT Edge for Linux on Windows 네트워킹을 참조하세요. 또한 EFLOW 네트워킹 구성에 대한 자세한 내용은 Azure IoT Edge for Linux on Windows의 네트워킹 구성을 참조하세요.

IP 주소 확인

IoT Edge for Linux on Windows 네트워킹 문제를 해결할 때 첫 번째 단계는 VM IP 주소 구성을 확인하는 것입니다. IP 통신이 잘못 구성된 경우 모든 인바운드 및 아웃바운드 연결이 실패합니다.

  1. 관리자 권한으로 실행을 사용하여 승격된 PowerShell 세션을 시작합니다.
  2. VM 수명 주기 에이전트에서 반환된 IP 주소를 확인합니다. IP 주소를 기록하고 이후 단계에서 VM 내부에서 얻은 주소와 비교합니다.
    Get-EflowVmAddr
    
  3. EFLOW 가상 머신에 연결합니다.
    Connect-EflowVm
    
  4. eth0 VM 네트워크 인터페이스 구성을 확인합니다.
     ifconfig eth0
    
    출력에 eth0 구성 정보가 표시되어야 합니다. inet 주소가 올바르게 설정되었는지 확인합니다.
    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
    

inet IP 주소가 비어 있거나 Get-EflowVmAddr cmdlet을 사용하여 제공된 주소와 다른 경우 EFLOW VM에 잘못된 IP 주소가 할당되었거나 IP 주소가 할당되지 않은 이유를 해결해야 합니다. 다음 표를 사용하여 문제를 해결합니다.

가상 스위치 IP 주소 할당 문제 해결
외부 고정 IP IP 구성이 올바르게 설정되었는지 확인합니다. 세 매개 변수 ip4Address, ip4GateWayAddressip4PrefixLength를 모두 사용해야 합니다. VM에 할당된 IP 주소는 유효해야 하며 외부 네트워크의 다른 디바이스에서 사용하고 있지 않아야 합니다. /etc/systemd/network/ 아래의 파일을 확인하여 EFLOW VM 인터페이스 구성을 확인할 수 있습니다.
외부 DHCP 외부 네트워크에 DHCP 서버가 있는지 확인합니다. 사용 가능한 DHCP 서버가 없으면 정적 IP 구성을 사용합니다. 또한 DHCP 서버에 MAC 주소에 대한 방화벽 정책이 없는지 확인합니다. 있는 경우 Get-EflowVmAddr cmdlet을 사용하여 EFLOW MAC 주소를 가져올 수 있습니다.
기본 스위치 DHCP 일반적으로 이 문제는 기본 스위치의 오작동과 관련이 있습니다. Windows 호스트 OS를 다시 부팅합니다. 문제가 지속되면 Hyper-V를 사용하지 않도록 설정했다가 사용하도록 설정해 보세요.
내부 고정 IP IP 구성이 올바르게 설정되었는지 확인합니다. 세 매개 변수 ip4Address, ip4GateWayAddressip4PrefixLength를 모두 사용해야 합니다. VM에 할당된 IP 주소는 유효해야 하며 내부 네트워크의 다른 디바이스에서 사용되고 있지 않아야 합니다. 또한 인터넷에 연결하려면 NAT 테이블을 설정해야 합니다. Azure IoT Edge for Linux on Windows 가상 스위치 만들기의 NAT 구성 단계를 따릅니다.
내부 DHCP 내부 네트워크에 DHCP 서버가 있는지 확인합니다. Windows Server에서 DHCP 서버 및 NAT 테이블을 설정하려면 Azure IoT Edge for Linux on Windows 가상 스위치 만들기의 단계를 따릅니다. 사용 가능한 DHCP 서버가 없으면 정적 IP 구성을 사용합니다.

Warning

경우에 따라 Windows Server 또는 클라이언트 VM에서 외부 가상 스위치를 사용하는 경우 몇 가지 추가 구성이 필요할 수 있습니다. 중첩된 가상화 구성에 대한 자세한 내용은 Azure IoT Edge for Linux on Windows의 중첩된 가상화를 참조하세요.

여전히 IP 주소 할당에 문제가 있는 경우 다른 Windows 또는 Linux 가상 머신을 설정하고 동일한 스위치 및 IP 구성을 할당해 보세요. 새 비 EFLOW VM에 동일한 문제가 있는 경우 문제는 가상 스위치 또는 IP 구성에 있을 가능성이 높으며 EFLOW에만 국한되지 않습니다.

DNS(도메인 이름 시스템) 구성 확인

IoT Edge for Linux on Windows 네트워킹 문제를 해결할 때 두 번째 단계는 EFLOW VM에 할당된 DNS 서버를 확인하는 것입니다. EFLOW VM DNS 구성을 확인하려면 Azure IoT Edge for Linux on Windows의 네트워킹 구성을 참조하세요. 주소 확인이 작동하는 경우 문제는 네트워크의 방화벽 또는 보안 구성과 관련이 있을 수 있습니다.

EFLOW VM은 systemd-resolved 서비스를 사용하여 DNS 확인을 관리합니다. 이 서비스에 대한 자세한 내용은 Systemd-resolved를 참조하세요. 특정 DNS 서버 주소를 설정하려면 Set-EflowVmDnsServers cmdlet을 사용할 수 있습니다. DNS 구성에 대한 추가 정보가 필요한 경우 sudo systemctl status systemd-resolved 명령을 사용하여 /etc/systemd/resolved.confsystem-resolved 서비스를 확인할 수 있습니다. 또한 모듈 구성의 일부로 특정 DNS 서버를 설정할 수 있습니다. 옵션 2: 모듈당 IoT Edge 배포에서 DNS 서버 설정을 참조하세요.

주소 확인은 여러 가지 이유로 실패할 수 있습니다. 첫째, DNS 서버를 올바르게 구성할 수 있지만 EFLOW VM에서 연결할 수 없습니다. DNS 서버가 ICMP ping 트래픽에 응답하는 경우 DNS 서버에 ping을 실행하여 네트워크 연결을 확인할 수 있습니다.

  1. 관리자 권한으로 실행을 사용하여 승격된 PowerShell 세션을 시작합니다.
  2. EFLOW 가상 머신에 연결합니다.
    Connect-EflowVm
    
  3. DNS 서버 주소를 ping하고 응답을 확인합니다.
    ping <DNS-Server-IP-Address>
    

    서버에 연결할 수 있으면 응답을 받아야 하며 다른 DNS 서버 구성과 관련된 문제일 수 있습니다. 응답이 없으면 서버에 연결 문제가 있을 수 있습니다.

둘째, 일부 네트워크 환경에서는 DNS 서버의 액세스를 특정 허용 목록 주소로 제한합니다. 그렇다면 먼저 Windows 호스트 OS에서 DNS 서버에 액세스할 수 있는지 확인한 다음 EFLOW IP 주소를 허용 목록에 추가해야 하는지 네트워킹 팀에 확인합니다.

마지막으로 일부 네트워크 환경은 Google DNS(8.8.8.8 및 8.8.4.4)와 같은 공용 DNS 서버를 차단합니다. 그렇다면 네트워크 환경 팀과 상의하여 유효한 DNS 서버를 정의한 다음 Set-EflowVmDnsServers cmdlet을 사용하여 설정합니다.

방화벽 및 포트 구성 규칙 확인

Azure IoT Edge for Linux on Windows는 지원되는 Azure IoT Hub 프로토콜을 사용하여 온-프레미스 서버에서 Azure 클라우드로의 통신을 허용합니다. IoT Hub 프로토콜에 대한 자세한 내용은 통신 프로토콜 선택을 참조하세요. IoT Hub 방화벽 및 포트 구성에 대한 자세한 내용은 IoT Edge 디바이스 문제 해결을 참조하세요.

IoT Edge for Linux on Windows는 여전히 기본 Windows 호스트 OS 및 네트워크 구성에 종속됩니다. 따라서 보안 에지-클라우드 통신을 위해 적절한 네트워크 및 방화벽 규칙을 설정해야 합니다. Azure IoT Edge for Linux on Windows 런타임이 호스트되는 기본 서버에 대한 방화벽 규칙을 구성할 때 다음 표를 지침으로 사용할 수 있습니다.

프로토콜 Port 수신 나가는 포트 지침
MQTT 8883 BLOCKED(기본값) BLOCKED(기본값) 통신 프로토콜로 MQTT를 사용하는 경우 발신(아웃바운드)Open이 되도록 구성합니다.

MQTT용 1883은 IoT Edge에서 지원되지 않습니다. - 수신(인바운드) 연결을 차단해야 합니다.
AMQP 5671 BLOCKED(기본값) OPEN(기본값) IoT Edge의 기본 통신 프로토콜입니다.

Azure IoT Edge는 지원되는 다른 프로토콜에 대해 구성되지 않았거나 AMQP가 원하는 통신 프로토콜인 경우 Open으로 구성해야 합니다.

AMQP용 5672는 IoT Edge에서 지원되지 않습니다.

Azure IoT Edge가 다른 IoT Hub 지원 프로토콜을 사용하는 경우 이 포트를 차단합니다.

수신(인바운드) 연결을 차단해야 합니다.
HTTPS 443 BLOCKED(기본값) OPEN(기본값) IoT Edge 프로비전을 위해 포트 443에서 발신(아웃바운드)열림으로 구성합니다. 수동 스크립트 또는 Azure IoT DPS(디바이스 프로비저닝 서비스)를 사용하는 경우 이 구성이 필요합니다.

수신(인바운드) 연결은 두 가지 특정 시나리오에서만 열림이어야 합니다.
1. 메서드 요청을 보낼 수 있는 다운스트림 디바이스에 대한 투명 게이트웨이가 있는 경우 이 경우 IoT Hub에 연결하거나 Azure IoT Edge를 통해 IoT Hub 서비스를 제공하기 위해 포트 443을 외부 네트워크로 열 필요가 없습니다. 따라서 수신 규칙은 내부 네트워크에서의 수신(인바운드)만 열도록 제한될 수 있습니다.
2. C2D(클라이언트-디바이스) 시나리오용.

HTTP용 80은 IoT Edge에서 지원되지 않습니다.

비 HTTP 프로토콜(예: AMQP 또는 MQTT)을 엔터프라이즈에서 구성할 수 없는 경우 WebSockets을 통해 메시지를 보낼 수 있습니다. 포트 443은 이 경우 WebSocket 통신에 사용됩니다.

참고 항목

외부 가상 스위치를 사용하는 경우 EFLOW 가상 머신 내부에서 사용 중인 모듈 포트 매핑에 대해 적절한 방화벽 규칙을 추가해야 합니다.

EFLOW VM 방화벽에 대한 자세한 내용은 IoT Edge for Linux on Windows 보안을 참조하세요. EFLOW 가상 머신 규칙을 확인하려면 다음 단계를 사용합니다.

  1. 관리자 권한으로 실행을 사용하여 승격된 PowerShell 세션을 시작합니다.
  2. EFLOW 가상 머신에 연결합니다.
    Connect-EflowVm
    
  3. iptables 방화벽 규칙을 나열합니다.
    sudo iptables -L
    

EFLOW VM에 방화벽 규칙을 추가하려면 EFLOW Util - Firewall Rules 샘플 PowerShell cmdlet을 사용할 수 있습니다. 또한 다음 단계에 따라 동일한 규칙을 만들 수 있습니다.

  1. 관리자 권한으로 실행을 사용하여 승격된 PowerShell 세션을 시작합니다.
  2. EFLOW 가상 머신에 연결
    Connect-EflowVm
    
  3. <프로토콜>(udp 또는 tcp) 트래픽의 <포트>로 들어오는 트래픽을 허용하도록 방화벽 규칙을 추가합니다.
    sudo iptables -A INPUT -p <protocol> --dport <port> -j ACCEPT
    
  4. 마지막으로 규칙을 유지하여 모든 VM 부팅 시 다시 만들어지도록 합니다.
    sudo iptables-save | sudo tee /etc/systemd/scripts/ip4save
    

다른 구성 확인

네트워크 통신이 실패할 수 있는 다른 여러 가지 이유가 있습니다. 다음 섹션에서는 과거에 사용자에게 발생했던 몇 가지 문제를 나열합니다.

  • EFLOW 가상 머신은 ping(ICMP 트래픽) 요청에 응답하지 않습니다.

    기본적으로 ICMP ping 트래픽 응답은 EFLOW VM 방화벽에서 사용하지 않도록 설정됩니다. ping 요청에 응답하려면 다음 PowerShell cmdlet을 사용하여 ICMP 트래픽을 허용합니다.

    Invoke-EflowVmCommand "sudo iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT"

  • 멀티캐스트 트래픽을 사용한 디바이스 검색에 실패했습니다.

    먼저 멀티캐스트를 통한 디바이스 검색을 허용하려면 외부 스위치를 사용하도록 Hyper-V VM을 구성해야 합니다. 둘째, 컨테이너 만들기 옵션을 통해 호스트 네트워크를 사용하도록 IoT Edge 사용자 지정 모듈을 구성해야 합니다.

    {
      "HostConfig": {
        "NetworkMode": "host"
      },
      "NetworkingConfig": {
        "EndpointsConfig": {
          "host": {}
        }
      }
    }
    
  • 방화벽 규칙이 추가되었지만 여전히 트래픽이 IoT Edge 모듈에 도달할 수 없습니다.

    적절한 방화벽 규칙을 추가한 후에도 여전히 통신이 작동하지 않으면 방화벽을 완전히 사용하지 않도록 설정하여 문제를 해결합니다.

    sudo iptables -F
    sudo iptables -X
    sudo iptables -P INPUT ACCEPT
    sudo iptables -P OUTPUT ACCEPT
    sudo iptables -P FORWARD ACCEPT
    

    완료되면 VM(Stop-EflowVmStart-EflowVm)을 다시 부팅하여 EFLOW VM 방화벽을 정상 상태로 되돌립니다.

  • 여러 NIC를 사용할 때 인터넷에 연결할 수 없습니다.

    일반적으로 이 문제는 라우팅 문제와 관련이 있습니다. 고정 경로를 설정하려면 Azure IoT Edge for Linux on Windows 산업용 IoT 및 DMZ를 구성하는 방법을 확인합니다.

다음 단계

IoT Edge 플랫폼에서 버그를 찾았나요? 지속적인 제품 개선을 위해 문제를 제출하세요.

추가 질문이 있으면 지원 요청을 만들어 도움을 받으세요.