我正在对一个位置的站点到站点 VPN 问题进行故障排除。我已将其范围缩小到链接正在运行,但由于路由问题而导致流量下降。我在两台 Ubiquiti 路由器上运行 ospf,并通过 ipsec 保护的 gre 隧道运行。
我正在使用 tcpdump 尝试捕获具有非零诊断字段的 bfd 数据包。我正在使用此处找到的 RFC 5880 中描述的 BFD 标头
本质上,我感兴趣的 BFD 标头字段应该是 BFD 标头中字节 0 的第 3-7 位。
我正在运行以下 tcpdump 命令:
sudo tcpdump -i tun1001 "端口 3784 和 ip[9] &255==17" -vvv -s 0
(我意识到我不需要 &255,我只是想确保事情按照我理解的方式工作)这向我显示了我正在寻找的数据包:
13:21:25.269162 IP (tos 0x0, ttl 255, id 18326, offset 0, flags [DF], proto UDP (17), length 52)
10.254.254.1.55178 > 10.254.254.2.3784: [no cksum] BFDv1, length: 24
Control, State Up, Flags: [Control Plane Independent], Diagnostic: No Diagnostic (0x00)
Detection Timer Multiplier: 3 (750 ms Detection time), BFD Length: 24
My Discriminator: 0x0000178b, Your Discriminator: 0x0000177d
Desired min Tx Interval: 250 ms
Required min Rx Interval: 250 ms
Required min Echo Interval: 1000 ms
添加ip[24] &31 == 0仍然会显示数据包,甚至会混淆显示带有诊断字段集的数据包。我还尝试了ip[24]&192>>5=1来获取协议版本 1,但这也没有达到预期的效果。
我试过添加((ip[24]&0x1f)!=0)也没有任何运气。会话丢弃而没有显示我通常看到的包含(诊断:控制检测时间已过期(0x01))的数据包。
我觉得我错过了一些非常基本的东西。