阿里云部署:
下载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-plus 和 wireguard-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