前提
有两台服务器,一台可以翻墙,一台不能,现在想使用那台能翻墙的服务器做代理服务器,网上搜一下教程,发现使用 docker
部署 squid
比较简单,于是记录下使用过程。
Squid介绍
Squid
是一款非常流行的开源代理和缓存服务器。它主要用于各种网络协议的内容缓存,以提高访问速度,减少带宽使用,并提供更有效的网络服务。以下是 Squid
的一些核心特点和应用场景:
核心特点
- 缓存和加速:
Squid
可以缓存请求的网页、图片和其他文件,这样当同一个资源再次被请求时,它可以快速从本地缓存提供,而不是每次都从原始服务器下载。 - 控制访问:
Squid
可以用来控制哪些内容可以被用户访问。它支持强大的访问控制列表(ACLs
),允许管理员根据源地址、目的地、使用的协议等标准过滤内容。 - 提供安全性:
Squid
可以作为一个透明代理来提高网络安全,可以用来拦截恶意流量和提供SSL/TLS
加密的代理服务。 - 减少带宽使用:通过缓存频繁访问的内容,
Squid
可以显著减少带宽需求,特别是在网络连接有限或昂贵的环境中非常有用。 - 提高响应时间:由于从近距离缓存提供内容,
Squid
能够减少数据的往返时间,从而提高响应速度。 - 支持多种协议:
Squid
支持HTTP
、HTTPS
、FTP
等多种网络协议。
应用场景
- 企业网关:在企业环境中,
Squid
通常用作网关代理,来管理和监控员工的互联网使用。 - ISP缓存解决方案:互联网服务提供商(
ISP
)使用Squid
来减少带宽使用,加快用户访问互联网资源的速度。 - 内容分发网络:
Squid
可以用作内容分发网络(CDN
)的一部分,来提供地理分布式的缓存服务。 - 反向代理和负载均衡:
Squid
还可以配置为反向代理,用于负载均衡和为后端服务器提供缓存服务。 - 安全和匿名浏览:
Squid
还可用于提高浏览的安全性和匿名性,尤其是当结合VPN
或Tor
使用时。
Docker部署Squid
拉镜像
[root@sk4z3dzp01yel1a3 ~]# docker search squid
[root@sk4z3dzp01yel1a3 ~]# docker pull ubuntu/squid
配置文件
新建目录和
Squid
配置文件目录映射,并且需要准备squid.conf
配置文件。如/usr/local/squid/squid.conf
,文件内容如下,需要修改的见注释。
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
# 这里配置哪些ip可以使用本代理服务器,多个用空格隔开或写到文件里
acl allowed_ips src 112.17.xx.xx
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow localnet
# 这里运行自己配置的ip
http_access allow allowed_ips
# 其他一律拒绝
http_access deny all
# 绑定ip和端口号
http_port 0.0.0.0:3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern . 0 20% 4320
logfile_rotate 0
运行容器
注意端口号
3128
是否占用,是否放行!
docker run --name squid -d --restart=always --publish 3128:3128 --volume /usr/local/squid:/etc/squid/ ubuntu/squid:latest
查看容器运行
docker logs squid
测试服务启动
curl -I http://localhost:3128
测试效果1-windows
未配置代理服务器
配置代理服务器
设置->网络和Internet->代理->手动设置代理
查看出口 ip
已经是代理服务器 ip
了:
打开需要翻墙的 openai
官网也是可以的:
测试效果2-curl
未设置代理
[root@hecs-141602 ~]# sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:02:07 --:--:-- 0curl: (7) Failed connect to github.com:443; 连接超时
设置代理
[root@hecs-141602 ~]# sudo curl --proxy "https://154.198.x.x:3128" -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
100 58.1M 100 58.1M 0 0 1263k 0 0:00:47 0:00:47 --:--:-- 1398k
结论
Squid
是一个功能强大且灵活的工具,它的应用范围从简单的缓存代理到复杂的网络流量管理和安全增强。它的高度可配置性使它适用于各种网络环境,从小型办公室到大型企业和 ISP
网络。
但是和VPN还是有区别的:
Squid
主要用于缓存和控制HTTP/HTTPS
流量,而VPN
用于保护整个网络连接的安全和隐私。Squid
在隐私保护方面不如VPN
,因为它不会对所有流量进行加密,也不会隐藏用户的真实IP
地址。Squid
的配置可能比VPN
复杂,尤其是在进行高级过滤和控制时。