设置使用vpn连接的代理服务器

我的想法是这样的:

我有这个外部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:

  • 在您通过VPN 访问的networking上设置代理 ,让您的应用程序使用该代理作为默认设置。 有几个代理可以select,取决于您的应用程序使用的协议
  • ssh到给定networking上的主机,并利用称为dynamic转发的 ssh-s服务。 这基本上是一个由您的SSH客户端所做的SOCKS代理。 然后,您可以使用此代理设置您的应用程序或调整它与tsocks(透明袜子)

男人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à!

也许我不明白你的问题,但试试这个:

  • 设置一个服务器,连接到你的VPN服务器(什么样的VPN?OpenVpn,PPTP?IPSec?)。
  • 使默认GW成为VPN端点
  • 启用IP转发,如下所示:“echo 1> / proc / sys / net / ipv4 / ip_forward”
  • 在客户端使用您的服务器作为默认GW。