我有一个使用 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 代理开关。