Menu Close

关于Docker 部署 wg-easy开源VPN

阿里云部署:

下载wg-easy镜像

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# docker pull ghcr.io/wg-easy/wg-easy

安装 EPEL 源和内核依赖

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo yum install -y epel-release elrepo-release

安装内核依赖

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo yum install -y kmod-wireguard wireguard-tools

加载 WireGuard 内核模块

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo modprobe wireguard

验证模块加载(显示 wireguard 即成功

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# lsmod | grep wireguard

手动创建 wg0 虚拟网卡

[root@iZ2zec9fdba7bqcn5jzugjZ ~]#sudo ip link add dev wg0 type wireguard

启动镜像

[root@iZ2zec9fdba7bqcn5jzugjZ ~]#

sudo docker run -d \

–name=wg-easy \

-e WG_HOST=123.56.30.224 \

-e PASSWORD_HASH=’$2a$12$HEflU6jBtDcJpgRW1ZWs8u0kfJu/JEaDWl5z4Zy42S8RwpeFtI3ra’ \

-e WG_DEFAULT_DNS=223.5.5.5 \

-e WG_INTERFACE=wg0 \

-v ~/wg-easy:/etc/wireguard \

-v /lib/modules:/lib/modules \

-p 0.0.0.0:51820:51820/udp \

-p 0.0.0.0:51821:51821/tcp \

–cap-add=NET_ADMIN \

–cap-add=SYS_MODULE \

–sysctl=”net.ipv4.conf.all.src_valid_mark=1″ \

–sysctl=”net.ipv4.ip_forward=1″ \

–privileged=true \

–restart unless-stopped \

ghcr.io/wg-easy/wg-easy

-e PASSWORD_HASH=’$2a$12$HEflU6jBtDcJpgRW1ZWs8u0kfJu/JEaDWl5z4Zy42S8RwpeFtI3ra’ \ #为密码的哈希值

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo docker restart wg-easy

查看容器是否稳定运行(显示 Up 无 Restarting 即成功)

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo docker ps | grep wg-easy

查看日志(无密码/内核相关报错即可)

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo docker logs wg-easy

如果有防火墙需要放行端口

停止 wg-easy 容器

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo docker stop wg-easy && sudo docker rm wg-easy

sudo docker run -d \

–name=wg-easy \

-e WG_HOST=123.56.30.224 \

-e PASSWORD_HASH=’$2a$12$HEflU6jBtDcJpgRW1ZWs8u0kfJu/JEaDWl5z4Zy42S8RwpeFtI3ra’ \

-e WG_DEFAULT_DNS=223.5.5.5 \

-e WG_INTERFACE=wg0 \

-v ~/wg-easy:/etc/wireguard \

-v /lib/modules:/lib/modules \

-p 0.0.0.0:51820:51820/udp \

-p 0.0.0.0:51821:51821/tcp \

–cap-add=NET_ADMIN \

–cap-add=SYS_MODULE \

–sysctl=”net.ipv4.conf.all.src_valid_mark=1″ \

–sysctl=”net.ipv4.ip_forward=1″ \

–privileged=true \

–restart unless-stopped \

ghcr.io/wg-easy/wg-easy

放行端口(防火墙)

sudo firewall-cmd –add-port=51820/udp –permanent

sudo firewall-cmd –add-port=51821/tcp –permanent

sudo firewall-cmd –reload

执行后关键验证步骤

检查容器状态(显示 Up 无重启即成功):

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo docker ps | grep wg-easy

验证 WG_HOST 参数是否生效:

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo docker exec -it wg-easy env | grep WG_HOST

正常输出:WG_HOST=123.56.30.224

先确认容器是否在监听正确的端口

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo docker ps | grep wg-easy

访问 Web 面板:http://123.56.30.224:51821

如果一切正常 web界面无法访问及u需要检查下内核IP转发是否开启生效

开启内核IP转发(确保NAT生效)

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo sysctl -w net.ipv4.ip_forward=1

[root@iZ2zec9fdba7bqcn5jzugjZ ~]# sudo sed -i ‘s/^net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/’ /etc/sysctl.conf

验证永久配置是否生效cat /etc/sysctl.conf | grep net.ipv4.ip_forward

正常输出:net.ipv4.ip_forward=1(若没有,重新执行一次 sudo sed -i ‘s/^net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/’ /etc/sysctl.conf 即可)

检查阿里云安全组的端口是否放开

再次访问 Web 面板:http://123.56.30.224:51821

宿主机安装我使用的是centos7原本的默认内核是kernel-3.10.0-957.el7.x86_64

因为不支持后面升级至kernel-lt-5.4.268-1.el7.elrepo.x86_64

但是kernel-lt-5.4.268-1.el7.elrepo.x86_64内核过于现代,而 ELRepo 提供的 kmod-wireguard 内核模块包是专门为 CentOS 7 的原生内核(3.10.x 版本)编译的,与当前的内核版本不匹配。

更换为官方推荐的 kernel-plus 内核

安装必要工具并启用 centosplus 仓库:

[root@localhost ~]# sudo yum install -y yum-utils epel-release

[root@localhost ~]# sudo yum-config-manager –setopt=centosplus.includepkgs=kernel-plus –enablerepo=centosplus –save

设置系统默认启动 kernel-plus 内核:

[root@localhost ~]# sudo sed -e ‘s/^DEFAULTKERNEL=kernel$/DEFAULTKERNEL=kernel-plus/’ -i /etc/sysconfig/kernel

安装 kernel-pluswireguard-tools

[root@localhost ~]# sudo yum install -y kernel-plus wireguard-tools

查看当前内核版本,应为 kernel-plus-3.10.0-1160.88.1.el7.centos.plus.x86_64

uname -r

检查 WireGuard 模块是否已加载

lsmod | grep wireguard

或者直接尝试加载(通常已经是内置或可加载状态)

sudo modprobe wireguard

kernel-plus 已正确安装

你已通过 rpm -qa | grep kernel 看到它存在,说明已安装。

再确认 /boot 中有对应文件:

Bash

编辑

ls /boot/vmlinuz-*plus*
ls /boot/initramfs-*plus*

查看 GRUB2 启动菜单项

运行以下命令列出所有启动项(按顺序编号):

Bash

编辑

grep -P "submenu|^menuentry" /boot/grub2/grub.cfg | cat -n

或更清晰的方式:

Bash

编辑

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg

设置默认启动项为 kernel-plus

假设 kernel-plus 对应编号是 1,执行:

Bash

编辑

sudo grub2-set-default 1

注意:编号从 0 开始,务必确认正确!

验证设置是否生效:

Bash

编辑

sudo grub2-editenv list

应显示:

Text

编辑

saved_entry=1

步骤 4:(可选)生成新的 GRUB 配置(通常不需要)

在大多数情况下,grub2-set-default 已足够。但如果你修改过 /etc/default/grub,可重建:

Bash

编辑

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

一般不建议手动改 grub.cfg,用 grub2-mkconfig 更安全。


步骤 5:重启并验证

Bash

编辑

sudo reboot

重启后登录,检查当前内核:

Bash

编辑

uname -r

正确输出应为:

Text

编辑

3.10.0-1160.88.1.el7.centos.plus.x86_64

安装加载内核wireguard模块

创建 wg0 网卡

[root@localhost ~]# sudo modprobe wireguard

[root@localhost ~]# lsmod | grep wireguard

[root@localhost ~]# sudo ip link add dev wg0 type wireguard

[root@localhost ~]# ip link show wg0

启动镜像

sudo docker run -d \

–name=wg-easy \

-e WG_HOST=183.94.57.23 \

-e PASSWORD_HASH=’$2a$12$HEflU6jBtDcJpgRW1ZWs8u0kfJu/JEaDWl5z4Zy42S8RwpeFtI3ra’ \

-e WG_DEFAULT_DNS=223.5.5.5 \

-e WG_INTERFACE=wg0 \

-v ~/wg-easy:/etc/wireguard \

-v /lib/modules:/lib/modules \

-p 0.0.0.0:51820:51820/udp \

-p 0.0.0.0:51821:51821/tcp \

–cap-add=NET_ADMIN \

–cap-add=SYS_MODULE \

–sysctl=”net.ipv4.conf.all.src_valid_mark=1″ \

–sysctl=”net.ipv4.ip_forward=1″ \

–privileged=true \

–restart unless-stopped \

ghcr.io/wg-easy/wg-easy

设置路由

配置路由,强制 wg0 流量走 em2

sudo ip route add default via 183.94.57.1 dev em2 table 100 #替换183.94.57.1为你的网关

sudo ip rule add from 10.8.0.0/24 table 100 # WireGuard内网段走em2

[root@localhost ~]# sudo ip route add default via 183.94.57.1 dev em2 table 100

[root@localhost ~]# sudo ip rule add from 10.8.0.0/24 table 100

[root@localhost ~]# sudo ss -tulnp | grep 51820

[root@localhost ~]# sudo docker exec -it wg-easy wg show

检查容器绑定的 IP:

[root@localhost ~]# sudo ss -tulnp | grep 51820

输出需包含:183.94.57.23:51820(而非 0.0.0.0:51820)

检查 wg0 隧道状态:

[root@localhost ~]# sudo docker exec -it wg-easy wg show

输出中 Endpoint 应为 183.94.57.23:51820

登录面板验证:

浏览器访问 http://183.94.57.23:51821,用密码 123456 登录,生成的客户端配置会自动指向 183.94.57.23。

如果无法登录需要检查

开启内核IP转发(确保NAT生效)

[root@localhost ~]# sudo sysctl -w net.ipv4.ip_forward=1

[root@localhost ~]# sudo sed -i ‘s/^net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/’ /etc/sysctl.conf

[root@localhost ~]# cat /etc/sysctl.conf | grep net.ipv4.ip_forward

再次浏览器访问 http://183.94.57.23:51821

无觅评论,优化体验,加强品牌价值