使应用程序使用特定的网络接口

使应用程序使用特定的网络接口

我有一个 openvpn 连接,我需要它只为一个应用程序工作,这个应用程序使用一个特定的本地端口。我使用了路由无拉动在我的 openvpn 配置文件上然后:

ip route add default via {P-t-P-IP} dev tun0 table 10;
ip rule add from {tun0-inet addres} table 10;

我尝试使用 curl 进行测试。

curl http://icanhazip.com;
curl --interface tun0 http://icanhazip.com;

第一个给出我的正常 IP,第二个给出 openvpn 连接 IP,所以看起来运行良好。

现在,我在让特定应用使用 tun0 接口时遇到了问题。该应用使用本地端口 1033 发出一些 Web 请求。我尝试了这些 iptables 规则(一次一个),我在谷歌上找到了:

iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1033 -j DROP
iptables -A OUTPUT -o tun0 -p tcp -m tcp --sport 1033 -j ACCEPT

iptables -A PREROUTING -p tcp --sport 1033 -i tun0

iptables -A PREROUTING -i tun0 -p tcp -m tcp --sport 1033

iptables -A PREROUTING -i tun0 -t mangle -p tcp --sport 1033 -j MARK --set-mark 1

然后我进行了这个测试:

curl --local-port 1033 http://icanhazip.com

但是我得到的是正常的 eth0 ip,而不是 openvpn 连接 ip。

如果我尝试这些规则(也将 ipv4_forward 设置为 1):

iptables -t nat -A POSTROUTING -p tcp --sport 1033 -j SNAT --to-source 10.10.10.2;
iptables -t nat -A POSTROUTING -p udp --sport 1033 -j SNAT --to-source 10.10.10.2;

10.10.10.2 是我的 tun0 接口 ip(openvpn 使用的),然后 curl 命令超时。

我怎样才能使来自本地端口 1033 的所有流量都通过 tun0 接口?

答案1

您可以使用 Linux 网络命名空间,我认为您可以将 Tun 接口添加到不同的命名空间并在该命名空间中运行您的应用程序。这里有一些例子如何使用它。

相关内容