linux – 基于进程将IP流量路由到不同的默认路由/接口

前端之家收集整理的这篇文章主要介绍了linux – 基于进程将IP流量路由到不同的默认路由/接口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试确定是否有可能通过特定接口选择性地路由来自进程或进程组的IP数据包,而所有其他数据包都通过另一个接口进行路由.也就是说,我希望来自/usr/bin/testapp的所有流量都通过eth1路由,而所有其他数据包都通过eth0.在这种情况下,数据包可以是TCP,UDP,ICMP等,并且最终用户可以配置它们以使用各种端口.

因为我无法轻易强制有问题的进程绑定到特定接口,所以我试图通过路由实现相同的结果.这可能吗?

—编辑—

通过这里以及许多其他地方的有用建议,是基于UID标记数据包;这不是真正的目标.目标是根据流程标记/过滤/路由,无论用户如何.也就是说,如果alice,bob和charlie都运行自己的/usr/bin/testapp实例;来自所有三个实例的所有数据包都应通过eth1,而来自系统的所有其他数据包应通过eth0.

请注意,由源/目标端口,用户名/ UID等标记是不够的,因为各种用户可能运行testapp,他们可能在自己的〜/ .config / testapp.conf或其他任何设置不同的端口.问题是关于按流程过滤.

一个可用的选项,虽然我不知道它有多么有用,但是在本机二进制文件周围使用/ bin /(ba | z)?sh-wrap包装器.

—编辑—

我指的是运行现代Linux内核的系统上的路由,比如4.0或更高.如果除了iproute2,nftables,conntrack和类似工具之外还有软件依赖,我愿意探索开源解决方案,尽管基本工具更受欢迎.

解决方法

您通过eth1或eth0路由数据包.表格mangle应该解决这个问题.
为此,我必须标记数据包并设置处理它的规则.首先,添加一条规则,使内核路由通过表标记为2的数据包
ip rule add fwmark 2 table 3

假设网关为10.0.0.1,添加通过不同接口重定向流量的路由:

ip route add default via 10.0.0.1 table 3

刷新路由缓存.

ip route flush cache

现在,设置用于标记指定数据包的防火墙规则:

iptables -t mangle -A OUTPUT -p tcp --dport 465 -j MARK --set-mark 2

最后,放松反向路径源验证.有人建议你把它设置为0,但根据https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt,2似乎是更好的选择.如果你跳过这个,你将收到数据包(这可以使用tcpdump -i tap0 -n确认),但数据包不被接受.更改设置以使数据包被接受的命令:

sysctl -w net.ipv4.conf.tap0.rp_filter=2

参考:http://serverfault.com/questions/345111/iptables-target-to-route-packet-to-specific-interface

原文链接:/linux/398565.html

猜你在找的Linux相关文章