-1

我正在尝试设置一个公共 squid 代理,通过世界其他地方的 VPN 服务器路由它的流量。它在 VPS 主机上的 docker 容器内运行。

使用推送网关的默认设置,我可以访问 VPS 本身上的 squidproxy,它确实通过 vpn 路由它的流量。

但是,没有外部 IP 可以访问 squid 代理。我确实有 docker 转发端口 3128:3128。

这与创建的 OpenVPN 路由有关(因为在 OpenVPN 启动之前可以访问 Squid 代理)

我发现正是这条路线似乎“阻止”了我的外部流量。

128.0.0.0/1 via 10.91.10.5 dev tun0

(10.91.10.5是VPN的网关)

如果我删除它,我可以再次访问 squid,但传出请求不使用 VPN。

我可以通过像这样显式添加它来使我的外部 IP 工作

ip route add 203.X.X.X via 172.18.0.1 dev eth0

(172.18.0.1 是 docker 网关)

但我需要它与任何外部 IP 一起工作。

我试过 ip route add 0.0.0.0 via 172.18.0.1 dev eth0。

但这不起作用,因为 128.0.0.0/1 更具体,所以首先匹配。

综上所述

1) 需要任何 IP 才能访问 SquidProxy(端口 3128)

2) 需要所有传出的 SquidProxy 请求 (80,443) 通过 VPN

任何帮助将不胜感激!

4

1 回答 1

0

更新:

所以我有这个工作

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 。

于 2018-04-10T03:50:19.310 回答