基于Docker部署Squid正向代理文档
一、文档概述
本文档详细介绍基于Docker部署Squid正向代理的完整流程,适用于内网服务器/设备无法直接访问目标网络(如公网)的场景,通过部署正向代理,实现内网设备间接访问外部网络,同时保留代理透传、隐藏真实IP等特性。部署过程中所有配置代码将原封不动保留,确保部署可直接复用。
二、部署环境要求
-
服务器已安装Docker及Docker Compose(确保可正常执行docker、docker-compose命令);
-
服务器内网IP为10.0.0.9(需与配置文件中IP一致,若修改IP需同步调整相关配置);
-
服务器开放3128端口(用于代理服务监听,若修改端口需同步调整配置);
-
内网客户端可正常访问部署代理的服务器(10.0.0.9)。
三、服务端部署步骤
3.1 编写docker-compose.yml配置文件
在服务器任意目录(建议新建单独目录,如/squid-proxy)下,创建docker-compose.yml文件,内容如下(原代码原封不动保留):
yaml
cat docker-compose.yml
version: '3'
services:
squid:
image: sameersbn/squid:3.5.27-2
container_name: squid
ports:
- "3128:3128"
volumes:
- ./squid.conf:/etc/squid/squid.conf
- ./cache:/var/spool/squid
restart: always
network_mode: bridge
3.2 编写squid.conf配置文件
在同一目录下,创建squid.conf配置文件,用于配置代理规则,内容如下(原代码原封不动保留):
conf
cat squid.conf
http_port 3128
#acl localnet src 10.0.0.0/8
#acl localnet src 172.16.0.0/12
#acl localnet src 192.168.0.0/16
#
#http_access allow localnet
#http_access allow localhost
#http_access deny all
#
http_access allow all # 允许所有
cache deny all # 纯透传,不缓存
forwarded_for off # 隐藏真实 IP,更安全
3.3 启动代理服务
进入配置文件所在目录,执行以下命令启动Squid代理容器,启动后将自动后台运行,且服务器重启后会自动重启容器:
bash
docker-compose up -d
启动后可通过以下命令查看容器运行状态,确认代理服务正常启动:
bash
docker ps | grep squid
若输出包含"squid"且状态为"Up",则表示服务启动成功。
四、客户端使用方法
内网客户端需要使用该正向代理访问外部网络时,需先执行以下命令配置环境变量(原命令原封不动保留,可直接复制执行,支持公网地址访问):
bash
# 客户端使用该正向代理前需要执行以下两句(可以使公网地址)
export ALL_PROXY=http://10.0.0.9:3128
export ALL_PROXY=https://10.0.0.9:3128

配置完成后,客户端通过命令行(如curl、wget)或应用程序访问外部网络时,将自动通过10.0.0.9:3128代理进行访问。
说明:该配置为临时生效,关闭终端后失效;若需永久生效,可将上述两句命令添加至客户端的~/.bashrc或~/.zshrc文件中,执行source ~/.bashrc(或source ~/.zshrc)生效。
五、配置说明
-
docker-compose.yml配置说明:
-
image:使用sameersbn/squid:3.5.27-2镜像,版本稳定,适配当前配置;
-
container_name:容器名称设为squid,便于管理和查看;
-
ports:将容器3128端口映射到服务器3128端口,外部通过服务器IP:3128访问代理;
-
volumes:挂载本地配置文件squid.conf到容器对应目录,挂载缓存目录cache,便于修改配置和管理缓存;
-
restart: always:容器异常退出或服务器重启后,自动重启容器;
-
network_mode: bridge:使用桥接网络,确保内网客户端可正常访问。
-
-
squid.conf配置说明:
-
http_port 3128:代理服务监听3128端口;
-
注释的acl和http_access规则:默认注释了仅允许内网网段访问的规则,便于灵活调整;
-
http_access allow all:允许所有客户端访问该代理(适用于内网环境,若需限制访问,可启用注释的acl规则并修改此配置);
-
cache deny all:关闭缓存功能,实现纯透传,避免缓存占用服务器空间;
-
forwarded_for off:隐藏客户端真实IP,提升访问安全性,避免真实IP泄露。
-
六、常见问题及处理
6.1 报错"link fetch error"
若客户端配置代理后访问网络出现该报错,可能原因及处理方法:
-
代理服务未正常启动:执行docker ps | grep squid查看容器状态,若未启动,执行docker-compose up -d重启服务;
-
客户端无法访问服务器3128端口:检查服务器防火墙是否开放3128端口,内网客户端是否能ping通10.0.0.9;
-
配置文件错误:确认squid.conf中http_port、http_access等配置未修改错误,若修改过,重启容器生效(docker-compose restart)。
6.2 代理无法正常访问外部网络
-
检查部署代理的服务器本身是否能访问外部网络(直接ping公网地址,如ping www.baidu.com);
-
确认客户端环境变量配置正确,未输错IP(10.0.0.9)和端口(3128);
-
检查squid.conf中http_access allow all是否启用,若注释则无法正常访问。
七、注意事项
-
本代理为正向代理,仅适用于内网客户端通过代理访问外部网络,不可作为反向代理使用;
-
http_access allow all配置允许所有客户端访问,若内网环境需要限制访问范围,可启用注释的acl本地网段规则,替换当前http_access allow all配置;
-
缓存目录cache会占用服务器磁盘空间,因配置了cache deny all,该目录不会产生缓存文件,可定期清理;
-
若需修改代理端口,需同步修改docker-compose.yml中的ports映射和squid.conf中的http_port,修改后重启容器生效;
-
部署完成后,建议测试客户端代理访问(如curl -I https://www.baidu.com),确认代理生效。