我的想法是这样的:
我有这个外部vpn服务,我连接到。 但是,我可以设置一个使用该VPN连接的本地代理服务器,所以通过代理连接的应用程序使用VPN? 这适用于Linux系统。
提示和链接是受欢迎的!
编辑:用例:也许有另一种方法来做到这一点。
Router #1 - Connects by the default net provided by ISP Router #2 - Connects by PPTP VPN to another 'ISP'
networking中的客户端默认连接到正常路由器#1,所有的stream量都被处理。 客户端具有不同的浏览器(opera),通过路由器#2上的代理连接,并在VPN隧道的末端结束。
这是否清理?
虽然你所描述的情况是不可能的 (运行的应用程序不能覆盖系统路由表),但你可能有一些select:
男人ssh_config
DynamicForward 指定本地机器上的TCP端口通过 安全通道,然后使用应用协议来确定 从远程机器连接到哪里。 参数必须是[bind_address:]端口。 可以指定IPv6地址 通过将方括号中的地址或通过使用替代的syn- 税:[bind_address /]端口。 缺省情况下,本地端口绑定accor- 用GatewayPorts设置跳舞。 但是,显式的bind_address 可用于将连接绑定到特定的地址。 该 “localhost”的bind_address表示监听端口被绑定 只有本地使用,而空地址或“*”表示该端口 应该可以从所有接口获得。 目前支持SOCKS4和SOCKS5协议,而ssh(1)将会支持 充当SOCKS服务器。 可以指定多个转发,并且addi- 可以在命令行上给出转发的转发。 只有超级用户 可以转发特权端口。
六年后,我回到这个问题,基于接受的答案,几乎让它失望。 到今天为止,使用策略路由并不复杂。 所有的细节都可以在这个网站上, https://serverfault.com/a/389004/70774 。
在我的情况下,我首先要确保vpn不是默认路由。 你将如何实现这一点取决于你正在使用什么样的连接pipe理器。
代理(tinyproxy)以自己的用户运行,所以我用命令标记了来自这个用户的所有包
iptables -t mangle -A OUTPUT -m owner --uid-owner 125 -j MARK --set-mark 2
其中125
是tinyproxy用户的uid, 2
是任意数字,稍后进行匹配。
然后,我指示路由系统使用特定的表来路由标有2
所有请求。
ip rule add fwmark 2 table 3
再次, 3
是一个任意数字。 只要注意select一个未使用的表格(只要看看你select的ip route list table 3
是否有东西)。
然后我用我的默认路由填充表3
:
ip route add default dev ppp0 via proto static scope link metric 1024
最后一步是制定一个伪装的规则,其中我不完全理解的必要性:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Etvoilà!
也许我不明白你的问题,但试试这个: