我正在尝试configurationopenvpn,以便只有来自特定进程的stream量通过vpn,但是这些进程可以连接到任何地方。
我试图通过让openvpn不做任何路由configuration( --route-noexec )并让应用程序显式连接到tun接口(例如: curl --interface tun0 'http://www.ipchicken.com' : curl --interface tun0 'http://www.ipchicken.com' ),但connect()似乎超时。
为了使tun界面快乐,我还需要采取其他一些措施吗?
route-nopull
http://openvpn.net/index.php/open-source/documentation/manuals/69-openvpn-21.html
与–client或–pull一起使用时,接受服务器EXCEPT推送的路由选项。 在客户端上使用时,该选项可以有效地阻止服务器将路由添加到客户端的路由表中,但请注意,该选项仍然允许服务器设置客户端的TUN / TAP接口的TCP / IP属性。
所以添加route-nopull到你的OpenVPNconfiguration文件。 我写了一篇关于如何使用cURL / PHP使用OpenVPN VPN的文章 。
您可以通过对来自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 ,您将不得不input:
# 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 ,你必须在你的内核configuration中启用CONFIG_IP_MULTIPLE_TABLE才能工作。