本主题提供了有助于您了解 VMware NSX 6.x 分布式防火墙 (DFW) 和进行故障排除的信息。

问题

  • 发布分布式防火墙规则失败。
  • 更新分布式防火墙规则失败。

原因

验证下面的每个故障排除步骤是否适用于您的环境。每个步骤提供了相应说明或指向文档的链接,以消除可能的根源并在必要时采取纠正措施。这些步骤按最适当的顺序进行排列,以查找问题并确定相应的解决方案。在执行每个步骤后,再次尝试更新/发布分布式防火墙规则。

解决方案

  1. 验证是否在群集中的每个 ESXi 主机上成功安装了 NSX VIB。为此,在群集中的每个 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 上应具有至少两个连接。可能在端口 5671 上具有更多连接,因为在 ESXi 主机上部署的 NSX Edge 虚拟机也会建立到 RMQ 代理的连接。
    例如:
    # 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 替换为可疑主机的 mo-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 上运行的防火墙。

    您可以运行 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 服务,可以将其添加到排除列表功能中(默认情况下,自动从 DFW 功能中排除 NSX Manager、NSX Controller 和 Edge 服务网关)。在 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