使用Docker快速部署WireGuard

背景:

上一篇谈了如何在两个节点间创建WireGuard隧道。在只有2个节点的情况下,这个方式是合适的。在实际部署过程中,很可能是一个服务器节点对应多个客户端节点,这样需要在每个客户端节点生成公钥私钥并创建配置文件,这是一个重复无趣的过程。好在我们有Docker,一切都变得简单,而且使用Docker,还能自动部署设置DNS。这一篇就来谈谈如何通过Docker快速部署WireGuard。

实现步骤(以下在Ubuntu20.04.3LTS版下实际操作过,其他Linux版本未作测试):

图片
  1. 先创建一个新用户kelemi,所有步骤都以该用户操作(非必须)。sudo useradd -m -s /bin/bash kelemisudo usermod -a -G sudo kelemisudo passwd kelemi
  2. 安装Docker 和 Docker compose。(本步骤参考官方文档,请您最好也参考官方文档操作,您阅读时官方文档可能已有修改)更新APT包索引并安装包以允许APT通过 HTTPS 使用存储库:sudo apt-get updatesudo apt-get install   ca-certificates curl gnupg lsb-release添加 Docker 的官方 GPG 密钥:
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg设置稳定存储库:echo \”deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null安装Docker引擎:sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io安装Docker Compose:sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose添加可执行权限及创建软链接:sudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
  3. 将当前用户加入docker组,避免每次输docker命令需要sudo:sudo usermod -aG docker $USERnewgrp docker #更新组成员
  4. 测试Docker和Docker compose安装正常docker run hello-worlddocker-compose version图片
  5. 以上,完成了Docker和Docker-compose的安装,下面进入主题
  6. 创建wireguard-server文件夹,并设定当前用户kelemi为所有者,避免出现权限问题。sudo mkdir /opt/wireguard-serversudo chown kelemi:kelemi /opt/wireguard-server/
  7. 生成docker-compose.yaml文件。cd /opt/wireguard-servervim docker-compose.yaml该yaml文件该如何配置呢?我们可以复制模板文件,再在模板上修改。本次拟用的docker是 linuxserver/wireguard,所以 在hub.docker.com中找到该镜像,查看文档,复制yaml文件模板如下:
    —version: “2.1”services:  wireguard:    image: lscr.io/linuxserver/wireguard    container_name: wireguard    cap_add:      – NET_ADMIN      – SYS_MODULE    environment:      – PUID=1000      – PGID=1000      – TZ=Europe/London      – SERVERURL=wireguard.domain.com #optional      – SERVERPORT=51820 #optional      – PEERS=1 #optional      – PEERDNS=auto #optional      – INTERNAL_SUBNET=10.13.13.0 #optional      – ALLOWEDIPS=0.0.0.0/0 #optional    volumes:      – /path/to/appdata/config:/config      – /lib/modules:/lib/modules    ports:      – 51820:51820/udp    sysctls:      – net.ipv4.conf.all.src_valid_mark=1    restart: unless-stopped根据实际情况,修改模板标红的几行,说明:PUID/PGID:当前用户的ID,用id kelemi查询,这里是1001图片
    PEERS:表示生成几个客户端,这里暂保持1,后面将说明如何添加PEERDNS:代表客户端指向的DNS,如果保持auto,将在服务器端预设置一个DNS服务器,客户端的DNS将指向服务器Restart:改成always,为了能使它一直运行Volumes:容器映像路径要确保有权限修改后的docker-compose.yaml截图如下:图片
  8. 启动docker-compose,加上参数d表示后台运行docker-compose up -ddocker会自动从hub.docker.com上拉取image,完成之后启动该image的容器。图片
  9. 查看容器运行情况图片
  10. 查看容器里的wireguard运行情况,发现已自动生了一个对端节点peer。图片
  11. 在当前目录下,可以看到新建了一个config文件夹,里面有:wg0.conf文件,这是服务器的配置coredns 文件夹,这是该wireguard容器中自动生成运行的DNS服务器peer1文件夹,对端节点相关文件server文件夹,服务器相关文件template文件夹等。图片
  12. 可以看到,wg0.conf文件只允许用户kelemi读写,其他任何人都无法查看。进入server文件夹,也能看到相应的权限设置。这样就有效保护了wireguard配置的安全性。cd server && ls -lSsha图片
  13. 关键点来了:客户端想要连到该服务器,只需复制相应的配置过去即可,非常方便!!我们可以查看peer1文件夹,能看到已帮我们生成了4个文件,包括配置文件,二维码图标,公钥私钥文件。配置文件也自动帮我们写好了公钥私钥、主机地址、DNS、端点信息等。图片
    图片
  14. 下面我们来看看如何配置客户端
  15. WireGuard支持各种客户端,可以进入官方主页查看安装方法https://www.wireguard.com/install本次也以ubuntu20.04.3LTS为例测试,测试客户端IP是 10.160.128.17图片
  16. 安装wireguard软件包,同时也安装resolvconf包,该包在wireguard解释DNS里需要。sudo apt install wireguard resolvconf
  17. 将服务器端生成的peer1.conf复制到客户端。scp peer1.conf kelemi@10.160.128.17:~/peer1.conf
  18. 再到客户端将peer1.conf移到正确的位置。sudo mv peer1.conf /etc/wireguard/wg0.conf
  19. 启动wireguardwg-quick up wg0
  20. 检查是否连接。客户端查:sudo wg服务器查:docker exec -it wireguard wg
    能看到握手已连接。图片
    图片
  21. 上面步骤用docker连了一个客户端,如果想增加用户怎么办?如果增加的用户是手机用户怎么做?也是非常方便的,follow me!
  22. 转到服务器端修改docker-compose.yaml。比如想增加客户端2个,只需将PEERS改成2即可。图片然后重建一下:docker-compose up -d –force-recreate
  23. 检查发现config文件夹下已新建了一个peer2文件夹,相关配置都已生成了。图片
  24. 手机用户可以去应用市场下载wireguard。本步骤略。
  25. 服务器端可以展示二维码。2表示是peer2。docker exec -it wireguard /app/show-peer 2屏幕上出现了二维码。图片
  26. 用手机wireguard扫描一下,即可完成配置,并连到wireguard服务器。一切都那么完美!!!

后记:技术人员经常需要查资料,当碰到百度搜索到的资料是那么的不靠谱时,我们都会怀念谷歌,谷歌的通用搜索、专业搜索不知甩了百度几条街。相信能读懂本文的人都有办法用上谷歌,这里不能详细说明。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注