如果您有一个通过 GRE、IPsec、CNI 或 WARP 连接的 Cloudflare WAN(前称 Magic WAN)客户端,并希望对 Cloudflare Tunnel 后面的终端节点执行 traceroute,则必须应用以下设置,以便该命令返回有用的信息。
在执行 traceroute 客户端的计算机上,确保隧道设备不继承内部数据包的 TTL 值。这是 Linux 上的默认行为,可能会导致无用的 traceroute 结果:
sudo traceroute -s 10.1.0.100 -I 10.3.0.100traceroute to 10.3.0.100 (10.3.0.100), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 10.3.0.100 (10.3.0.100) 420.505 ms 420.779 ms 420.776 ms显式设置 TTL 可以返回好得多的结果:
sudo ip link set cf_gre type gre ttl 64
sudo traceroute -s 10.1.0.100 -I 10.3.0.100traceroute to 10.3.0.100 (10.3.0.100), 30 hops max, 60 byte packets
1 10.0.0.11 (10.0.0.11) 58.947 ms 58.933 ms 58.930 ms
2 173.245.60.175 (173.245.60.175) 61.138 ms 61.316 ms 61.313 ms
3 172.68.145.21 (172.68.145.21) 367.448 ms 367.532 ms 367.530 ms
4 mplat-e2e-vm3.c.magic-transit.internal (10.152.0.20) 370.362 ms 370.440 ms 370.522 ms
5 10.3.0.100 (10.3.0.100) 370.519 ms 370.541 ms 518.152 ms某些 Linux 发行版默认采用非常严格的反向路径过滤(reverse path filtering) ↗设置。这种严格的设置尝试丢弃虚假流量作为安全措施。在此设置开启的情况下执行 traceroute 可能会无意中丢弃 traceroute 数据包。如果您在 Linux 上使用 Cloudflare One Client,请在尝试执行 traceroute 之前设置较不严格的策略:
sudo sysctl -w net.ipv4.conf.CloudflareWARP.rp_filter=2net.ipv4.conf.CloudflareWARP.rp_filter = 2sudo traceroute -s 172.16.0.2 -I 10.3.0.100traceroute to 10.3.0.100 (10.3.0.100), 30 hops max, 60 byte packets
1 169.254.21.171 (169.254.21.171) 48.887 ms 48.894 ms 48.620 ms
2 173.245.60.175 (173.245.60.175) 49.403 ms 49.519 ms 49.603 ms
3 172.68.65.7 (172.68.65.7) 357.499 ms 357.519 ms 357.520 ms
4 mplat-e2e-vm3.c.magic-transit.internal (10.152.0.20) 360.024 ms 360.086 ms 360.078 ms
5 10.3.0.100 (10.3.0.100) 360.283 ms 360.297 ms 360.489 ms