如何配置 openvpn 以仅为绑定到 tun 接口的进程代理流量?

如何配置 openvpn 以仅为绑定到 tun 接口的进程代理流量?

我正在尝试配置 openvpn 以便只有来自某些进程的流量通过 vpn,但这些进程可以连接到任何地方。

我尝试通过让 openvpn 不进行任何路由配置(--route-noexec)并让应用程序明确连接到 tun 接口(例如curl --interface tun0 'http://www.ipchicken.com':)来做到这一点,但connect()似乎超时了。

为了让 tun 界面正常运行,我还需要执行其他步骤吗?

答案1

route-nopull

http://openvpn.net/index.php/open-source/documentation/manuals/69-openvpn-21.html

与 --client 或 --pull 一起使用时,接受服务器推送的选项(路由除外)。在客户端上使用时,此选项可有效禁止服务器向客户端的路由表添加路由,但请注意,此选项仍允许服务器设置客户端 TUN/TAP 接口的 TCP/IP 属性。

因此,将 route-nopull 添加到您的 OpenVPN 配置文件中。我写了一篇关于如何使用OpenVPN VPN 与 cURL/PHP

答案2

您可以通过对来自您的tun0接口的数据包使用不同的路由表来实现此目的。

# ip route add $VPN_NETWORK dev tun0
# ip route add default via $VPN_GATEWAY_IP table 1
# ip rule add iif tun0 table 1

第一条路由进入默认表(表 254),第二条路由进入表 2,第三行将来自tun0接口的数据包绑定到第二条路由表,您可以为此表命名/etc/iproute2/rt_tables

# echo '1 vpn' >> /etc/iproute2/rt_tables

如果您的 VPN 网关是10.8.0.1/16,则必须输入:

# ip route add 10.8.0.0/16 dev tun0
# ip route add default via 10.8.0.1 table vpn
# ip rule add iif tun0 table vpn

这就是所谓的Policy Routing,您必须CONFIG_IP_MULTIPLE_TABLE在内核配置中启用它才能工作。

相关内容