我正在尝试设置一个公共鱿鱼代理,该代理通过世界其他地方的VPN服务器路由其流量。它在VPS主机上的docker容器内运行。
使用推送网关的默认设置,我可以访问 VPS 本身上的 squidproxy,它确实通过 vpn 路由其流量。
但是,没有外部 IP 可以访问鱿鱼代理。 我确实有码头工人转发端口 3128:3128。
这与创建的OpenVPN路由有关(因为在OpenVPN启动之前可以访问Squid代理)
我发现正是这条路线似乎"阻止"了我的外部流量。
128.0.0.0/1 via 10.91.10.5 dev tun0
(10.91.10.5 是 VPN 的网关)
如果我删除它,我可以再次访问鱿鱼,但传出的请求不使用 VPN。
我可以通过像这样显式添加我的外部 IP 来使其工作
ip route add 203.X.X.X via 172.18.0.1 dev eth0
(172.18.0.1 是 docker 网关)
但我需要它与任何外部 IP 一起使用。
我已经尝试过通过 0.0.0.1 dev eth0 添加 ip 路由 172.18.0.0.0。
但这不起作用,因为 128.0.0.0/1 更具体,因此首先匹配。
结语
1) 需要任何 IP 才能访问 SquidProxy(端口 3128)
2)需要所有传出的SquidProxy请求(80,443)通过VPN发送
任何帮助将不胜感激!
更新:
所以我有这个工作
1)使用以下命令启动OpenVPN
openvpn --route-nopull --script-security 2 --up /etc/openvpn/up.sh
这将禁止它设置 VPN 路由。因此,所有进出流量都使用默认路由,而不是通过VPN
2)在 up.sh 中,我运行以下命令
#!/bin/sh
/sbin/ip route add 0.0.0.0/0 dev $1 table 100
/sbin/ip rule add from all fwmark 1 table 100
/sbin/iptables -A OUTPUT -t mangle -p tcp -m multiport --dports 80,443 -j MARK --set-mark 1
/sbin/iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE
然后,我将Squid设置为仅允许端口80和443。Docker 已打开端口 3128 以访问容器。
我还需要在 docker run 命令中使用 --sysctl net.ipv4.conf.all.rp_filter=0。