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

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

我的想法是这样的:

我有要连接的外部 vpn 服务。但我是否可以设置使用该 vpn 连接的本地代理服务器,以便通过该代理连接的应用程序使用 vpn?这适用于 Linux 系统。

欢迎提供提示和链接!

编辑:用例:也许还有其他方法可以做到这一点。

Router #1 - Connects by the default net provided by ISP
Router #2 - Connects by PPTP VPN to another 'ISP'

网络中的客户端默认连接到普通路由器 #1,所有流量都由该路由器处理。客户端有一个不同的浏览器 (opera),该浏览器通过路由器 #2 上的代理进行连接,并最终到达 VPN 隧道的末端。

这清楚了吗?

答案1

虽然你所描述的情况不可能(正在运行的应用程序无法覆盖系统路由表)您可能有几个选择:

  • 建立一个您正在访问的网络上有代理通过 VPN 并让您的应用程序默认使用该代理。您可以根据应用程序使用的协议选择多个代理
  • ssh 到给定网络上的主机并利用 ssh-s 服务动态转发。这基本上是一个由您的 ssh 客户端组成的 SOCKS 代理。然后您可以使用此代理设置您的应用程序或使用 tsocks(透明 Socks)对其进行调整

ssh_config 手册

     动态转发
             指定本地计算机上的 TCP 端口通过
             安全通道,然后使用应用程序协议来确定
             从远程机器连接到哪里。

             参数必须是 [bind_address:]port。可以指定 IPv6 地址
             通过将地址括在方括号中或使用替代语法
             tax: [bind_address/]port。默认情况下,本地端口根据以下条件绑定:
             与 GatewayPorts 设置共舞。但是,显式 bind_address
             可用于将连接绑定到特定地址。
             bind_address 为“localhost”表示绑定到监听端口
             仅本地使用,而空地址或“*”表示端口
             应该可从所有接口获得。

             目前支持 SOCKS4 和 SOCKS5 协议,ssh(1) 将
             充当 SOCKS 服务器。可以指定多个转发,以及附加
             命令行上可以指定转发。只有超级用户
             可以转发特权端口。

答案2

六年后,我又遇到了这个问题,差点因为公认的答案而失望。到今天为止,使用策略路由并不复杂。所有详细信息都可以在同一个网站上找到,网址为https://serverfault.com/a/389004/70774

就我而言,我首先必须确保 vpn 不是默认路由。如何实现这一点取决于您使用的连接管理器类型。

代理(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只是一个任意数字。请注意选择一张未使用的桌子(看看您选择的桌子上是否有 的东西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

瞧!

答案3

这变得相当容易乌贼及其tcp_outgoing_address xxx参数:

apt install squid
nano /etc/squid/conf.d/proxy2vpn
# put this in: tcp_outgoing_address YOUR_VPN_NIC_IP (check ifconfig)
systemctl restart squid.service

Squid 默认监听端口 3128。

使用示例:

curl --proxy 127.0.0.1:3128 https://ipinfo.io

请求将首先通过 Squid 代理,然后通过 VPN。

答案4

也许我不明白你的问题,但请尝试一下:

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

相关内容