如何使用 PPTP/OpenVPN 连接作为 SOCKS/HTTP 代理?

如何使用 PPTP/OpenVPN 连接作为 SOCKS/HTTP 代理?

我想使用 PPTP 或 OpenVPN 作为 socks 代理,这样一来,我不用通过它来传输来自我电脑的所有流量,而是使用该连接来创建可以与任何受支持的程序一起使用的 SOCKS 或 HTTP 代理。

我该如何在 Linux 和 Windows 上执行此操作(当然不是同时执行)?

答案1

是的,你可以这样做。

  1. 您需要连接到 VPN,但不能让其接管整个网络,同时仍可使用 VPN 的界面。我已使用 OpenVPN 实现了这一点,方法是在配置文件中添加以下几行:

    route-noexec         # Don't add or remove routes automatically
    
    script-security 2    # Allow user-defined scripts to be called
    down down.sh         # Run script called "down.sh" when connection goes down
    up up.sh             # Run script called "up.sh" when connection comes up
    
    • up.sh脚本

      #!/bin/sh
      
      VPN_IP=$ifconfig_local
      VPN_GATEWAY=$route_vpn_gateway
      
      # Route packets from the VPN's IP address to the VPN's gateway
        ip rule   add   from        $VPN_IP       table vpn
        ip route  add   default via $VPN_GATEWAY  table vpn
      
        ip route flush cache
      
    • down.sh脚本

      #!/bin/sh
      
      VPN_IP=$ifconfig_local
      VPN_GATEWAY=$route_vpn_gateway
      
      # Flush table and delete the rule
        ip route  flush table vpn
        ip rule   del   from  $VPN_IP table vpn
      
        ip route  flush cache
      
  2. 为了使脚本正常工作,您需要vpn通过发出以下命令创建一个名为 的新路由表:
    echo 1 vpn >> /etc/iproute2/rt_tables
    • 您只需执行一次。脚本实现策略路由。其目的是确保通过 VPN 隧道发送的任何数据包都被路由到适当的网关地址(即 VPN 的默认路由已正确设置,但仅由直接连接到隧道的程序使用)。
  3. 通过以下命令启动 VPN 连接:openvpn config-file.conf
    • 您的计算机现在将有一个可直接使用的额外接口,称为tun0。某些程序(例如 qBittorrent)将允许您指定要连接的接口。选择tun0可确保程序的所有网络流量都使用 VPN。

为了实现楼主要求的目标,你可以安装名为但丁

  • Dante 的部分配置是设置内部和外部接口。
    • 对于内部,根据您想要连接的位置,使用环回接口(即lo)或主网络接口(即 eth0)。
    • 对于外部,使用tun0,确保所有通过 socks 的网络流量都通过 VPN 路由。

例子openvpn.conf

client
dev tun0
remote some-openvpn-server.somewhere.net 53     # Replace this by a real server url
proto udp
nobind
persist-key
persist-tun
tls-auth Wdc.key 1
ca ca.crt
cipher AES-256-CBC
comp-lzo
verb 1
mute 20
float
route-method exe
route-delay 2
route-noexec          # Stop the connection taking over the whole machine
up up.sh              # Run the script called "up" when the connection comes up
down down.sh          # Run the script called "down" when the connection goes down
script-security 2     # Allow scripts to be called
auth-user-pass me     # Use the login credentials from the file called "me"
auth-retry interact
explicit-exit-notify 2
ifconfig-nowarn
auth-nocache

答案2

对于 OpenVPN,有一个修补为 ocproxy 支持,但它已经过时了(对于 2.3.x 分支)。我已将其移植到最近 2.5,但这是 PoC(尚不支持 Windows)。你可以使用它代理服务器或者通索克斯,将 VPN 公开为 SOCKS/HTTP 代理。

仅供参考,WireGuard 有类似的项目:韓國語言學家工作组-http-代理有线代理奥内顿

答案3

你需要这样的东西作为 SOCKS5 服务器的 OpenVPN、L2TP 或 PPTP 客户端 | linux 可能是某个容器或虚拟机充当桥梁 - 它将具有 pptp 接口和 socks 代理服务器。您需要以某种方式通过您喜欢的任何其他工具将 socks 流量发送到为服务配置的端口(某些端口转发)

相关内容