このトピックでは、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
    

    コマンドの出力には、実行中の vsfwd プロセスが 12 個以上あるはずです。実行中のプロセス数がこれより少ない場合(たとえば 2 個のみ)、vsfwd は正常に実行されていません。

  4. ファイアウォールの設定でポート 5671 が通信用に開いていることを確認します。
    このコマンドは、RabbitMQ ブローカへの VSFWD の接続を示しています。このコマンドを ESXi ホストで実行して、ESXi ホストの VSFWD プロセスから NSX Manager への接続リストを表示します。環境におけるいずれかの外部ファイアウォールでポート 5671 が通信用に開いていることを確認します。また、ポート 5671 で少なくとも 2 つの接続が存在している必要があります。ESXi ホストにデプロイされる NSX Edge 仮想マシンも RMQ ブローカへの接続を確立するため、ポート 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 ホストに host-profile を使用している場合、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 Administrator@192.168.110.10
    Generating logs for Host: host-28...
    
  10. show dfw host host-id summarize-dvfilter コマンドを使用して、ホストにファイアウォールのルールがデプロイされており、仮想マシンに適用されていることを確認します。
    出力の module: vsip は、分散ファイアウォール モジュールがロードされ実行されていることを示してします。 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 ユーザー インターフェイスまたは次の 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 アドレスを検出するためのオプションが追加されました。これらの新しい検出メカニズムにより、VMware Tools がインストールされていない仮想マシンでも、IP アドレスベースのセキュリティ ルールを適用できるようになりました。詳細は、NSX 6.2.0 リリース ノートを参照してください。

    分散ファイアウォールは、ホスト準備が完了するとすぐに有効になります。仮想マシンで分散ファイアウォール サービスがまったく不要な場合、除外リスト機能に追加できます(デフォルトでは、NSX Manager、NSX Controller、および Edge Services Gateway は、分散ファイアウォール機能から自動的に除外されます)。分散ファイアウォールですべて拒否ルールを作成した後、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を参照してください。