追踪虚拟路由器数据包路径
Contrail 网络虚拟路由器是从虚拟机 (VM) 获取数据包并将其转发到目标位置的组件。跟踪是调试数据包路径的有用工具。
在本主题中,我们将跟踪以下用例中的 vRouter 数据包路径:
单播数据包路径 - VN 内
此过程逐步调试从 VM1 到 VM2(在同一计算节点上)和 VM3(位于不同计算节点上)的虚拟网络内(VN 内)流量的单播数据包路径。在此示例中,列出的虚拟机位于同一子网 10.1.1.0/24
中。VN 内流量位于同一虚拟网络中。
VM1 | IP 地址 |
VM2 | IP 地址 |
VM3 | IP 地址 |
计算内用例
vif
使用以下命令发现与虚拟机的虚拟机接口 (VMI) 对应的接口:vif --list
您还可以通过输入自检 URL 来发现
vif
接口。例子:
http://10.1.1.5:8085/Snh_ItfReq?name=&type=&uuid=&vn=&mac=&ipv4_address=&ipv6_address=&parent_uuid=&ip_active=&ip6_active=&l2_active=
注意:将 IP 地址替换为自检 HTTP URL 中的实际计算 IP 地址。
运行命令以
vif --get <index>
验证是否已在 vRouter 接口 (VIF) 中设置虚拟路由和转发 (VRF) 和策略标志。验证每个
vif
标志的示例输出:vif0/4 OS: tapdd789d34-27 Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.5 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:30 bytes:8676 errors:0 TX packets:170 bytes:7140 errors:0 ISID: 0 Bmac: 02:dd:78:9d:34:27 Drops:81 vif0/6 OS: tapaedbc037-bf Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.6 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:96316 bytes:4858043 errors:0 TX packets:96562 bytes:4884177 errors:0 ISID: 0 Bmac: 02:ae:db:c0:37:bf Drops:2
运行以下命令以显示桥接表中的所有条目:
rt --dump <vrf id> --family bridge
例子:
rt --dump 2 --family bridge Flags: L=Label Valid, Df=DHCP flood, Mm=Mac Moved, L2c=L2 Evpn Control Word, N=New Entry, Ec=EvpnControlProcessing vRouter bridge table 0/2 Index DestMac Flags Label/VNID Nexthop Stats 31264 0:0:5e:0:1:0 Df - 3 206834 79784 2:dd:78:9d:34:27 Df - 44 4 112924 ff:ff:ff:ff:ff:ff LDf 5 48 35 115240 2:0:0:0:0:2 Df - 12 0 169408 2:ae:db:c0:37:bf Df - 25 1 183944 2:99:ef:64:96:e1 LDf 27 20 0 205564 2:0:0:0:0:1 Df - 12 0 252380 0:25:90:c5:58:94 Df - 3 0
示例中突出显示的是网桥表中目标虚拟机的目标 MAC 地址以及与之关联的下一跃点标识符。
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
nh --get 25 Id:25 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:3 Vrf:2 Flags:Valid, Policy, Etree Root, EncapFmly:0806 Oif:6 Len:14 Encap Data: 02 ae db c0 37 bf 00 00 5e 00 01 00 08 00
在此示例中,
Oif:6
是下一跃点中的 OIF 索引,它是数据包的传出接口。对应于Encap Data
在数据包转发到传出接口之前添加到 IP 数据包的 L2 封装。运行
vif --get <oifindex>
以获取传出 VIF 详细信息。例子:
vif --get 6 vif0/6 OS: tapaedbc037-bf Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.6 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:96935 bytes:4892936 errors:0 TX packets:97235 bytes:4921004 errors:0 ISID: 0 Bmac: 02:ae:db:c0:37:bf Drops:2
当流量流过时,相应 VIF 接口的接收数据包和传输数据包
RX
TX
计数器将递增。运行命令
flow -l
以列出创建的流。如果在 VIF 上启用了策略标志,则会创建一个流,如示例中所示。示例:从 执行 PING
10.1.1.6
操作10.1.1.5
。flow -l Index Source:Port/Destination:Port Proto(V) ----------------------------------------------------------------------------------------- 876<=>1020 10.1.1.6:1599 1 (2) 10.1.1.5:0 (Gen: 12, K(nh):21, Action:F, Flags:, QOS:-1, S(nh):21, Stats:9/882, SPort 54920, TTL 0, Sinfo 6.0.0.0) 1020<=>876 10.1.1.5:1599 1 (2) 10.1.1.6:0 (Gen: 2, K(nh):29, Action:F, Flags:, QOS:-1, S(nh):29, Stats:9/882, SPort 58271, TTL 0, Sinfo 4.0.0.0)
当流量流过时,正向和反向流中的统计信息将递增。如果特定流的统计信息未递增,则可能表明该方向存在潜在问题。流操作应为
F
“或”,用于转发或N
NAT 输出的数据包。流操作 为 表示D
将丢弃数据包。vrouter_agent_debug
运行脚本以收集所有相关日志。
计算间用例
在计算间情况下,下一跃点查找指向将数据包带到另一个计算节点的隧道。网桥条目还将指示在封装期间添加到数据包的标签/VNID。计算间流量在不同计算节点上的 VM 之间传输。
对于计算 1:
vif
使用以下命令发现与虚拟机的虚拟机接口 (VMI) 对应的接口:vif --list
您还可以通过输入自省 URL 来发现
vif
接口:例子:
http://10.1.1.5:8085/Snh_ItfReq?name=&type=&uuid=&vn=&mac=&ipv4_address=&ipv6_address=&parent_uuid=&ip_active=&ip6_active=&l2_active=
注意:将 IP 地址替换为自检 HTTP URL 中的实际计算 IP 地址。
运行命令以
vif --get <index>
验证是否已在 vRouter 接口 (VIF) 中设置虚拟路由和转发 (VRF) 和策略标志。验证每个
vif
标志的示例输出:vif0/4 OS: tapdd789d34-27 Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.5 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:30 bytes:8676 errors:0 TX packets:170 bytes:7140 errors:0 ISID: 0 Bmac: 02:dd:78:9d:34:27 Drops:81 vif0/6 OS: tapaedbc037-bf Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.6 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:96316 bytes:4858043 errors:0 TX packets:96562 bytes:4884177 errors:0 ISID: 0 Bmac: 02:ae:db:c0:37:bf
运行以下命令以显示桥接表中的所有条目:
rt --dump <vrf id> --family bridge
例子:
rt --dump 2 --family bridge Flags: L=Label Valid, Df=DHCP flood, Mm=Mac Moved, L2c=L2 Evpn Control Word, N=New Entry, Ec=EvpnControlProcessing vRouter bridge table 0/2 Index DestMac Flags Label/VNID Nexthop Stats 31264 0:0:5e:0:1:0 Df - 3 206834 79784 2:dd:78:9d:34:27 Df - 44 4 112924 ff:ff:ff:ff:ff:ff LDf 5 48 35 115240 2:0:0:0:0:2 Df - 12 0 169408 2:ae:db:c0:37:bf Df - 25 1 183944 2:99:ef:64:96:e1 LDf 27 20 0 205564 2:0:0:0:0:1 Df - 12 0 252380 0:25:90:c5:58:94 Df - 3 0
在示例中,
2:99:ef:64:96:e1
属于IP地址10.1.1.7
和标签27
用于封装数据包。运行
nh --get <nh id>
以获取下一跃点详细信息。例子:
nh --get 20 Id:20 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:12 Vrf:0 Flags:Valid, MPLSoGRE, Etree Root, Oif:0 Len:14 Data:00 25 90 c5 62 1c 00 25 90 c5 58 94 08 00 Sip:10.204.217.86 Dip:10.204.217.70
在此示例中,下一跃点输出将下一跃点类型指示为
Tunnel
,封装使用MPLSoGRE
,传出接口Oif:0
指示为 ,以及隧道的相应源和目标 IP 地址。
对于计算 2:
运行命令以查看
mpls --get <label>
映射到特定传入 MPLS 表的下一跃点。例子:
mpls --get 27 MPLS Input Label Map Label NextHop ------------------------- 27 28
运行
nh --get <nh_id>
以获取下一跃点详细信息。例子:
nh --get 28 Id:28 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:3 Vrf:2 Flags:Valid, Policy, Etree Root, EncapFmly:0806 Oif:3 Len:14 Encap Data: 02 99 ef 64 96 e1 00 00 5e 00 01 00 08 00
运行
vif --get <oifindex>
以获取传出 VIF 详细信息。例子:
vif --get 3 vif0/3 OS: tap99ef6496-e1 Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.7 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:34 bytes:10044 errors:0 TX packets:1699 bytes:78990 errors:0 Drops:93
单播数据包路径 - VN 间
以下过程逐步调试从 VM1 到 VM2(在同一计算节点上)和 VM3(在不同的计算节点上)的数据包路径。在此示例中,列出的虚拟机 (VM) 位于同一子网 10.1.1.0/24
中。
VM1 | IP 地址 |
VM2 | IP 地址 |
VM3 | IP 地址 |
将 IP 地址替换为所有自检 URL 中的实际计算 IP 地址。
计算内用例
vif
使用以下命令发现与虚拟机的虚拟机接口 (VMI) 对应的接口:vif --list
您还可以通过输入自省 URL 来发现
vif
接口:例子:
http://10.1.1.5:8085/Snh_ItfReq?name=&type=&uuid=&vn=&mac=&ipv4_address=&ipv6_address=&parent_uuid=&ip_active=&ip6_active=&l2_active=
注意:将 IP 地址替换为自检 HTTP URL 中的实际计算 IP 地址。
运行命令以
vif --get <index>
验证是否已在 vRouter 接口 (VIF) 中设置虚拟路由和转发 (VRF) 和策略标志。验证每个
vif
标志的示例输出:vif0/4 OS: tapdd789d34-27 Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.5 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:30 bytes:8676 errors:0 TX packets:170 bytes:7140 errors:0 ISID: 0 Bmac: 02:dd:78:9d:34:27 Drops:81 vif0/6 OS: tapaedbc037-bf Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:10.1.1.6 Vrf:2 Mcast Vrf:2 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:96316 bytes:4858043 errors:0 TX packets:96562 bytes:4884177 errors:0 ISID: 0 Bmac: 02:ae:db:c0:37:bf Drops:2
运行以下命令以显示桥接表中的所有条目:
rt --dump <vrf id> --family bridge
例子:
rt --dump 2 --family bridge Flags: L=Label Valid, Df=DHCP flood, Mm=Mac Moved, L2c=L2 Evpn Control Word, N=New Entry, Ec=EvpnControlProcessing vRouter bridge table 0/2 Index DestMac Flags Label/VNID Nexthop Stats 31264 0:0:5e:0:1:0 Df - 3 212744 79784 2:dd:78:9d:34:27 Df - 44 408 112924 ff:ff:ff:ff:ff:ff LDf 5 51 38 115240 2:0:0:0:0:2 Df - 12 0 169408 2:ae:db:c0:37:bf Df - 25 405 183944 2:99:ef:64:96:e1 LDf 5 37 0 205564 2:0:0:0:0:1 Df - 12 0 252380 0:25:90:c5:58:94 Df - 3 0
对于虚拟网络间 (VN),数据包在第 3 层路由,而不是第 2 层交换。虚拟路由器为目标网络执行代理 ARP,为来自源的 ARP 请求提供其虚拟 MAC 地址
0:0:5e:0:1:0
。这rt –dump
可以从源 VN inet 表中看出。这会导致数据包被 vRouter 接收,vRouter 会执行路由查找以将数据包发送到正确的目标。运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
nh --get 3 Id:3 Type:L2 Receive Fmly: AF_INET Rid:0 Ref_cnt:8 Vrf:0 Flags:Valid, Etree Root,
运行
rt --dump 2 --family inet | grep <ip address>
以显示指定 IP 地址上的 inet 系列路由。例子:
rt --dump 2 --family inet | grep 20.1.1.6 Destination PPL Flags Label Nexthop Stitched MAC(Index) 20.1.1.6/32 32 P - 30 - 20.1.1.60/32 0 - 0 - 20.1.1.61/32 0 - 0 - 20.1.1.62/32 0 - 0 - 20.1.1.63/32 0 - 0 - 20.1.1.64/32 0 - 0 - 20.1.1.65/32 0 - 0 - 20.1.1.66/32 0 - 0 - 20.1.1.67/32 0 - 0 - 20.1.1.68/32 0 - 0 - 20.1.1.69/32 0 - 0 - 20.1.106.0/24 0 - 0 -
运行
nh --get <nh id>
以获取下一跃点详细信息。例子:
nh --get 30 Id:30 Type:Encap Fmly: AF_INET Rid:0 Ref_cnt:5 Vrf:3 Flags:Valid, Policy, Etree Root, EncapFmly:0806 Oif:3 Len:14 Encap Data: 02 60 fc 55 cb bf 00 00 5e 00 01 00 08 00
运行
vif --get <oifindex>
以获取传出 VIF 详细信息。例子:
vif --get 3 vif0/3 OS: tap60fc55cb-bf Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:20.1.1.6 Vrf:3 Mcast Vrf:3 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:356 bytes:32586 errors:0 TX packets:3930 bytes:177290 errors:0 ISID: 0 Bmac: 02:60:fc:55:cb:bf Drops:84
计算间用例
在相互计算的情况下,查找的下一跃点将数据包发送出去,将指向隧道下一跃点。根据封装优先级,将添加适当的封装并以隧道方式传输数据包。计算间流量在不同计算节点上的 VM 之间传输。
对于计算 1:
运行
rt --dump 2 --family inet | grep <ip address>
以显示指定 IP 地址的 inet 系列路由。例子:
rt --dump 2 --family inet | grep 20.1.1.5 20.1.1.5/32 32 LP 32 49 - 20.1.1.50/32 0 - 0 - 20.1.1.51/32 0 - 0 - 20.1.1.52/32 0 - 0 - 20.1.1.53/32 0 - 0 - 20.1.1.54/32 0 - 0 - 20.1.1.55/32 0 - 0 - 20.1.1.56/32 0 - 0 - 20.1.1.57/32 0 - 0 - 20.1.1.58/32 0 - 0 -
运行
nh --get <nh id>
以显示下一跃点详细信息,该详细信息指向隧道下一跃点。例子:
nh --get 49 Id:49 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:9 Vrf:0 Flags:Valid, MPLSoUDP, Etree Root, Oif:0 Len:14 Data:00 25 90 c5 62 1c 00 25 90 c5 58 94 08 00 Sip:10.204.217.86 Dip:10.204.217.70
对于计算 2:
运行命令以查看
mpls --get <label>
映射到特定传入 MPLS 表的下一跃点。例子:
mpls --get 32 MPLS Input Label Map Label NextHop ------------------------- 32 36
运行
nh --get <nh id>
以查看下一跃点详细信息。例子:
nh --get 36 Id:36 Type:Encap Fmly: AF_INET Rid:0 Ref_cnt:5 Vrf:3 Flags:Valid, Policy, Etree Root, EncapFmly:0806 Oif:4 Len:14 Encap Data: 02 f3 37 7b 53 25 00 00 5e 00 01 00 08 00
在此示例中,
Oif:4
是下一跃点中的 OIF 索引,它是数据包的传出接口。对应于Encap Data
在数据包转发到传出接口之前添加到 IP 数据包的 L2 封装。运行
vif --get <oifindex>
以获取传出 VIF 详细信息。例子:
vif --get 4 vif0/4 OS: tapf3377b53-25 Type:Virtual HWaddr:00:00:5e:00:01:00 IPaddr:20.1.1.5 Vrf:3 Mcast Vrf:3 Flags:PL3L2Er QOS:-1 Ref:6 RX packets:100 bytes:16915 errors:0 TX packets:3955 bytes:178363 errors:0 ISID: 0 Bmac: 02:f3:37:7b:53:25 Drops:78
有关 Contrail 网络中的 EVPN 类型 5 路由的详细信息,请参阅 支持 EVPN 路由类型 5。
广播、未知单播和组播数据包路径
以下过程将逐步调试 Contrail 网络中广播、未知单播和组播 (BUM) 流量的数据包路径。在此示例中,列出的虚拟机 (VM) 位于同一子网 70.70.70.0/24 中。
ToR 服务节点 (TSN) 积极持有 contrail-tor-agent
并负责:
充当来自 ToR 交换机的所有 BUM 流量的接收方。
充当连接到 ToR 交换机的裸金属服务器 DNS/DHCP 响应方。
低于 5.x 的 Contrail 网络版本使用 Open vSwitch Database (OVSDB) 管理的 VXLAN 环境。
OVSDB 管理的 VXLAN 的拓扑示例:
架顶式交换机 1 (ToR SW1) - 10.204.74.229 (lo0.0 = 1.1.1.229)
架顶式交换机 2 (ToR SW2) - 10.204.74.230 (lo0.0 = 1.1.1.230)
ToR 服务节点 1 (TSN1) = 10.219.94.7
ToR 服务节点 2 (TSN2) = 10.219.94.8
控制器 1 = 10.219.94.4
控制器 2 = 10.219.94.5
控制器 3 = 10.219.94.6
计算1 = 10.219.94.9
计算2 = 19.219.94.18
虚拟网络 (VN) = 70.70.70.0/24
虚拟机 1 (VM1) = 70.70.70.3 驻留在计算 2 上
虚拟机 2 (VM2) = 70.70.70.5 驻留在计算 1 上
裸机服务器 1 (BMS1) = 70.70.70.100
裸机服务器 2 (BMS2) = 70.70.70.101
运行命令以
set protocols ovsdb interfaces <interface>
配置您希望 OVSDB 协议管理的物理接口。例子:
set protocols ovsdb interfaces ge-0/0/46 set protocols ovsdb interfaces ge-0/0/90
BMS 挂起的 ToR 接口标记为
ovsdb interfaces
。通过显示
ovsdb mac
ToR 交换机的表来查看进入这些接口的数据包。例子:
root@QFX5100-229> show ovsdb mac Logical Switch Name: Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 Mac IP Encapsulation Vtep Address Address Address ff:ff:ff:ff:ff:ff 0.0.0.0 Vxlan over Ipv4 1.1.1.229 40:a6:77:d8:37:1d 0.0.0.0 Vxlan over Ipv4 1.1.1.229 02:3b:ce:56:61:98 0.0.0.0 Vxlan over Ipv4 10.219.94.18 02:53:89:c4:29:1c 0.0.0.0 Vxlan over Ipv4 10.219.94.18 02:72:e9:7a:cd:f5 0.0.0.0 Vxlan over Ipv4 10.219.94.9 02:75:a1:33:65:3c 0.0.0.0 Vxlan over Ipv4 10.219.94.9 ff:ff:ff:ff:ff:ff 0.0.0.0 Vxlan over Ipv4 10.219.94.7 {master:0}
标记为红色
ff:ff:ff:ff:ff:ff:ff
( - 广播路由)的条目表示进入 ToR SW 的 BUM 数据包的ovsdb interface
下一跃点。在这种情况下,VTEP 地址10.219.94.7
是下一跃点,即 TSN1。这根据哪个TSN对有问题的ToR交换机具有活动contrail-tor-agent
状态而变化。这样,BUM 数据包将被转发到 VXLAN 隧道中的 TSN 节点(本地 VTEP 源接口为,RVTEP 源接口为1.1.1.229
10.219.94.7
)。VXLAN 封装数据包随 VXLAN 网络标识符 (VNI) 一起发送,该标识符在创建逻辑接口时由 Contrail 网络预先确定。例如,在 Contrail 网络中配置为逻辑端口时
ge-0/0/46
,将在 ToR 上提交以下配置。例子:
set vlans Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 interface ge-0/0/46.0 set vlans Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 interface ge-0/0/90.0 set vlans Contrail-9ed1f70a-6eac-4cdb-837a-1579728fd9a1 vxlan vni 4
当 VXLAN 封装的数据包到达 TSN 节点时,让我们来看看 vRouter 如何处理此数据包。
运行
vxlan --dump
以转储 VXLAN 表。VXLAN 表将网络 ID 映射到下一跃点。例子:
root@contrail61:~# vxlan --dump VXLAN Table VNID NextHop ---------------- 4 13
在此示例中,下一跃点
13
是为 VNI4
编程的。运行
nh --get <nh id>
以显示下一跃点详细信息并确定关联的虚拟路由和转发 (VRF)。例子:
root@contrail61:~# nh --get 13 Id:13 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1
运行以下命令以显示桥接表中的所有条目:
rt --dump <vrf id> --family bridge
例子:
root@contrail61:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 30780 0:1a:a0:e:30:26 - 1 57812 2:53:89:c4:29:1c LDf 17 15 70532 2:3b:ce:56:61:98 LDf 20 15 87024 2:72:e9:7a:cd:f5 LDf 17 14 97192 ff:ff:ff:ff:ff:ff LDf 4 24 121160 0:1a:a0:a:b4:87 - 1 225832 40:a6:77:d8:37:1d LDf 4 19 237084 0:11:a:6c:50:d4 Df - 3 244992 aa:bb:cc:dd:3e:f4 - 1 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c LDf 20 14
在示例网桥表中,由于我们正在跟踪 BUM 数据包路径,因此我们需要通过选择编程的下一跳来检查 ff:ff:ff:ff:ff:ff:ff 路由。在示例中,它是 24。请注意,已对一系列复合下一跃点进行编程。
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
root@contrail61:~# nh --get 24 Id:24 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 20(0) 22(0) 21(0) Id:20 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Tor, Sub NH(label): 19(4) Id:19 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:3 Vrf:0 Flags:Valid, Vxlan, Oif:0 Len:14 Flags Valid, Vxlan, Data:00 00 5e 00 01 21 00 11 0a 6c 50 d4 08 00 Vrf:0 Sip:10.219.94.7 Dip:1.1.1.229 << Source where the BUM Traffic came from. Id:22 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Evpn, Sub NH(label): Id:21 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 15(4099) Id:15 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:6 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:f8 bc 12 33 43 31 00 11 0a 6c 50 d4 08 00 Vrf:0 Sip:10.219.94.7 Dip:10.219.94.18 << Compute node which has a VM in this VN.
示例中的组播树显示有两个动态 IP (DIP)。数据包来源的 DIP 将被忽略。因此,数据包仅转发到 DIP
10.219.94.18
。运行
vxlan --get <vnid>
以检查 DIP10.219.94.18
如何处理传入的 VXLAN 封装数据包。例子:
root@contrail4:~# vxlan --get 4 VXLAN Table VNID NextHop ---------------- 4 20
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
root@contrail4:~# nh --get 20 Id:20 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1
运行以下命令以显示桥接表中的所有条目:
rt --dump <vrf id> --family bridge
例子:
root@contrail4:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 57812 2:53:89:c4:29:1c - 15 70532 2:3b:ce:56:61:98 - 22 87024 2:72:e9:7a:cd:f5 LDf 17 25 97192 ff:ff:ff:ff:ff:ff LDf 4 50 112856 f8:bc:12:33:43:31 Df - 3 225832 40:a6:77:d8:37:1d LDf 4 18 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c LDf 20 25
在示例网桥表中,由于我们正在跟踪 BUM 数据包路径,因此我们需要通过选择编程的下一跳来检查 ff:ff:ff:ff:ff:ff:ff 路由。在示例中,它是 50。
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
root@contrail4:~# nh --get 50 Id:50 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 43(0) 49(0) Id:43 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 31(4612) 25(4617) Id:31 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:00 11 0a 6c 50 d4 f8 bc 12 33 43 31 08 00 Vrf:0 Sip:10.219.94.18 Dip:10.219.94.7 <<< Source where the BUM traffic came from. Id:25 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2562 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:44 a8 42 3a 94 f4 f8 bc 12 33 43 31 08 00 Vrf:0 Sip:10.219.94.18 Dip:10.219.94.9 <<< Compute node which has a VM in this VN. Id:49 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Encap, Sub NH(label): 14(0) 21(0) Id:14 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:4 Len:14 Encap Data: 02 53 89 c4 29 1c 00 00 5e 00 01 00 08 00 Id:21 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:3 Len:14 Encap Data: 02 3b ce 56 61 98 00 00 5e 00 01 00 08 00 <<< Local VM belonging to this VN that is an intended receiver of this multicast traffic.
在此示例中,您只需要检查 DIP
10.219.94.9
。其余端点要么是本地端点,要么是 BUM 流量的来源。现在,让我们检查一下 DIP10.219.94.9
如何处理传入的 VXLAN 封装数据包。运行
vxlan --get <vnid>
以检查 DIP10.219.94.9
如何处理传入的 VXLAN 封装数据包。例子:
root@contrail101:~# vxlan --get 4 VXLAN Table VNID NextHop ---------------- 4 20
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
root@contrail101:~# nh --get 20 Id:20 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1
使用以下命令显示 VRF 的网桥表:
rt --dump <vrf id> --family bridge
例子:
root@contrail101:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 57812 2:53:89:c4:29:1c LDf 17 28 70532 2:3b:ce:56:61:98 LDf 20 28 87024 2:72:e9:7a:cd:f5 - 15 97192 ff:ff:ff:ff:ff:ff LDf 4 31 140744 44:a8:42:3a:94:f4 Df - 3 225832 40:a6:77:d8:37:1d LDf 4 24 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c - 22 Encap Data: f8 bc 12 33 43 31 44 a8 42 3a 94 f4 08 00
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
root@contrail101:~# nh --get 31 Id:31 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 30(0) 36(0) Id:30 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 29(4612) 28(4099) Id:29 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:00 11 0a 6c 50 ac 44 a8 42 3a 94 f4 08 00 Vrf:0 Sip:10.219.94.9 Dip:10.219.94.8 << TSN2 in this topology that is managing a ToR with an end-point belonging to this VN. Id:28 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2566 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:f8 bc 12 33 43 31 44 a8 42 3a 94 f4 08 00 Vrf:0 Sip:10.219.94.9 Dip:10.219.94.18 << Source where the BUM traffic came from. Id:36 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Encap, Sub NH(label): 14(0) 21(0) Id:14 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:3 Len:14 Encap Data: 02 72 e9 7a cd f5 00 00 5e 00 01 00 08 00 << local VM that is an intended receiver of this traffic as it is tagged to this VN Id:21 Type:Encap Fmly:AF_BRIDGE Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, EncapFmly:0806 Oif:4 Len:14 Encap Data: 02 75 a1 33 65 3c 00 00 5e 00 01 00 08 00 << Local VM that is an intended receiver of this traffic since it is tagged to this VN.
从上面的输出来看,您需要进一步检查的唯一 DIP 是
10.219.94.8
。其余 DIP 要么是本地的,要么是 BUM 流量的来源。现在,让我们看看 DIP10.219.94.8
如何处理传入的 VXLAN 封装数据包。运行
vxlan --get <vnid>
以检查 DIP10.219.94.9
如何处理传入的 VXLAN 封装数据包。例子:
root@contrail66:~# vxlan --get 4 VXLAN Table VNID NextHop ---------------- 4 14
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
root@contrail66:~# nh --get 14 Id:14 Type:Vrf_Translate Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Vxlan, Vrf:1
使用以下命令显示 VRF 的网桥表:
rt --dump <vrf id> --family bridge
例子:
root@contrail66:~# rt --dump 1 --family bridge Flags: L=Label Valid, Df=DHCP flood vRouter bridge table 0/1 Index DestMac Flags Label/VNID Nexthop 30780 0:1a:a0:e:30:26 - 1 57812 2:53:89:c4:29:1c LDf 17 17 70532 2:3b:ce:56:61:98 LDf 20 17 87024 2:72:e9:7a:cd:f5 LDf 17 16 97192 ff:ff:ff:ff:ff:ff LDf 4 24 121160 0:1a:a0:a:b4:87 - 1 217208 0:11:a:6c:50:ac Df - 3 225832 40:a6:77:d8:37:1d LDf 4 20 244992 aa:bb:cc:dd:3e:f4 - 1 252916 0:0:5e:0:1:0 Df - 3 256476 2:75:a1:33:65:3c LDf 20 16
运行
nh --get <nh id>
以显示下一跃点详细信息。例子:
root@contrail66:~# nh --get 24 Id:24 Type:Composite Fmly:AF_BRIDGE Rid:0 Ref_cnt:4 Vrf:1 Flags:Valid, Multicast, L2, Sub NH(label): 23(0) 25(0) 21(0) Id:23 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Tor, Sub NH(label): 22(4) Id:22 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:0 Flags:Valid, Vxlan, Oif:0 Len:14 Flags Valid, Vxlan, Data:00 00 5e 00 01 21 00 11 0a 6c 50 ac 08 00 Vrf:0 Sip:10.219.94.8 Dip:1.1.1.230 <<< Another ToR switch that has an end-point belonging to this VN. Id:25 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Evpn, Sub NH(label): Id:21 Type:Composite Fmly: AF_INET Rid:0 Ref_cnt:2 Vrf:1 Flags:Valid, Fabric, Sub NH(label): 16(4617) Id:16 Type:Tunnel Fmly: AF_INET Rid:0 Ref_cnt:6 Vrf:0 Flags:Valid, MPLSoGRE, Oif:0 Len:14 Flags Valid, MPLSoGRE, Data:44 a8 42 3a 94 f4 00 11 0a 6c 50 ac 08 00 Vrf:0 Sip:10.219.94.8 Dip:10.219.94.9 <<< Source where the BUM traffic came from.
现在,您只有一个 DIP,
1.1.1.230
即拓扑中的 ToR SW2。这也应该存在于组播树中,因为此 ToR SW 在与我们正在跟踪的 VN (VNI=4) 相同的 VN 中也有一个端点(即 BMS2)。
这样就可以从一个 ToR 交换机完成所有级别的转发和跟踪 BUM 数据包,并复制到拓扑中的其他预期接收器。
这些组播树由TSN连接到的控制器编程。如果要检查控制器的内存以及最终在所有 TSN 计算上编程的内容,请使用控制器 IP 地址输入以下自检 URL:
http://<controller_ip>:8083/Snh_ShowMulticastManagerDetailReq?x=default-domain:admin:seventy-network:seventy-network.ermvpn.0