NSX-T L2オーバレイネットワーク経由の通信のトラブルシューティング

今回はNSX-TのL2オーバレイネットワーク経由の仮想マシン間の通信が失敗する際に、どこまでパケットが届いているかを調査する手順をまとめました。

 

検証結果

検証内容、構成

ESXi1とESXi2をTransport Zoneに参加させ、ESXi1とESXi2に跨るL2オーバレイネットワークを構築し、仮想マシンのR1とR2間で通信できるようにします。

アンダーレイの物理スイッチではGeneveの通信をVLAN 100に収容します。

R1からR2へICMP Echoパケットを転送している状況で、以下の①~⑥においてパケットキャプチャを実施します。

 

ネットワーク機器のCLIの設定


vlan 100
!
interface GigabitEthernet1/0/1
 switchport access vlan 100
 switchport mode access
!
interface GigabitEthernet1/0/2
 switchport access vlan 100
 switchport mode access
            


interface GigabitEthernet2
 ip address 10.1.1.1 255.255.255.0
            


interface GigabitEthernet2
 ip address 10.1.1.2 255.255.255.0
            

 

キャプチャポイント①

NSX-Tでは、vDSやN-VDSと仮想マシンのvNICの間に分散FWと呼ばれるインスタンスが存在します。(詳しくは別の記事で説明します)

まずは、R1が送信したトラフィックがR1のvNICとvDSの間に存在する分散FWに届いているか確認します。

 

最初にnsxdp-cli vswitch insntace listコマンドを使用して、R1のvNICの名前を取得します。

ESXi1

[root@esxi1:~] nsxdp-cli vswitch instance list
DvsPortset-0 (NSX-vDS1)          50 39 f6 94 fd 3c 10 e9-a4 8c d1 52 de bd b4 2e
Total Ports:8836 Available:8802
  Client                         PortID          DVPortID                             MAC                  Uplink
  Management                     100663401                                            00:00:00:00:00:00    n/a
  vmnic0                         2248147050      1                                    00:00:00:00:00:00
  Shadow of vmnic0               100663403                                            00:50:56:50:98:d7    n/a
  vmk10                          100663404       d452743c-7a3f-423e-b8ac-ebd4b019d6c4 00:50:56:6e:11:02    vmnic0
  vmk50                          100663405       8e7abf1f-f706-4c70-9311-db8a49eb0028 00:50:56:68:41:6d    void
  vdr-vdrPort                    100663406       vdrPort                              02:50:56:56:44:52    vmnic0
  R1.eth1                        100663444       942286b1-b2f0-4d5c-b3b9-181b20cb7e74 00:50:56:b9:98:2c    vmnic0
            

 

次に、summarize-dvfilterコマンドを使用して、R1のvNICとvDS間に存在する分散FWのインスタンス名を取得します。

ESXi1

[root@esxi1:~] summarize-dvfilter| grep -A 2 R1
world 2116638 vmm0:R1 vcUuid:'50 39 56 48 7d 8f 78 0b-e7 a0 09 89 e1 fc 1d 13'
 port 67108894 R1
  vNic slot 2
   name: nic-2116638-eth0-vmware-sfw.2
--
 port 100663444 R1.eth1
  vNic slot 2
   name: nic-2116638-eth1-vmware-sfw.2
--
 port 67108892 R1
  vNic slot 2
   name: nic-2116638-eth2-vmware-sfw.2
            

 

最後に、nsxcliコマンドを使用してNSX-T専用のCLIに移動します。その後、start capture dvfilter <分散FWのインスタンス名> stage preコマンドを使用して、分散FWに着信したパケットをキャプチャします。

ESXi1(NSX-T CLI)

esxi1.local.com> start capture dvfilter nic-2116638-eth1-vmware-sfw.2 stage pre expression ipproto 0x01

01:20:54.161291 00:50:56:b9:98:2c > 00:50:56:b9:b9:8a, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 10.1.1.2: ICMP echo request, id 105, seq 0, length 80
            

 

キャプチャポイント②

分散FWがvDSにパケットを転送しているか確認します。もしパケットが確認できない場合は、分散FWでパケットが破棄されていることになります。

 

分散FWで処理され、転送されたパケットはstart capture dvfilter <分散FWのインスタンス名> stage postコマンドでキャプチャ可能です。

ESXi1(NSX-T CLI)

esxi1.local.com> start capture dvfilter nic-2116638-eth1-vmware-sfw.2 stage post expression ipproto 0x01

01:21:31.787259 00:50:56:b9:98:2c > 00:50:56:b9:b9:8a, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 10.1.1.2: ICMP echo request, id 106, seq 0, length 80
            

 

キャプチャポイント③

ESXi1のvmnic0から物理ネットワーク側にパケットが転送されているか確認します。

 

vmnic上を流れるパケットはpktcap-uw --uplink <vmnicの名前>コマンドでキャプチャ可能です。--dir=1オプションがvmnicから物理ネットワーク側に転送されるパケットのみをキャプチャするオプションになります。

--dir=1オプションを使用している状況で、--stage=0オプションを指定した場合、Geneveによるカプセル化実施前の状態でパケットをキャプチャ可能です。

ESXi1

[root@esxi1:~] pktcap-uw --uplink vmnic0 --dir=1 --stage=0 -o - | tcpdump-uw -r - -nn
The name of the uplink is vmnic0.
The Stage is Pre.
pktcap: The output file is -.
pktcap: No server port specifed, select 57909 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 57909.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1081 cid 2.

06:22:10.760587 IP 10.1.1.1 > 10.1.1.2: ICMP echo request, id 145, seq 0, length 80
            

 

--dir=1オプションを使用している状況で、--stage=1オプションを指定した場合、Geneveによるカプセル化実施後の状態でパケットをキャプチャ可能です。

