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

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

概述我正在尝试确定是否有可能通过特定接口选择性地路由来自进程或进程组的IP数据包,而所有其他数据包都通过另一个接口进行路由.也就是说,我希望来自/usr/bin/testapp的所有流量都通过eth1路由,而所有其他数据包都通过eth0.在这种情况下,数据包可以是TCP,UDP,ICMP等,并且最终用户可以配置它们以使用各种端口. 因为我无法轻易强制有问题的进程绑定到特定接口,所以我试图通过路由实现相 我正在尝试确定是否有可能通过特定接口选择性地路由来自进程或进程组的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 – 基于进程将IP流量路由到不同的默认路由/接口全部内容,希望文章能够帮你解决linux – 基于进程将IP流量路由到不同的默认路由/接口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1038992.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存