【问题标题】:ip rule does not seem to be invokedip 规则似乎没有被调用
【发布时间】:2014-10-16 06:29:11
【问题描述】:

我的本​​地机器上有两个连接,一个是通过 eth0(具有静态 IP,假设为 10.10.10.10),另一个是通过 ppp0(具有动态 IP,例如 10.20.30.40)。两者都可以访问互联网。我还有一个远程服务器(假设它的 IP 为 1.2.3.4),我想从本地计算机连接到该服务器,源地址为 10.10.10.10(eth0)的数据包应通过 eth0,而源地址为 10.20 的数据包应通过 eth0 .30.40 (ppp0) 作为源地址应该经过ppp0。

为了防止数据包被这条规则处理,我初步删除了主路由表的ip规则。

之后,我创建了两个路由表,一个用于 eth0(命名为 ETH),另一个用于 ppp0(命名为 PPP)。然后我将路由添加到这些表中,如下所示:

ip route add default dev ppp0 table PPP
ip route add default dev eth0 table ETH

然后我添加ip规则如下:

ip rule add from 10.10.10.10 lookup ETH
ip rule add from 10.20.30.40 lookup PPP

而且它不起作用。但是,当我使用 ip rule add from all 而不是指向特定 IP 时,它可以工作(当然,在这种情况下,数据包只通过一个接口)。因此,当我指定 IP 时,似乎没有调用 ip 规则。

这种奇怪行为的原因是什么?

有人有想法吗?

【问题讨论】:

    标签: networking iptables


    【解决方案1】:

    我找到了原因。 此问题的原因是一个程序(使用 QT QTcpSocket::bind() 编写)将套接字与适当的接口绑定,但不是路由设置。由于未知原因,它不能正确地做到这一点。我尝试使用原生 linux 套接字函数,现在它运行起来像发条一样。

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多