我正在运行一个带有 OpenVPN 服务的 VPS。在同一台服务器上,我还设置了一个本地 socks 代理(它是 Tor,但我认为在这种情况下它并不重要)。
我是否可以以某种方式将我的 VPN 连接路由到该 Socks 代理,而无需更改我的本地浏览器/设备设置?
我想要设置的连接看起来像
(my device) -> VPN tunnel -> (VPN server -> Tor SOCKS proxy) -> Tor network
(this connection is inside VPS)
我看到两个选择
1)路由完全在服务器上进行,对客户端透明
2)VPN 推送 socks 代理选项(因为它可以推送路由、DNS 服务器等)
但我不知道如何实现这两者。
我经常使用 OpenVPN 来绕过阻止,并且我想使用相同的例程从 Windows 和 Android 设备连接到 Tor 网络,而不必费心更改代理设置、运行本地 tor/orbot 等。理想情况下,我计划将它与常规 VPN 连接一起运行,将所有流量路由到互联网(这已经设置好并且运行良好),但在不同的端口上。
答案1
终于到了。
首先,您需要运行另一个 OpenVPN 实例。只需复制 openvpn/server.conf 并更改
port [some free port]
server [another subnet, if your first instance was on 10.8.0.0, set it to 10.8.1.0] 255.255.255.0
push "dhcp-option DNS [we will use TOR DNS, so this will be TOR proxy IP, e.g. 10.8.1.1]"
您可能需要生成另一个密钥对。
然后以透明代理模式启动 TOR(请注意,官方文档将此模式列为潜在不安全模式,请参阅https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy了解详情)。它将充当您的网关和 DNS 服务器。更改默认torrc
文件附加此配置
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort [address in your subnet, e.g. 10.8.1.1]:9040
DNSPort [same, 10.8.1.1]:53
最后将所有子网请求路由到 TOR 代理(DNS 流量的特殊配置)
iptables -t nat -A PREROUTING -s [your subnet, e.g. 10.8.1.0/24] -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -s [your subnet, e.g. 10.8.1.0/24] -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
确保防火墙允许内部 10.8.1.0 子网流量。
连接到不同的端口将允许您通过 VPN 从 TOR 网络切换到常规互联网连接。无需客户端配置。