OpenVPN:将所有 HTTP 流量从客户端重定向到 Squid

OpenVPN:将所有 HTTP 流量从客户端重定向到 Squid

我正在尝试将 Squid 设置为我的 OpenVPN 网络内的透明代理:

 __________               ________________                    _____________
| Client   |             | OpenVPN server |                  | Squid Proxy |
| 10.8.0.3 |-------------|    10.8.0.1    |------------------|  10.8.0.2   |
|__________|             |________________|                  |_____________|

基本上我想要实现的是来自客户端的所有 HTTP 流量都通过 Squid 代理;我遵循官方指南(https://wiki.squid-cache.org/ConfigExamples/Intercept/IptablesPolicyRoute)建议标记所有 80 端口流量,然后将其重定向到代理:

# mark everything on port 80 to be routed to the Squid box
iptables -t mangle -A PREROUTING -i tun0 -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -m mark --mark 2 -j ACCEPT
ip rule add fwmark 2 table proxy
ip route add default via 10.8.0.2 table proxy

所以我这么做了并且ip route get 8.8.8.8 mark 2返回

8.8.8.8 via 10.8.0.2 dev tun0 table proxy src 10.8.0.1 mark 2 uid 1000

我检查了一下iptables,发现 80 端口请求已标记。但没有流量到达10.8.0.2- 就像我的路由被忽略了一样(tcpdump port 80 -i tun0处为空10.8.0.2)。

是否有不同的解决方案来在 OpenVPN 网络内部路由 HTTP 流量?

答案1

首先,网关实际上不会对tun路由做任何事情。要使客户端成为(子)网络的网关,您需要iroute在其 CCD(client-config-dir)文件中包含(s)。文件名应该是其通用名称(CN)。

假设您client-config-dir /etc/openvpn/ccd/在 openvpn 服务器 conf 中,并且代理服务器的 CN 是squid,则有:

iroute 0.0.0.0 0.0.0.0

/etc/openvpn/ccd/squid

(注意:您可能需要避免推送redirect-gatewayroute 0.0.0.0 0.0.0.0使用服务器配置,因为您不希望通过tun代理服务器上自己的默认路由。/etc/openvpn/ccd/DEFAULT如果您不能/不想在客户端配置中拥有它,您应该能够通过使用该指令来解决这个问题。但您确实需要在其他客户端上添加默认路由,这样才重要iroute。)

由于您只希望某些流量使用代理服务器作为“网关”,请确保您没有client-to-client在 openvpn 服务器配置中,否则tun客户端将直接将流量路由到代理服务器(例如,当它们到达 openvpn 服务器时,它们不会离开隧道,这样您就可以在 IP 级别有选择地转发它们,但由 openvpn 在内部转发)。

由于您在 IP 级别进行转发,因此请确保 IP 转发已启用sysctl,和允许在您的防火墙(例如 iptables)中。如果您(或您使用的任何程序)没有另行指示,则后者应为默认设置。

然后在服务器上:

ip route add default dev tun0 table proxy

对于您的用例,您可能甚至不需要fwmark(和相应的iptables规则),但是:

ip rule add iif tun0 ipproto tcp dport 80 table proxy

(注意:AFAICRiroute 0.0.0.0 0.0.0.0不会阻止任何客户端通过tun服务器进行联系。这就是为什么上述路由和规则也应该允许代理服务器的回复到达客户端。)

编辑:如果您希望 openvpn 服务器本身的 tcp 80 流量也转到代理服务器,则应该这样做:

ip rule add iif lo ippproto tcp dport 80 table proxy

相关内容