似乎没有调用ip规则

时间:2014-10-16 06:29:11

标签: networking iptables

我的本​​地机器上有两个连接,一个是通过eth0(有一个静态IP,让它是10.10.10.10),另一个是通过ppp0(有一个dinamic IP,例如10.20.30.40)。两者都可以访问互联网。我还有一个远程服务器(假设它有IP 1.2.3.4),我想从本地机器连接到这个服务器,使得源地址为10.10.10.10(eth0)的数据包应该通过eth0,而那些具有10.20.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规则。

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

有没有人有想法?

1 个答案:

答案 0 :(得分:0)

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