使用有效的 ICMP+DNS 调试 RPDM/路由设置,无需 TCP

使用有效的 ICMP+DNS 调试 RPDM/路由设置,无需 TCP

总结:

在稍微复杂的路由场景中,ICMP 和 DNS 请求/消息通过嵌入式路由器从主机到互联网按预期工作,但 Web 浏览器(我猜是 TCP 和/或 HTTP)却不行。如何调试 RPDM+路由表的问题?似乎当我为路由器的主表添加默认路由时,一些 RPDM 规则被忽略了,我不明白我看到的行为。

完整解释:

我有一台 Linux 嵌入式设备,它同时连接到 2 个 ISP,并为 2 个主机设备(通过 eth0、eth1)提供对每个 ISP 的独占访问权限。这意味着主机 1 将独占使用 ISP 连接 1,而主机 2 将独占使用 ISP 连接 2。同时,我希望嵌入式设备与主机共享与其中一个 ISP 的连接(比如说,通过 ISP 连接 2 - eth3)。

我使用 RPDM 来分离每个设备的处理:

32762: from all iif eth3 lookup 102 
32763: from all iif eth2 lookup 101 
32764: from 192.168.1.102 lookup 102 
32765: from 192.168.1.101 lookup 101 

其中路由表配置如下:

default dev eth2 scope link 
123.123.123.123 dev eth2 scope link 
124.124.124.124 dev eth3 scope link 
127.0.0.0/8 dev lo scope link 
192.168.1.0/24 dev bridge0 scope link

我在两个 ISP 连接上都使用了伪装:

iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE

只要设备没有配置默认路由,并且每个主机的 DNS 配置正确(即 ISP 的 DNS 地址) - 一切都会按预期工作,设备本身无需互联网访问。

当我向设备的主路由表添加默认路由时(假设它是针对 eth3),设备可以访问互联网,但主机 1(应该使用 eth2)会失去连接,并且一些数据包会在途中丢失。主机 1 的 ICMP 和 DNS 工作正常。主机 1 上的 Wireshark 显示有许多 TCP 重传。设备上的 tcpdump 显示主机 1 的一些数据包最终到达了 eth 3。

我如何才能弄清楚为什么它不起作用?似乎我添加的默认路线优先于来自 RPDM 的规则,这是不应该发生的。

设置输出这里

澄清:

我熟悉 iptables/TRACE 目标。我为从网桥进入的每个数据包添加了跟踪,但没有看到任何数据包传到 eth3 - 只有传到 eth2,这与 tcpdump 日志相反。也许我找错了东西?

            +                                 +
            |                                 |
            |                                 |
            |                                 |
            |                                 |
+---------------------------------------------------------+
|---------------------------------------------------------|
||  |eth2 (ISP connection)|       |eth3 (ISP connetion 2)||
||  |IP 123.123.123.123   |       |IP 124.124.124.124    ||
||  +---------------------+       +-----------------------|
||                                                       ||
||                    "Embedded Device"                  ||
||               +--------+------------+                 ||
||       +-------+bridge0 + DHCP server+-----+           ||
||       |       |IP 192.168.1.1       |     |           ||
||       |       +---------------------+     |           ||
||       |                                   |           ||
|--------+------------+               +------+------------|
||  eth0              |               |eth1              ||
||  (local connection)|               |(local connection)||
||  IP 192.168.10.1   |               |IP 192.168.10.2   ||
|---------------------------------------------------------|
+---------------------------------------------------------+
        |                                   |
        |                                   |
        |                                   |
+--------------------+              +--------------------+
|--------------------|              |--------------------|
||  host 1          ||              || host 2           ||
||  IP 192.168.1.100||              || IP 192.168.1.101 ||
|--------------------|              |--------------------|
+--------------------+              +--------------------+

答案1

仅针对未来的用户:

问题在于嵌入式设备中使用的数据包加速器覆盖了 Linux 路由表(名为 SFE,由高通提供)。它只是忽略了一些更复杂的规则。

它是开源的并且提供了补丁。

祝你好运!

相关内容