在跟踪路径期间导致火星数据包(到目前为止仅)的路由策略有多糟糕?

lkr*_*aav 6 linux routing

我相信我已经实现了一个表,可以将数据包从 eth1/192.168.3.x路由到 eth1/192.168.3.x 到 192.168.3.1,以及从 eth0/192.168.1.x 到 192.168.1.1有用的来源)。

问题:从 192.168.3.20(从 vserver 内)执行 tracepath 时,我到达kernel: [318535.927489] martian source 192.168.3.20 from 212.47.223.33, on dev eth0或接近目标 IP,而中间跃点没有(日志如下)。

我不明白为什么这个数据包到达 eth0 而不是 eth1,即使在阅读了这个之后

请注意,在运行 traceroute 或 tracepath 命令时,您可能会看到来自不可路由 IP 地址的数据包。虽然数据包无法路由到这些路由器,但在 2 个路由器之间发送的数据包只需要知道本地网络中下一跳的地址,该地址可能是不可路由的地址。

有人可以用人类语言解释那一段吗?根据迄今为止的短期初步试验,其他一切似乎都可以正常工作而不会导致火星人。这是否包含在跟踪路径操作的性质中,或者我是否有其他一些更大的路由问题会导致工作流量中断?

旁注:是否可以使用 tcpdump 或 wireshark 或任何类似的东西检查火星数据包?我一直无法让它自己显示出来。

vserver-20 / # tracepath -n 212.47.223.33
 1:  192.168.3.2                                           0.064ms pmtu 1500
 1:  192.168.3.1                                           1.076ms
 1:  192.168.3.1                                           1.259ms
 2:  90.191.8.2                                            1.908ms
 3:  90.190.134.194                                        2.595ms
 4:  194.126.123.94                                        2.136ms asymm  5
 5:  195.250.170.22                                        2.266ms asymm  6
 6:  212.47.201.86                                         2.390ms asymm  7
 7:  no reply
 8:  no reply
 9:  no reply
^C
Run Code Online (Sandbox Code Playgroud)

主机路由

$ sudo ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: sit0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/sit 0.0.0.0 brd 0.0.0.0
3: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:24:1d:de:b3:5d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 scope global eth0
4: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:46:46:a3:6a brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.2/27 scope global eth1
    inet 192.168.3.20/27 brd 192.168.3.31 scope global secondary eth1  # linux-vserver instance

$ sudo ip route
default via 192.168.1.1 dev eth0  metric 3 
unreachable 127.0.0.0/8  scope host 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.2 
192.168.3.0/27 dev eth1  proto kernel  scope link  src 192.168.3.2

$ sudo ip rule
0:      from all lookup local 
32764:  from all to 192.168.3.0/27 lookup dmz 
32765:  from 192.168.3.0/27 lookup dmz 
32766:  from all lookup main 
32767:  from all lookup default

$ sudo ip route show table dmz
default via 192.168.3.1 dev eth1  metric 4 
192.168.3.0/27 dev eth1  scope link  metric 4
Run Code Online (Sandbox Code Playgroud)

网关路由

# ip route
10.24.0.2 dev tun0  proto kernel  scope link  src 10.24.0.1 
10.24.0.0/24 via 10.24.0.2 dev tun0 
192.168.3.0/24 dev br-dmz  proto kernel  scope link  src 192.168.3.1 
192.168.1.0/24 dev br-lan  proto kernel  scope link  src 192.168.1.1 
$ISP_NET/23 dev eth0.1  proto kernel  scope link  src $WAN_IP 
default via $ISP_GW dev eth0.1
Run Code Online (Sandbox Code Playgroud)

附加背景

非虚拟化网络接口隔离的选项?

小智 0

我可以回答你的中间问题。我有一个 /29,我从中独立路由每个 /32:

ip route add 8.4.3.3/32 via 192.168.17.33.
Run Code Online (Sandbox Code Playgroud)

这样,我可以使用全部八个 /32,而不会丢失一个用于广播地址和另一个用于该子网上的路由器接口。

至于错误的接口;你能显示你的NAT规则吗?感谢是:

iptables -vnL -t nat
Run Code Online (Sandbox Code Playgroud)