根据数据包的uid-owner将数据包发送到networking接口时出现问题

我需要将来自所有者的数据包(可以使用uid-owner'mailuser')发送到ppp1networking接口,并将所有其他数据包发送到ppp0networking接口。 (假设两个网口ppp0和ppp1都是up的)

因此,我使用下面的命令来testing数据包(由uid-owner'mailuser'的web浏览器生成的)的正确路由到ppp1networking接口。

以下是使用的命令(以及一个简短的描述):

1.复制了从主表格到表格100和表格200的所有路线。

sudo ip route show table main <route1> <route2> <routeN> sudo ip route add <route1> table 100 sudo ip route add <route2> table 100 sudo ip route add <routeN> table 100 sudo ip route add <route1> table 200 sudo ip route add <route2> table 200 sudo ip route add <routeN> table 200 

2.更改了表100和200的默认路由。

 sudo iptables route change default via <gateway_ip_of_ppp0> dev ppp0 table 100 sudo iptables route change default via <gateway_ip_of_ppp1> dev ppp1 table 200 

3.删除主表中的路线。

 sudo ip route flush table main 

4.如果uid是“mailuser”,则标记数据包。

 sudo iptables -t mangle -A OUTPUT -m owner --uid-owner mailuser -j MARK --set-mark 0x1 

5.添加规则查找表100(通过ppp0的默认路由)未被标记的数据包。

 sudo ip rule add not fwmark 0x1 lookup 100 

6.添加规则查找表200(通过ppp1的默认路由)为标记为0x1的数据包。

 sudo ip rule add fwmark 0x1 lookup 200 

7.刷新caching中的路由

 sudo ip route flush cache 

我预计用户mailuser用户的所有stream量都将通过ppp1发送,正如通过tcpdump -I ppp1所看到的tcpdump -I ppp1 。 但是,由日志推断没有收到响应数据包,因此,浏览器(其进程拥有pid-owner mailuser )无法加载任何网站。

那么,这里可能是什么问题呢? 由于当表200的默认路由为ppp1时,浏览器无法加载任何网页,而当我将默认路由改为ppp0时,它工作正常。

我已经在两个接口上检查了ping命令,即Ppp0和ppp1,两者都可以正常工作。

请帮助确定和解决为什么通过其他'ppp1'networking接口发送数据包失败的问题?

你确定离开ppp1的数据包有正确的来源吗? 你可以发布一个tcpdump输出的ping命令和浏览器尝试连接? 你看到有什么不同吗? 如果你对离开ppp1的数据包没有答案,我只能假设它有错误的来源。