使用squid搭建代理服务器

使用squid搭建代理服务器

代理服务器:

由于部分网络的限制,禁止访问github或者速度很慢,可以通过代理解决这一问题.
即: 通过代理服务器转发http请求,绕过网络限制.

常用的开源代理软件:

常用开源代理软件有tinyproxy, squid, Privoxy等5种

Squid代理服务器的搭建

  • 环境

服务器为阿里云服务器, 系统为Ubuntu18.04 LTS

  • 安装squid

先检查是否已安装squid,如果已安装,则会提示squid路径

root@iZbp19avc72hef0pmt4u02Z:~# which squid
root@iZbp19avc72hef0pmt4u02Z:~# 

安装squid

root@iZbp19avc72hef0pmt4u02Z:~# apt-get install squid -y
  • 修改squid的配置文件

编辑squid配置文件

root@iZbp19avc72hef0pmt4u02Z:~# sudo vim /etc/squid/squid.conf

使用/进入搜索模式, 搜索http_access deny all并注释掉

# http_access deny all

shift+g切到配置文件尾端,追加如下配置信息

dns_nameservers 8.8.8.8
http_port 8000
http_access allow all
cache_mem 60 MB
  • 启动squid代理

首次启动squid需要创建交换目录

root@iZbp19avc72hef0pmt4u02Z:~# cd /usr/sbin/
root@iZbp19avc72hef0pmt4u02Z:/usr/sbin# ./squid -z

启动squid代理

root@iZbp19avc72hef0pmt4u02Z:/usr/sbin# ./squid

然后去阿里云服务器安全组放行代理服务器端口(配置文件中追加的8000端口)

  • 代理服务测试

客户机直接获取ip,结果为:
image.png
客户机使用代理:
image.png
再次获取ip,结果为:
image.png
此时说明代理成功.

  • 停止squid代理:

首次创建交换目录之后, 后续重启squid代理无需再次创建交换目录

root@iZbp19avc72hef0pmt4u02Z:/usr/sbin# ./squid -k shutdown
使用Docker搭建squid代理服务器
  • ######拉取squid镜像
    先搜索一下docker hub上的squid镜像
root@iZbp19avc72hef0pmt4u02Z:~# docker search --filter stars=50 squid
NAME                        DESCRIPTION                          STARS               OFFICIAL            AUTOMATED
sameersbn/squid                                                  183                                     [OK]
squidfunk/mkdocs-material   A Material Design theme for MkDocs   54                                      [OK]
root@iZbp19avc72hef0pmt4u02Z:~# 

拉取一个镜像, 此处拉取指定版本的镜像

root@iZbp19avc72hef0pmt4u02Z:~# docker pull sameersbn/squid:3.3.4-14
......
root@iZbp19avc72hef0pmt4u02Z:~# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
myblog               v3.0.3              1ba5ed2d545a        29 hours ago        231MB
portainer            latest              ff4ee4caaa23        3 weeks ago         81.6MB
redis                latest              dcf9ec9265e0        5 weeks ago         98.2MB
mysql                8                   d435eee2caa5        5 weeks ago         456MB
logstash             7.3.1               1c5964893183        4 months ago        841MB
kibana               7.3.1               b54865ba6b0b        4 months ago        1.01GB
elasticsearch        7.3.1               3d3aa92f641f        4 months ago        807MB
livingobjects/jre8   latest              16e881b54ec0        3 years ago         128MB
sameersbn/squid      3.3.8-14            b51686290574        3 years ago         214MB
  • 创建并运行squid容器

先停止宿主机的squid服务:

root@iZbp19avc72hef0pmt4u02Z:~# systemctl stop squid.service

创建squid容器
由于squid镜像暴露的端口号为3128, 因此端口要映射到容器的3128端口

root@iZbp19avc72hef0pmt4u02Z:~# docker run -d -p 8000:3128 --name squid sameersbn/squid:3.3.8-14 
......
root@iZbp19avc72hef0pmt4u02Z:~# docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                    NAMES
5cdb090ba055        sameersbn/squid:3.3.8-14   "/sbin/entrypoint.sh"    3 seconds ago         Up 3 seconds          0.0.0.0:8000->3128/tcp   squid
  • 修改squid容器中的配置文件

先停止squid容器:

root@iZbp19avc72hef0pmt4u02Z:~# docker stop 5c

先复制一份宿主机的squid配置文件

root@iZbp19avc72hef0pmt4u02Z:/java/squid# ls
squid.conf
root@iZbp19avc72hef0pmt4u02Z:/java/squid# vim squid.conf

编辑复制的squid配置文件

dns_nameservers 8.8.8.8
# 修改要暴露的端口号为3128, 与squid镜像要暴露的端口一致
http_port 3128
http_access allow all
cache_mem 60 MB

使用/进入搜索模式, 搜索http_access deny all并注释掉

# http_access deny all

直接复制此配置文件到squid容器中:

root@iZbp19avc72hef0pmt4u02Z:/java/squid# docker cp squid.conf squid:/etc/squid3/squid.conf

启动容器:

root@iZbp19avc72hef0pmt4u02Z:/java/squid# docker start 5c
  • 代理测试

此时squid代理容器已经启动, 并映射到宿主机的8000端口, 宿主机的squid代理完全可以卸载掉.
客户机使用代理:
image.png
再次获取ip,结果为:
image.png
此时说明代理成功.

  • 针对arm版本的docker引擎

由于x86和arm指令集的不同, 在arm架构的CPU上无法直接使用x86的容器, 否则无法启动容器, 在容器日志中可以看到指令集报错信息.
可以通过squid在github上的项目重新构建镜像

docker build -t sameersbn/squid github.com/sameersbn/docker-squid