WireGuard是一款简单、现代且性能卓越的开源VPN工具,使用4000行代码就实现了完整的功能,设计精简,常常被称为下一代的VPN协议。其卓越的性能来自于下面几个方面:
- 极致的精简:代码量少,从而使得代码漏洞和攻击面少
- 内核级处理:运行在内核态。而非传统的用户空间方案,大福降低CPU负载和网络的开销延迟。
- 加密:提前协商加密方式,建立连接后立刻高速加密传输。
其应用场景有:
- 个人远程访问:在公共网络下,远程访问家庭和公司网络。
- 异地组网:将企业不同分支机构连接在同一个网络下。
- 站点到站点组网:连接多个办公地点的网络,使得不同地区的同时如同在一个办公室内工作。
- 保护云上通信:在kubernetes等容器集群中,加密Pod与节点之间的通信。
- 物联网IoT:对资源有限的嵌入式设备非常友好。
系统环境:Linux Rocky-Linux 4.18.0-553.89.1.el8_10.x86_64 #1 SMP Fri Dec 12 10:42:53 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
在 Rocky Linux 上通过容器化部署 WireGuard,主要依赖于 linuxserver/wireguard 这个广受信赖的基础镜像,它能很好地兼顾方便和灵活。这里为你梳理了两种主流方案,你可以根据自己的需求选择:
| 方案 | 核心特点 | 适用场景 | 代表项目/工具 |
|---|---|---|---|
| 基础部署 (无Web界面) | 极简、稳定、资源占用低,通过环境变量或配置文件管理 | 追求性能稳定,熟悉命令行,或需要深度自定义配置的用户 | linuxserver/wireguard |
| Web管理面板 | 提供图形化界面,支持动态添加客户端、监控连接、调整配置 | 希望简化管理,需要频繁增减用户或进行可视化管理的中小型团队或个人 | wg-easy, WGDashboard, Firefly |
核心部署步骤
1. 准备工作
- 安装 Docker 和 Docker Compose: 确保你的 Rocky Linux 系统已安装 Docker CE 和 Docker Compose 插件。
- 创建项目目录: 为 WireGuard 统一创建一个目录,用来存放配置和数据。例如:
sudo mkdir -p /opt/wireguard。
2. 开启系统网络转发功能
在部署之前,先在宿主机上开启IPv4转发,这是VPN流量能正常路由的基础:
# 开启 IP 转发
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf

