이 항목에서는 VMware NSX 6.x DFW(분산 방화벽)를 이해하고 관련 문제를 해결하기 위한 정보를 제공합니다.

문제

  • 분산 방화벽 규칙 게시가 실패합니다.
  • 분산 방화벽 규칙 업데이트가 실패합니다.

원인

아래의 각 문제 해결 단계가 작업 환경에 맞는지 확인하십시오. 각 단계에서는 가능한 원인을 해결하고 필요한 경우 수정 조치를 취하기 위한 지침 또는 문서에 대한 링크를 제공합니다. 이러한 단계는 문제를 분리하고 적절한 해결책을 찾아내는 데 가장 적합한 순서대로 진행됩니다. 각 단계를 수행한 후에 분산 방화벽 규칙 업데이트/게시를 다시 시도하십시오.

해결책

  1. NSX VIB가 클러스터의 각 ESXi 호스트에 성공적으로 설치되었는지 확인합니다. 이렇게 하려면 클러스터의 각 ESXi 호스트에 대해 다음 명령을 실행합니다.
    # esxcli software vib list | grep vsip
    esx-vsip                       6.0.0-0.0.4744062  VMware  VMwareCertified   2017-01-04 
    
    # esxcli software vib list | grep vxlan
    esx-vxlan                      6.0.0-0.0.4744062  VMware  VMwareCertified   2017-01-04
    
    ESXi 6.0 이상이 있는 NSX 6.3.3부터 esx-vxlan 및 esx-vsip VIB가 esx-nsxv로 대체됩니다.
    # esxcli software vib list | grep nsxv
    esx-nsxv                       6.0.0-0.0.6216823  VMware  VMwareCertified   2017-08-10
  2. ESXi 호스트에서 vShield-Stateful-Firewall 서비스가 실행 상태인지 확인합니다.
    예:
    # /etc/init.d/vShield-Stateful-Firewall status
    
    vShield-Stateful-Firewall is running
  3. 메시지 버스가 NSX Manager와 제대로 통신하고 있는지 확인합니다.
    이 프로세스는 감시 스크립트에 의해 자동으로 시작되며, 알 수 없는 이유로 프로세스가 종료되는 경우 프로세스가 다시 시작됩니다. 클러스터의 각 ESXi 호스트에 대해 다음 명령을 실행합니다.
    예:
    # ps | grep vsfwd
    
    107557 107557 vsfwd /usr/lib/vmware/vsfw/vsfwd
    

    명령 출력에서 12개 이상의 vsfwd 프로세스가 실행되고 있어야 합니다. 더 적은(주로 2개만) 프로세스가 실행 중인 경우 vsfwd가 제대로 실행되지 않는 것입니다.

  4. 방화벽 구성에서 통신을 위해 포트 5671이 열려 있는지 확인합니다.
    이 명령은 RabbitMQ 브로커와의 VSFWD 연결을 보여줍니다. ESXi 호스트에 대해 다음 명령을 실행하여 ESXi 호스트의 vsfwd 프로세스에서 NSX Manager로의 연결 목록을 확인합니다. 통신이 가능하도록 환경의 외부 방화벽에서 포트 5671이 열려 있는지 확인합니다. 또한 포트 5671에 둘 이상의 연결이 있어야 합니다. ESXi 호스트에는 RMQ 브로커와도 연결되는 NSX Edge 가상 시스템이 배포되어 있으므로 포트 5671에 더 많은 연결이 있을 수 있습니다.
    예:
    # esxcli network ip connection list |grep 5671
    
    tcp         0       0  192.168.110.51:30133            192.168.110.15:5671   ESTABLISHED  10949155  newreno  vsfwd
    tcp         0       0  192.168.110.51:39156            192.168.110.15:5671   ESTABLISHED  10949155  newreno  vsfwd
    
  5. VSFWD가 구성되어 있는지 확인합니다.

    다음 명령은 NSX Manager IP 주소를 표시합니다.

    # esxcfg-advcfg -g /UserVars/RmqIpAddress
  6. 이 ESXi 호스트에 대해 호스트 파일을 사용하는 경우 호스트 프로파일에 RabbitMQ 구성이 설정되지 않아야 합니다.
  7. ESXi 호스트의 RabbitMQ 자격 증명이 NSX Manager와 동기화되지 않았는지 확인합니다. NSX Manager 기술 지원 로그를 다운로드합니다. 모든 NSX Manager 기술 지원 로그를 수집한 후에 모든 로그에서 다음과 같은 항목을 검색합니다.
    host-420을 문제가 의심되는 호스트의 호스트 ID로 바꿉니다.
    PLAIN login refused: user 'uw-host-420' - invalid credentials.
  8. 이러한 항목을 의심되는 ESXi 호스트에 대한 로그에서 찾으면 메시지 버스를 다시 동기화하십시오.

    메시지 버스를 다시 동기화하려면 REST API를 사용하십시오. 문제를 보다 잘 이해하려면 메시지 버스가 다시 동기화된 직후에 로그를 수집하십시오.

    HTTP Method : POST 
    Headers , 
    Authorization : base64encoded value of username password
    Accept : application/xml
    Content-Type : application/xml
    Request:
    
    POST https://NSX_Manager_IP/api/2.0/nwfabric/configure?action=synchronize
    
    Request Body:
    
    <nwFabricFeatureConfig>
    <featureId>com.vmware.vshield.vsm.messagingInfra</featureId>
    <resourceConfig>
    <resourceId>{HOST/CLUSTER MOID}</resourceId>
    </resourceConfig>
    </nwFabricFeatureConfig>
  9. export host-tech-support <host-id> scp <uid@ip:/path> 명령을 사용하여 호스트별 방화벽 로그를 수집합니다.
    예:
    nsxmgr# export host-tech-support host-28 scp [email protected]
    Generating logs for Host: host-28...
    
  10. show dfw host host-id summarize-dvfilter 명령을 사용하여 방화벽 규칙이 호스트에 배포되었는지와 가상 시스템에 적용되었는지 확인합니다.
    출력에서 module: vsip는 DFW 모듈이 로드되어 실행 중임을 나타냅니다. name은 각 vNic에서 실행 중인 방화벽을 표시합니다.

    클러스터 도메인 ID를 가져오는 show dfw cluster all 명령을 실행한 다음 호스트 ID를 가져오는 show dfw cluster domain-id를 실행하여 호스트 ID를 가져올 수 있습니다.

    예:
    # show dfw host host-28 summarize-dvfilter
    
    Fastpaths:
    agent: dvfilter-faulter, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: dvfilter
    agent: ESXi-Firewall, refCount: 5, rev: 0x1010000, apiRev: 0x1010000, module: esxfw
    agent: dvfilter-generic-vmware, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: dvfilter-generic-fastpath
    agent: dvfilter-generic-vmware-swsec, refCount: 4, rev: 0x1010000, apiRev: 0x1010000, module: dvfilter-switch-security
    agent: bridgelearningfilter, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: vdrb
    agent: dvfg-igmp, refCount: 1, rev: 0x1010000, apiRev: 0x1010000, module: dvfg-igmp
    agent: vmware-sfw, refCount: 4, rev: 0x1010000, apiRev: 0x1010000, module: vsip
    
    Slowpaths:
    
    Filters:
    world 342296 vmm0:2-vm_RHEL63_srv_64-shared-846-3f435476-8f54-4e5a-8d01-59654a4e9979 vcUuid:'3f 43 54 76 8f 54 4e 5a-8d 01 59 65 4a 4e 99 79'
     port 50331660 2-vm_RHEL63_srv_64-shared-846-3f435476-8f54-4e5a-8d01-59654a4e9979.eth1
      vNic slot 2
       name: nic-342296-eth1-vmware-sfw.2
       agentName: vmware-sfw
       state: IOChain Attached
       vmState: Detached
       failurePolicy: failClosed
       slowPathID: none
       filter source: Dynamic Filter Creation
      vNic slot 1
       name: nic-342296-eth1-dvfilter-generic-vmware-swsec.1
       agentName: dvfilter-generic-vmware-swsec
       state: IOChain Attached
       vmState: Detached
       failurePolicy: failClosed
       slowPathID: none
       filter source: Alternate Opaque Channel
     port 50331661 (disconnected)
      vNic slot 2
       name: nic-342296-eth2-vmware-sfw.2 <======= DFW filter
       agentName: vmware-sfw       
       state: IOChain Detached
       vmState: Detached
       failurePolicy: failClosed
       slowPathID: none
       filter source: Dynamic Filter Creation
     port 33554441 2-vm_RHEL63_srv_64-shared-846-3f435476-8f54-4e5a-8d01-59654a4e9979
      vNic slot 2
       name: nic-342296-eth0-vmware-sfw.2<========= DFW filter
       agentName: vmware-sfw    
       state: IOChain Attached
       vmState: Detached
       failurePolicy: failClosed
       slowPathID: none
       filter source: Dynamic Filter Creation
    
  11. show dfw host hostID filter filterID rules 명령을 실행합니다.
    예:
    # show dfw host host-28 filter nic-79396-eth0-vmware-sfw.2 rules
     
    ruleset domain-c33 {
      # Filter rules
      rule 1012 at 1 inout protocol any from addrset ip-securitygroup-10 to addrset ip-securitygroup-10 drop with log;
      rule 1013 at 2 inout protocol any from addrset src1013 to addrset src1013 drop;
      rule 1011 at 3 inout protocol tcp from any to addrset dst1011 port 443 accept;
      rule 1011 at 4 inout protocol icmp icmptype 8 from any to addrset dst1011 accept;
      rule 1010 at 5 inout protocol tcp from addrset ip-securitygroup-10 to addrset ip-securitygroup-11 port 8443 accept;
      rule 1010 at 6 inout protocol icmp icmptype 8 from addrset ip-securitygroup-10 to addrset ip-securitygroup-11 accept;
      rule 1009 at 7 inout protocol tcp from addrset ip-securitygroup-11 to addrset ip-securitygroup-12 port 3306 accept;
      rule 1009 at 8 inout protocol icmp icmptype 8 from addrset ip-securitygroup-11 to addrset ip-securitygroup-12 accept;
      rule 1003 at 9 inout protocol ipv6-icmp icmptype 136 from any to any accept;
      rule 1003 at 10 inout protocol ipv6-icmp icmptype 135 from any to any accept;
      rule 1002 at 11 inout protocol udp from any to any port 67 accept;
      rule 1002 at 12 inout protocol udp from any to any port 68 accept;
      rule 1001 at 13 inout protocol any from any to any accept;
    }
    
    ruleset domain-c33_L2 {
      # Filter rules
      rule 1004 at 1 inout ethertype any from any to any accept;
    
  12. show dfw host hostID filter filterID addrsets 명령을 실행합니다.
    예:
    # show dfw host host-28 filter nic-342296-eth2-vmware-sfw.2 addrsets 
    
    addrset dst1011 {
    ip 172.16.10.10,
    ip 172.16.10.11,
    ip 172.16.10.12,
    ip fe80::250:56ff:feae:3e3d,
    ip fe80::250:56ff:feae:f86b,
    }
    addrset ip-securitygroup-10 {
    ip 172.16.10.11,
    ip 172.16.10.12,
    ip fe80::250:56ff:feae:3e3d,
    ip fe80::250:56ff:feae:f86b,
    }
    addrset ip-securitygroup-11 {
    ip 172.16.20.11,
    ip fe80::250:56ff:feae:23b9,
    }
    addrset ip-securitygroup-12 {
    ip 172.16.30.11,
    ip fe80::250:56ff:feae:d42b,
    }
    addrset src1013 {
    ip 172.16.10.12,
    ip 172.17.10.11,
    ip fe80::250:56ff:feae:cf88,
    ip fe80::250:56ff:feae:f86b,
    }
    
  13. 위의 각 문제 해결 단계가 유효한지 확인했으나 호스트 가상 시스템에 방화벽 규칙을 게시할 수 없는 경우 NSX Manager UI 또는 다음 REST API 호출을 통해 호스트 수준 강제 동기화를 실행하십시오.
    URL : [https:]https://<nsx-mgr-ip>/api/4.0/firewall/forceSync/<host-id>
    HTTP Method : POST 
    Headers , 
    Authorization : base64encoded value of username password
    Accept : application/xml
    Content-Type : application/xml
    

해결책

참고:
  • 방화벽 규칙이 IP 주소를 사용하지 않는 경우 가상 시스템에서 VMware Tools가 실행되고 있는지 확인하십시오. 자세한 내용은 https://kb.vmware.com/kb/2084048 항목을 참조하십시오.

    VMware NSX 6.2.0에는 DHCP 스누핑 또는 ARP 스누핑을 사용하여 가상 시스템의 IP 주소를 검색하는 옵션이 추가되었습니다. NSX는 이 새로운 검색 메커니즘을 통해 VMware Tools가 설치되지 않은 가상 시스템에서 IP 주소 기반 보안 규칙을 적용할 수 있습니다. 자세한 내용은 NSX 6.2.0 릴리스 정보를 참조하십시오.

    DFW는 호스트 준비 프로세스가 완료되는 즉시 활성화됩니다. 가상 시스템에 DFW 서비스가 전혀 필요하지 않을 경우 제외 목록 기능에 추가될 수 있습니다(기본적으로 NSX Manager, NSX Controller 및 Edge Services Gateway는 DFW 기능에서 자동으로 제외됨). DFW에서 [모두 거부] 규칙을 생성한 후에 vCenter Server 액세스가 차단될 수 있습니다. 자세한 내용은 https://kb.vmware.com/kb/2079620 항목을 참조하십시오.

  • VMware 기술 지원을 통해 VMware NSX 6.x DFW(분산 방화벽) 문제를 해결할 경우 다음이 필요합니다.
    • 클러스터의 각 ESXi 호스트에 대한 show dfw host hostID summarize-dvfilter 명령의 출력
    • 네트워킹 및 보안 > 방화벽 > 일반(Networking and Security > Firewall > General) 탭에서 분산 방화벽 구성을 누르고 구성 내보내기(Export Configuration)를 클릭합니다. 이렇게 하면 분산 방화벽 구성이 XML 형식으로 내보내집니다.
    • NSX Manager 로그 자세한 내용은 https://kb.vmware.com/kb/2074678 항목을 참조하십시오.
    • vCenter Server 로그 자세한 내용은 https://kb.vmware.com/kb/1011641 항목을 참조하십시오.