创建连接到 Socks 服务器的 VPN 连接

创建连接到 Socks 服务器的 VPN 连接

我有一个使用 Shadowsocks 设置的 Socks 代理服务器,并且我的笔记本电脑上有客户端。

问题是我必须配置每个程序(使用 HTTP_PROXY 环境或手动)以通过我的 socks 服务器进行代理。

我想创建一个 VPN 连接,在其中配置我的 Socks 凭据,以便当此 VPN 连接时,我的所有网络都通过代理,而当我不需要它时,我只需断开 VPN 连接。

是否有任何工具可以在 VPN 部分定义新协议或某些内容?

我尝试了 OpenVPN,但似乎它不支持我想要的功能:

我的电脑 -> VPN -> Socks -> 互联网。

答案1

问题是我必须配置每个程序(使用 HTTP_PROXY 环境或手动)以通过我的 socks 服务器进行代理。

将端口转发80到代理的端口(8080在此处)。类似这样的命令会暂时执行此操作(重新启动会将其删除)。

sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080

来源:https://unix.stackexchange.com/a/85933/197095

为了使此规则永久生效,请参阅此问题和答案:如何使一组特定的 iptables 规则永久生效?

答案2

无法用作Socks隧道协议,所以不能用 做VPN Socks。原因很简单:Socks只转发TCP(和 中的UDP Socks5),所以其他协议无法通过Socks

您可以使用代理链通过代理传递每个连接Socks。它与 MS-Windows 中的 Proxifire 相同。

答案3

这是可能的。但只传递 TCP 和 DNS 流量,这在 99% 的情况下就足够了。

在 Openvpn 服务器端,运行一个支持打开本地 REDIRECT 套接字并将流量转发到下一个 Socks5 服务器的 Socks5 客户端。我的选择是 Gost。

gost -L redirect://:12345 -F  socks5://U:P@Host:Port

然后主要的魔法就来了。运行实际的 DNS 解析器,通过代理将 DNS 发送到 DNS 服务器,就像 Google 通过 DoH 发送一样。

https_dns_proxy -p 54000 -a 172.22.21.1 -b 8.8.8.8,8.8.4.4 \
  -vvvvvv -4 -t socks5://U:P@Host:Port

使用 Gost 创建一个本地 DNS 缓存解析器,它将所有 DNS 转发到上述解析器:

gost -L "dns://172.22.22.1:53000?mode=udp&dns=172.22.22.1:54000&ttl=300"

并将 VPN 客户端的 TCP 和 UDP(仅 DNS)重定向到这些对象。

iptables -t nat -I PREROUTING -s 172.22.21.100 -p tcp -j REDIRECT --to 12345
iptables -t nat -I PREROUTING -s 172.22.21.100 -p udp --dport 53 -j REDIRECT --to 53000

您不需要将 net.ipv4.ip_forward 设置为 1 !没有 NAT,就不会进行转发。

答案4

VPN 解决方案过于复杂,但并非不可能。您必须设置 VPN 服务器,并在 VPN 服务器上设置系统范围的代理。

唯一的问题是为什么不在客户端上设置系统范围的代理,而是设置 vpn,如下所述:http://askubuntu/questions/769361/ubuntu-16-04-lts-how-to-force-all-http-https-traffic-to-use-proxy

在 Firefox 中有一个切换代理扩展来交换连接,现在有一个用于 Firefox Quantum 的 MM3 代理开关。

相关内容