ESXi1

[root@esxi1:~] pktcap-uw --uplink vmnic0 --dir=1 --stage=1 -o - | tcpdump-uw -r - -nn
The name of the uplink is vmnic0.
The Stage is Post.
pktcap: The output file is -.
pktcap: No server port specifed, select 57957 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 57957.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1082 cid 2.

06:22:51.470767 IP 172.16.1.101.54957 > 172.16.1.102.6081: Geneve, Flags [C], vni 0x10000, options [8 bytes]: IP 10.1.1.1 > 10.1.1.2: ICMP echo request, id 146, seq 0, length 80
            

 

キャプチャポイント④

ESXi2が物理ネットワーク側からGeneveパケットを受信しているか確認します。

 

物理ネットワーク側からvmnicに着信したパケットのみをキャプチャするために--dir=0オプションを指定してpktcap-uw --uplink <vmnicの名前>コマンドを実行します。

--dir=0オプションを使用している状況で、--stage=0オプションを指定した場合、Geneveのカプセル化解除前の状態でパケットをキャプチャ可能です。

ESXi2

[root@esxi2:~] pktcap-uw --uplink vmnic0 --dir=0 --stage=0 -o - | tcpdump-uw -r - -nn
The name of the uplink is vmnic0.
The Stage is Pre.
pktcap: The output file is -.
pktcap: No server port specifed, select 25724 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 25724.
pktcap: Accept...
pktcap: Vsock connection from port 1059 cid 2.
reading from file -, link-type EN10MB (Ethernet)

14:26:51.367543 IP 172.16.1.101.54957 > 172.16.1.102.6081: Geneve, Flags [C], vni 0x10000, options [8 bytes]: IP 10.1.1.1 > 10.1.1.2: ICMP echo request, id 148, seq 0, length 80
            

 

--dir=0オプションを使用している状況で、--stage=1オプションを指定した場合、Geneveのカプセル化解除後の状態でパケットをキャプチャ可能です。

ESXi2

[root@esxi2:~] pktcap-uw --uplink vmnic0 --dir=0 --stage=1 -o - | tcpdump-uw -r - -nn
The name of the uplink is vmnic0.
The Stage is Post.
pktcap: The output file is -.
pktcap: No server port specifed, select 25831 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 25831.
pktcap: Accept...
pktcap: Vsock connection from port 1061 cid 2.
reading from file -, link-type EN10MB (Ethernet)

14:28:18.286676 IP 10.1.1.1 > 10.1.1.2: ICMP echo request, id 150, seq 0, length 80
            

 

キャプチャポイント⑤

ESXi2において、vDSからR2に転送されたパケットが分散FWに着信しているか確認します。

 

最初にnsxdp-cli vswitch insntace listコマンドを使用して、R2のvNICの名前を取得します。

ESXi2

[root@esxi2:~] nsxdp-cli vswitch instance list
DvsPortset-0 (NSX-vDS1)          50 39 f6 94 fd 3c 10 e9-a4 8c d1 52 de bd b4 2e
Total Ports:5376 Available:5356
  Client                         PortID          DVPortID                             MAC                  Uplink
  Management                     100663381                                            00:00:00:00:00:00    n/a
  vmnic0                         2248147030      0                                    00:00:00:00:00:00
  Shadow of vmnic0               100663383                                            00:50:56:58:c8:a2    n/a
  vmk10                          100663384       a36770bd-02ef-4be8-8679-5c0f253ad471 00:50:56:6c:8a:44    vmnic0
  vmk50                          100663385       29c1d51e-3283-4ce7-b46e-7012719c3121 00:50:56:62:66:56    void
  vdr-vdrPort                    100663386       vdrPort                              02:50:56:56:44:52    vmnic0
  R2.eth1                        100663403       aac550db-74e3-4214-ab11-09ddba707111 00:50:56:b9:b9:8a    vmnic0
            

 

次に、summarize-dvfilterコマンドを使用して、R2のvNICとvDS間に存在する分散FWのインスタンス名を取得します。

ESXi2

[root@esxi2:~] summarize-dvfilter | grep -A 2 R2
world 2105811 vmm0:R2 vcUuid:'50 39 77 51 9b 82 81 00-87 cb da 3a a9 f3 1a 18'
 port 67108878 R2
  vNic slot 2
   name: nic-2105811-eth0-vmware-sfw.2
--
 port 100663403 R2.eth1
  vNic slot 2
   name: nic-2105811-eth1-vmware-sfw.2
--
 port 67108876 R2
  vNic slot 2
   name: nic-2105811-eth2-vmware-sfw.2
            

 

最後に、start capture dvfilter <分散FWのインスタンス名> stage preコマンドを使用して、分散FWに着信したパケットをキャプチャします。

ESXi2(NSX-T CLI)

esxi2.local.com> start capture dvfilter nic-2105811-eth1-vmware-sfw.2 stage pre

10:03:08.004653 00:50:56:b9:98:2c > 00:50:56:b9:b9:8a, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 10.1.1.2: ICMP echo request, id 137, seq 0, length 80
            

 

キャプチャポイント⑥

分散FWがR2にパケットを転送しているか確認します。もしパケットが確認できない場合は、分散FWでパケットが破棄されていることになります。

 

start capture dvfilter <分散FWのインスタンス名> stage postコマンドで分散FWが転送したパケットをキャプチャします。

ESXi2(NSX-T CLI)

esxi2.local.com> start capture dvfilter nic-2105811-eth1-vmware-sfw.2 stage post

10:03:33.748373 00:50:56:b9:98:2c > 00:50:56:b9:b9:8a, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 10.1.1.2: ICMP echo request, id 138, seq 0, length 80
            

コメント

タイトルとURLをコピーしました