You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenVPN路由SquidProxy问题:外部IP无法访问Docker部署的代理

解决Docker部署的Squid代理在OpenVPN启用后外部无法访问的问题

兄弟,我之前刚好踩过这个一模一样的坑!你说的情况百分百是OpenVPN修改了VPS的路由表,把默认流量都导去VPN隧道了,但Docker端口转发进来的外部请求,响应包需要走原来的物理网卡回传,结果被VPN的路由给截胡了,所以外部就访问不到了。给你几个亲测有效的解决步骤:

1. 给OpenVPN添加Docker子网的路由豁免

首先先查看VPS当前的路由表,执行:
ip route show
你会发现OpenVPN启动后,默认路由(0.0.0.0/0)被指向了VPN的tun0接口,但Docker的网桥子网(默认是172.17.0.0/16,如果是自定义网桥就看你的实际子网)的流量应该走原来的物理网卡(比如eth0)。

解决方法是修改你的OpenVPN配置文件(比如client.conf或者ovpn文件),添加一条路由规则,让Docker子网的流量不走VPN:
route 172.17.0.0 255.255.0.0 net_gateway
这条命令会告诉OpenVPN,访问Docker子网的流量直接用VPS原来的网关(物理网卡),绕过VPN隧道。修改后重启OpenVPN服务生效。

2. 检查Docker的iptables转发规则是否被覆盖

有时候OpenVPN启动时会刷新系统的iptables规则,导致Docker自动生成的端口转发规则被冲掉。你可以检查一下nat表的Docker规则:
iptables -t nat -L DOCKER
如果看不到针对3128端口的转发条目,直接重启Docker服务就能让它重新生成规则:
systemctl restart docker

3. 确保Squid监听所有接口

另外别忘了确认Squid容器里的配置,是不是只监听了localhost。打开squid.conf文件,检查http_port配置:
http_port 0.0.0.0:3128
必须是0.0.0.0才能接受来自容器外部的请求,修改后重启Squid容器:
docker restart <你的Squid容器名称>

4. 确认VPS防火墙允许3128端口访问

最后再检查一遍VPS的防火墙规则,不管是用ufw还是原生iptables,都要确保外部能访问3128端口:

  • 如果是ufw:ufw allow 3128/tcp
  • 如果是iptables:iptables -A INPUT -p tcp --dport 3128 -j ACCEPT

我当时就是靠第一条路由豁免解决的问题,你按这个顺序排查下来,应该就能让外部正常访问你的Squid代理了!

内容的提问来源于stack exchange,提问作者Matt H.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:09:44