你还可以通过sysctl net.ipv4.ip_forward确认设置生效(输出应为1)。
3. 选择部署方式
方案A:快速体验 - 通过 docker run 命令部署
这种方法适合快速测试。下面的命令会部署一个为 10 个客户端服务的 WireGuard 服务器:
sudo docker run -d \
--name=wireguard \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e SERVERURL=your_domain_or_ip \ # 替换为你的服务器公网 IP 或域名
-e SERVERPORT=51820 \
-e PEERS=10 \ # 需要的客户端配置文件数量
-e PEERDNS=auto \
-e INTERNAL_SUBNET=10.13.13.0 \
-p 51820:51820/udp \
-v /opt/wireguard/config:/config \
-v /lib/modules:/lib/modules:ro \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--restart unless-stopped \
ghcr.io/linuxserver/wireguard
这条命令在后台(-d)运行一个名为wireguard的容器,授予了其管理网络(NET_ADMIN)和加载内核模块(SYS_MODULE)的,并做了必要的配置。
方案B:推荐方式 - 使用 docker-compose 部署
这是更推荐的部署方式。创建一个 docker-compose.yml 文件,用声明式的方式管理配置,便于日后维护。
容器化部署允许使用任何不依赖 OpenSSL 的高性能加密算法(如 WireGuard 默认的 ChaCha20),完全符合你的性能要求,同时兼具容器化的便捷。
在项目目录 /opt/wireguard 下创建 docker-compose.yml 文件:
services:
wireguard:
image: ghcr.io/linuxserver/wireguard:latest
container_name: wireguard
cap_add:
- NET_ADMIN # 管理网络接口的必要权限
- SYS_MODULE # 加载 WireGuard 内核模块
environment:
- PUID=1000 # 容器内进程的用户ID,应与宿主机普通用户ID匹配
- PGID=1000 # 组ID
- TZ=Asia/Shanghai # 时区
- SERVERURL=vpn.example.com # 重要:替换为你的服务器公网 IP 或域名
- SERVERPORT=51820 # WireGuard 服务端口(UDP)
- PEERS=5 # 要创建的客户端配置文件数量(如:laptop, phone, etc.)
- PEERDNS=auto # 自动配置 DNS
- INTERNAL_SUBNET=10.13.13.0 # VPN 内部使用的虚拟网络地址
- ALLOWEDIPS=0.0.0.0/0 # 全部流量走 VPN(全隧道模式)
- LOG_CONFS=false # 生产环境建议设为 false,避免敏感信息泄露
volumes:
- ./config:/config # 存放配置文件的目录
- /lib/modules:/lib/modules:ro # 挂载宿主机内核模块,只读
ports:
- "51820:51820/udp" # 暴露 WireGuard UDP 服务端口
sysctls:
- net.ipv4.conf.all.src_valid_mark=1 # 启用策略路由
restart: unless-stopped # 容器退出后自动重启
配置完成后,在 docker-compose.yml 所在目录执行以下命令启动服务:
sudo docker compose up -d
说明:
image字段使用了我们熟悉的linuxserver/wireguard镜像,它是经过社区验证的稳定选择。cap_add部分为容器添加了必需的权限。- 配置文件会保存在你挂载的
./config目录下,查看即可获取客户端的.conf文件或二维码。
进阶体验 - 带 Web 管理面板的部署
如果希望有更直观的管理方式,可以选择 wg-easy 这类带 Web 面板的项目。它同样基于 Docker,部署非常便捷,非常适合需要经常管理客户端的场景。
关键注意事项与最佳实践
- 必需的权限与内核模块:由于 WireGuard 在内核空间工作,容器必须拥有
NET_ADMIN和SYS_MODULE权限,并挂载宿主机的/lib/modules目录,才能正确加载内核模块。 - 容器网络配置:通常使用
ports映射51820/udp即可。当遇到复杂的路由规则时,可考虑network_mode: host,但这样做会降低容器隔离性。 - 防火墙规则:务必在宿主机防火墙(如
firewalld)中放行 UDP 51820 端口(firewall-cmd --add-port=51820/udp --permanent),并确保云服务商的安全组策略也允许该端口的入站流量。 - 安全管理:建议将配置文件目录的权限设置为
700来保护私钥。同时应严格管理 Web 面板的访问,生产环境建议配置 HTTPS 反向代理。
📌 常见问题排查
- 客户端握手失败 (No Handshake)
故障排查可参考以下思路:- 防火墙拦截:首先确认服务器防火墙(
firewalld或云安全组)的 UDP 51820 端口已正确放行。 - 内核转发未开启:确认宿主机
net.ipv4.ip_forward已设为1(见准备步骤)。 - Endpoint 地址错误:客户端配置文件(
.conf)中的Endpoint = 你的服务器公网IP:51820必须填写正确。
- 防火墙拦截:首先确认服务器防火墙(
- 客户端能连接但无法访问任何网络
这通常是流量路由配置错误。- 检查服务器 NAT:服务器端的
wg0.conf需包含 NAT 规则(MASQUERADE),linuxserver/wireguard镜像在多数情况下会自动处理。 - 确认客户端 AllowedIPs:检查客户端的
AllowedIPs设置,若只访问内网则设为10.13.13.0/24;若需所有流量走 VPN,则设为0.0.0.0/0。
- 检查服务器 NAT:服务器端的

Comments NOTHING