在我的 Debian 系统上,我希望我的一个用户使用不同的网络接口作为所有互联网流量的默认路由。我知道如何使用 iptables 来阻止其他接口,但不知道如何设置默认路由以使其仅影响它们。这可能吗?
答案1
快速浏览 iptables 手册页显示支持owner
基于用户和/或组 ID 设置规则的模块。它仅适用于本地生成的数据包(即不适用于管理来自不同工作站的流量的路由器)。
然后我想到了一个基于策略的路由设置,结合如下内容:
iptables -A OUTPUT -o owner --uid-owner <uid> -j MARK --set-mark 21
ip rule add fwmark 21 table 22
ip route add default via <alternate_gateway> table 22
未经测试!
防火墙标记(21)和路由表标识符(22)的数量是任意的。
答案2
根据用户 ID 似乎有点困难(他们是通过 SSH 连接到您的服务器,还是仅仅将其用作路由器?),如果您可以控制您的网络,您可以很容易地通过 IP 或 MAC 地址来完成此操作。
答案3
通过使用 ,可以将部分进程树放置在单独的网络命名空间中CLONE_NEWNET
。每个命名空间都作为独立的网络堆栈工作。每个网络接口一次只能在一个命名空间中使用。可以使用虚拟网络接口在网络命名空间之间发送数据包。
从您的问题中我无法判断这是否是一个适合您的解决方案。