今回は物理ネットワークとNSX-Tの仮想ネットワーク間の通信が失敗する際に、どこまでパケットが届いているかを調査する手順をまとめました。
検証結果
検証内容、構成
ESXi1にNSX Edge1をデプロイします。
ESXi1にデプロイしたNSX Edge1にTier-0 GWのSRを配置し、NSX-Tの仮想ネットワークに存在するR1と物理ネットワークに存在するR2間で通信できるようにします。
アンダーレイの物理スイッチではGeneveの通信をVLAN 100、物理ネットワークとNSX-Tの仮想ネットワーク間の通信をVLAN 200に収容します。
R1からR2へICMP Echoパケットを転送している状況で、以下の①~⑬においてパケットキャプチャを実施します。
ネットワーク機器のCLIの設定
vlan 100,200
!
interface GigabitEthernet1/0/1
switchport access vlan 100
switchport mode access
!
interface GigabitEthernet1/0/11
switchport trunk allowed vlan 100,200
switchport mode trunk
!
interface GigabitEthernet1/0/12
switchport access vlan 200
switchport mode access
interface GigabitEthernet2
ip address 10.1.1.1 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.1.1.254
interface GigabitEthernet2
ip address 20.1.1.100 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 20.1.1.1
キャプチャポイント①
まずは、R1が送信したトラフィックがR1のvNICとvDSの間に存在する分散FWに届いているか確認します。
最初にnsxdp-cli vswitch insntace listコマンドを実行し、R1のvNICの名前を取得します。
[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:8806
Client PortID DVPortID MAC Uplink
Management 67108870 00:00:00:00:00:00 n/a
vmnic0 2214592523 1 00:00:00:00:00:00
Shadow of vmnic0 67108876 00:50:56:50:98:d7 n/a
vmk10 67108899 e45ea600-5728-46c8-b013-62ea0eb581ff 00:50:56:67:ad:47 vmnic0
vmk50 67108900 7fd33d7d-c25e-49dd-9f8c-16861d5f9197 00:50:56:6e:91:b5 void
vdr-vdrPort 67108901 vdrPort 02:50:56:56:44:52 vmnic0
R1.eth1 67108902 9e880e6a-9168-495e-9db9-bf352bbe0b07 00:50:56:b9:98:2c vmnic0
次に、summarize-dvfilterコマンドを実行し、R1のvNICとvDS間に存在する分散FWのインスタンス名を取得します。
[root@esxi1:~] summarize-dvfilter| grep -A 2 R1
world 2103565 vmm0:R1 vcUuid:'50 39 56 48 7d 8f 78 0b-e7 a0 09 89 e1 fc 1d 13'
port 134217758 R1
vNic slot 2
name: nic-2103565-eth0-vmware-sfw.2
--
port 67108902 R1.eth1
vNic slot 2
name: nic-2103565-eth1-vmware-sfw.2
--
port 134217756 R1
vNic slot 2
name: nic-2103565-eth2-vmware-sfw.2
最後に、nsxcliコマンドを使用してNSX-T専用のCLIに移動します。その後、start capture dvfilter <分散FWのインスタンス名> stage preコマンドを実行し、分散FWに着信したパケットをキャプチャします。
esxi1.local.com> start capture dvfilter nic-2103565-eth1-vmware-sfw.2 stage pre expression ipproto 0x01
01:05:38.924609 00:50:56:b9:98:2c > 02:50:56:56:44:52, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 20.1.1.100: ICMP echo request, id 21, seq 0, length 80
キャプチャポイント②
分散FWがvDSにパケットを転送しているか確認します。もしパケットが確認できない場合は、分散FWでパケットが破棄されていることになります。
分散FWで処理され、転送されたパケットはstart capture dvfilter <分散FWのインスタンス名> stage postコマンドでキャプチャ可能です。
esxi1.local.com> start capture dvfilter nic-2103565-eth1-vmware-sfw.2 stage post expression ipproto 0x01
01:05:59.497060 00:50:56:b9:98:2c > 02:50:56:56:44:52, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 20.1.1.100: ICMP echo request, id 22, seq 0, length 80
キャプチャポイント③
vDSからTier-1 GWのDRにパケットが転送されているか確認します。
最初に、ESXi1でget logical-switchesコマンドを実行し、R1のvNICが接続しているSegmentのVNIを確認します。
esxi1.local.com> get logical-switches
Logical Switches Summary
------------------------------------------------------------
Overlay Kernel Entry
============================================================
VNI DVS name VIF num
65536 NSX-vDS1 2
65538 NSX-vDS1 1
Overlay LCP Entry
============================================================
VNI Logical Switch UUID Name
65537 1548cf7e-c69a-4813-839a-2c5794c1b533 transit-rl-a25aa19c-faf7-4598-9ea4-4239599e3495
65538 221a7d12-c45b-4589-94c9-85401b1744ca transit-bp-031757a6-06d8-44bb-9e06-1ba1ac0e78c1
65536 aed9a131-8547-43a4-b747-72d21de2da77 Segment1
VLAN Backed Entry
============================================================
Logical Switch UUID VLAN ID
次にnsxdp-cli vswitch insntace listコマンドを実行し、VDRカーネルモジュールのポートIDを確認します。
[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:8806
Client PortID DVPortID MAC Uplink
Management 67108870 00:00:00:00:00:00 n/a
vmnic0 2214592523 1 00:00:00:00:00:00
Shadow of vmnic0 67108876 00:50:56:50:98:d7 n/a
vmk10 67108899 e45ea600-5728-46c8-b013-62ea0eb581ff 00:50:56:67:ad:47 vmnic0
vmk50 67108900 7fd33d7d-c25e-49dd-9f8c-16861d5f9197 00:50:56:6e:91:b5 void
vdr-vdrPort 67108901 vdrPort 02:50:56:56:44:52 vmnic0
R1.eth1 67108902 9e880e6a-9168-495e-9db9-bf352bbe0b07 00:50:56:b9:98:2c vmnic0
Segment 1(VNI 65536)において、vDSからVDRカーネルモジュールに転送されたパケットを確認するために、--vni=65536オプションと--dir=1オプションを指定し、pktcap-uw --switchport <VDRカーネルモジュールのポートID>コマンドを実行します。
[root@esxi1:~] pktcap-uw --switchport 67108901 --vni=65536 --dir=1 -o - | tcpdump-uw -r - -nn
The switch port id is 0x04000025.
The vni is 65536.
pktcap: The output file is -.
pktcap: No server port specifed, select 46389 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 46389.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1041 cid 2.
01:10:06.144160 IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 25, seq 0, length 80
キャプチャポイント④
Tier-1 GWのDRからvDSにパケットが転送されているか確認します。
Transit RL(VNI 65537)において、VDRカーネルモジュールからvDSに転送されたパケットを確認するために、--vni=65537オプションと--dir=0オプションを指定し、pktcap-uw --switchport <VDRカーネルモジュールのポートID>コマンドを実行します。
[root@esxi1:~] pktcap-uw --switchport 67108901 --vni=65537 --dir=0 -o - | tcpdump-uw -r - -nn
The switch port id is 0x04000025.
The vni is 65537.
pktcap: The output file is -.
pktcap: No server port specifed, select 46513 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 46513.
pktcap: Accept...
reading from file -, link-type EN10MB (Ethernet)
pktcap: Vsock connection from port 1042 cid 2.
01:10:56.778859 IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 26, seq 0, length 80
キャプチャポイント⑤
vDSからTier-0 GWのDRにパケットが転送されているか確認します。
Transit RL(VNI 65537)において、vDSからVDRカーネルモジュールに転送されたパケットを確認するために、--vni=65537オプションと--dir=1オプションを指定し、pktcap-uw --switchport <VDRカーネルモジュールのポートID>コマンドを実行します。
[root@esxi1:~] pktcap-uw --switchport 67108901 --vni=65537 --dir=1 -o - | tcpdump-uw -r - -nn
The switch port id is 0x04000025.
The vni is 65537.
pktcap: The output file is -.
pktcap: No server port specifed, select 46565 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 46565.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1043 cid 2.
01:11:29.920432 IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 27, seq 0, length 80
キャプチャポイント⑥
Tier-0 GWのDRからvDSにパケットが転送されているか確認します。
Transit BP(VNI 65538)において、VDRカーネルモジュールからvDSに転送されたパケットを確認するために、--vni=65538オプションと--dir=0オプションを指定し、pktcap-uw --switchport <VDRカーネルモジュールのポートID>コマンドを実行します。
[root@esxi1:~] pktcap-uw --switchport 67108901 --vni=65538 --dir=0 -o - | tcpdump-uw -r - -nn
The switch port id is 0x04000025.
The vni is 65538.
pktcap: The output file is -.
pktcap: No server port specifed, select 46621 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 46621.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1044 cid 2.
01:12:13.997556 IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 28, seq 0, length 80
キャプチャポイント⑦
ESXi1のvmnic0から物理ネットワーク側にパケットが転送されているか確認します。
vmnic0から物理ネットワーク側に転送されるパケットのカプセル化前の状態を確認するために、--dir=1オプションと--stage=0オプションを指定し、pktcap-uw --uplink <vmnicの名前>コマンドを実行します。
[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 46697 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 46697.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1045 cid 2.
01:13:03.817248 IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 29, seq 0, length 80
vmnic0から物理ネットワーク側に転送されるパケットのカプセル化後の状態を確認するために、--dir=1オプションと--stage=1オプションを指定し、pktcap-uw --uplink <vmnicの名前>コマンドを実行します。
[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 46735 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 46735.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1046 cid 2.
01:13:35.520540 IP 172.16.1.101.58594 > 172.16.1.121.6081: Geneve, Flags [C], vni 0x10002, options [8 bytes]: IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 30, seq 0, length 80
キャプチャポイント⑧
物理ネットワーク側からESXi1のvmnic1にGeneveパケットが着信しているか確認します。
物理ネットワーク側からvmnicに着信したパケットをキャプチャするために、--dir=0オプションを指定してpktcap-uw --uplink <vmnicの名前>コマンドを実行します。
[root@esxi1:~] pktcap-uw --uplink vmnic1 --dir=0 -o - | tcpdump-uw -r - -nn
The name of the uplink is vmnic1.
The Stage is Pre.
pktcap: The output file is -.
pktcap: No server port specifed, select 46773 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 46773.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1047 cid 2.
01:14:10.632920 IP 172.16.1.101.58594 > 172.16.1.121.6081: Geneve, Flags [C], vni 0x10002, options [8 bytes]: IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 31, seq 0, length 80
キャプチャポイント⑨
NSX Edge1のfp-eth0にGeneveパケットが着信しているか確認します。
NSX Edgeではstart capture interface <インタフェース名 or ID>コマンドを使用することで、各種ポイントでパケットキャプチャ可能です。今回はfp-eth0に着信したパケットをキャプチャするために、direction inputオプションを指定してstart capture interface <インタフェース名 or ID>コマンドを実行します。
edge1> start capture interface fp-eth0 direction input
01:17:40.500493 00:50:56:67:ad:47 > 00:50:56:b9:6a:a1, ethertype IPv4 (0x0800), length 172: 172.16.1.101.58594 > 172.16.1.121.6081: Geneve, Flags [C], vni 0x10002, proto TEB (0x6558), options [8 bytes]: 02:50:56:56:44:52 > 02:50:56:56:53:00, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 20.1.1.100: ICMP echo request, id 33, seq 0, length 80
<base64>AFBWuWqhAFBWZ61HCABFAACeAABAAEAR31CsEAFlrBABeeTiF8EAimX6AkBlWAEAAgABBIABAQAEAAJQVlZTAAJQVlZEUggARQAAZABRAAD9AZzhCgEBARQBAWQIAMkZACEAAAAAAAAOI6bsq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzQ==</base64>
キャプチャポイント⑩
N-VDSからTier-0 GWのSRにパケットが転送されているか確認します。
最初に、get logical-routersコマンドを実行し、Tier-0 GWのSRのUUIDを確認します。
edge1> get logical-routers
Logical Router
UUID VRF LR-ID Name Type Ports
736a80e3-23f6-5a2d-81d6-bbefb2786666 0 0 TUNNEL 3
e75612f1-c47a-497f-b747-692d2c1071c2 9 3076 SR-Tier-0_GW SERVICE_ROUTER_TIER0 5
a25aa19c-faf7-4598-9ea4-4239599e3495 11 3073 DR-Tier-1_GW DISTRIBUTED_ROUTER_TIER1 5
031757a6-06d8-44bb-9e06-1ba1ac0e78c1 12 3074 DR-Tier-0_GW DISTRIBUTED_ROUTER_TIER0 4
次に、get logical-router <UUID> interfacesコマンドを実行し、Transit BPと接続しているTier-0 GWのSRのインタフェースのUUIDを確認します。
edge1> get logical-router e75612f1-c47a-497f-b747-692d2c1071c2 interfaces
Logical Router
UUID VRF LR-ID Name Type
031757a6-06d8-44bb-9e06-1ba1ac0e78c1 12 3074 DR-Tier-0_GW DISTRIBUTED_ROUTER_TIER0
Interfaces (IPv6 DAD Status A-Assigned, D-Duplicate, T-Tentative)
Interface : 6cea79e6-2974-5b53-b968-02e3e866df71
.
<一部省略>
.
Logical Router
UUID VRF LR-ID Name Type
e75612f1-c47a-497f-b747-692d2c1071c2 9 3076 SR-Tier-0_GW SERVICE_ROUTER_TIER0
Interfaces (IPv6 DAD Status A-Assigned, D-Duplicate, T-Tentative)
Interface : d27fa42b-74da-5912-a5e1-be23dbddc665
.
<一部省略>
.
Interface : c677d6f1-9dc1-40c6-9c61-0cbf45ff1efa
Ifuid : 327
Name : bp-sr0-port
Fwd-mode : IPV4_ONLY
Internal name : downlink-327
Mode : lif
Port-type : backplane
IP/Mask : 169.254.0.2/24;fe80::50:56ff:fe56:5300/64(NA)
MAC : 02:50:56:56:53:00
VNI : 65538
Access-VLAN : None
LS port : bea48d48-20e0-47bf-a694-0b93f932a6b3
Urpf-mode : NONE
DAD-mode : LOOSE
RA-mode : RA_INVALID
Admin : up
Op_state : up
MTU : 1500
Transit BPにおいて、Tier-0 GWのSRに着信したパケットをキャプチャするために、direction inputオプションを指定してstart capture interface <インタフェース名 or ID>コマンドを実行します。
edge1> start capture interface c677d6f1-9dc1-40c6-9c61-0cbf45ff1efa direction input expression ipproto 0x01
01:22:31.454187 02:50:56:56:44:52 > 02:50:56:56:53:00, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 20.1.1.100: ICMP echo request, id 34, seq 0, length 80
<base64>AlBWVlMAAlBWVkRSCABFAABkAFIAAP0BnOAKAQEBFAEBZAgAWIsAIgAAAAAAAA4oF3WrzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavN</base64>
キャプチャポイント⑪
Tier-0 GWのSRからN-VDSにパケットが転送されているか確認します。
最初に、get logical-router <UUID> interfacesコマンドを実行し、Tier-0 GWのSRのUplink用のインタフェースのUUIDを確認します。
edge1> get logical-router e75612f1-c47a-497f-b747-692d2c1071c2 interfaces
Logical Router
UUID VRF LR-ID Name Type
031757a6-06d8-44bb-9e06-1ba1ac0e78c1 12 3074 DR-Tier-0_GW DISTRIBUTED_ROUTER_TIER0
Interfaces (IPv6 DAD Status A-Assigned, D-Duplicate, T-Tentative)
Interface : 6cea79e6-2974-5b53-b968-02e3e866df71
.
<一部省略>
.
Logical Router
UUID VRF LR-ID Name Type
e75612f1-c47a-497f-b747-692d2c1071c2 9 3076 SR-Tier-0_GW SERVICE_ROUTER_TIER0
Interfaces (IPv6 DAD Status A-Assigned, D-Duplicate, T-Tentative)
Interface : d27fa42b-74da-5912-a5e1-be23dbddc665
.
<一部両略>
.
Interface : 8d96d39b-ff32-48d8-9857-52d660fff25b
Ifuid : 325
Name : Ext_Uplink1
Fwd-mode : IPV4_ONLY
Internal name : uplink-325
Mode : lif
Port-type : uplink
IP/Mask : 20.1.1.1/24
MAC : 00:50:56:b9:a7:b2
VLAN : None
Access-VLAN : None
LS port : ed8c4670-1f7a-4039-ad9c-15f55c4d3553
Urpf-mode : STRICT_MODE
DAD-mode : LOOSE
RA-mode : SLAAC_DNS_TRHOUGH_RA(M=0, O=0)
Admin : up
Op_state : up
MTU : 1500
.
<一部両略>
Tier-0 GWのSRのUplinkから送信されたパケットをキャプチャするために、direction outputオプションを指定してstart capture interface <インタフェース名 or ID>コマンドを実行します。
edge1> start capture interface 8d96d39b-ff32-48d8-9857-52d660fff25b direction output expression ipproto 0x01
01:23:05.654790 00:50:56:b9:a7:b2 > 58:97:bd:b7:4f:29, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 20.1.1.100: ICMP echo request, id 35, seq 0, length 80
<base64>WJe9t08pAFBWuaeyCABFAABkAFMAAP0BnN8KAQEBFAEBZAgA0vEAIwAAAAAAAA4onQ2rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavN</base64>
キャプチャポイント⑫
NSX Edge1のfp-eth1からESXi1のvDSにパケットが転送されているか確認します。
NSX Edge1のfp-eth1から送信されたパケットをキャプチャするために、direction outputオプションを指定してstart capture interface <インタフェース名 or ID>コマンドを実行します。
edge1> start capture interface fp-eth1 direction output expression ipproto 0x01
01:24:14.743560 00:50:56:b9:a7:b2 > 58:97:bd:b7:4f:29, ethertype IPv4 (0x0800), length 114: 10.1.1.1 > 20.1.1.100: ICMP echo request, id 36, seq 0, length 80
<base64>WJe9t08pAFBWuaeyCABFAABkAFQAAP0BnN4KAQEBFAEBZAgAxRAAJAAAAAAAAA4pquyrzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavNq82rzavN</base64>
キャプチャポイント⑬
ESXi1のvmnic1から物理ネットワーク側に転送されているか確認します。
vmnic1から物理ネットワーク側に転送されたパケットをキャプチャするために、--dir=1オプションを指定してpktcap-uw --uplink <vmnicの名前>コマンドを実行します。
[root@esxi1:~] pktcap-uw --uplink vmnic1 --dir=1 -o - | tcpdump-uw -r - -nn
The name of the uplink is vmnic1.
pktcap: The output file is -.
pktcap: No server port specifed, select 47716 as the port.
pktcap: Local CID 2.
pktcap: Listen on port 47716.
reading from file -, link-type EN10MB (Ethernet)
pktcap: Accept...
pktcap: Vsock connection from port 1051 cid 2.
01:27:08.836346 IP 10.1.1.1 > 20.1.1.100: ICMP echo request, id 40, seq 0, length 80
コメント