日期:2014-05-16  浏览次数:21216 次

iptables 指定特定进程产生的包从特定的网卡出去?
有两个网卡eth0,wan0,想让某个指定的进程(进程名或进程号)产生的ip包(tcp或udp协议)均从网卡wan0中出去。
这个规则该怎么写?

------解决方案--------------------
控制数据连接从哪个网卡走,是通过路由完成的,但是路由只能是根据ip来设定,不是程序或者进程。
不知道你具体想作什么,一般路由器管理页面会设定不允许从wan端访问,它用的规则就是阻止从wan口进来到本机80端口的连接包。
一般来说wan口和lan口的ip必定是2个不同网络的,所以不存在说可以从lan口走又可以从wan走的情况。
------解决方案--------------------
引用:
呃!怪我没说清楚,不是用在路由器上的,是作用在终端客户机上的,客户机可以通过两个网卡同时访问外部网络,我是想让本地某进程只能通过其中一个网卡访问网络,同时另一个网卡还要正常工作,以便让其他的进程通过其访问网络。

这么说就清楚了。有个初步的想法:
可以考虑写一个netfilter的模块(也就是iptables真正的实现功能内核模块),它来完成对数据包连接的判断是哪个进程然后根据进程名称作转发,比如netstat -lanp(rooot权限)就可以知道哪些连接是哪个进程的。怎么判断连接是哪个进程的这块我也没研究过,但是netstat有这个功能,那就得研究一下它的源代码了。