本文目录导读:

- 检查配置文件语法
- 确认内核模块已加载
- 检查网络接口冲突
- 检查防火墙/NAT 规则冲突
- 检查 IP 地址或子网冲突
- 检查 DNS 配置(如果使用)
- 检查权限与 SELinux(Linux)
- 查看详细错误日志
- 特殊错误代码示例
- 通用修复脚本
针对 wg-quick up 报错的问题,通常与配置文件语法、内核模块、网络冲突或权限有关,以下是系统性的排查步骤和解决方案:
检查配置文件语法
最常见的错误是配置文件格式错误,使用 wg-quick 时,配置文件的 [Interface] 和 [Peer] 部分必须严格遵循格式。
常见错误:
- 缺少
[Interface]或[Peer]- 缩进错误(不应有缩进)
- 文件末尾有多余的空行或空格
- 私钥或公钥格式错误(应使用 base64 编码)
修复方法:
- 检查并修正配置文件(通常位于
/etc/wireguard/*.conf)。 - 使用
wg-quick strip <配置文件>命令检查语法(wg-quick strip wg0)。
确认内核模块已加载
WireGuard 需要内核模块支持,运行以下命令检查:
lsmod | grep wireguard
如果没有任何输出,加载模块:
modprobe wireguard
若提示 modprobe: FATAL: Module wireguard not found,说明内核不支持或未安装 WireGuard 内核模块,在 Ubuntu/Debian 上安装:
apt update && apt install wireguard-dkms wireguard-tools
在 CentOS/RHEL 上:
yum install epel-release && yum install wireguard-dkms wireguard-tools
检查网络接口冲突
如果之前启动过相同的接口(如 wg0)但未正常关闭,会导致冲突。
解决:
- 先关闭所有 WireGuard 接口:
wg-quick down wg0
- 或者直接删除接口:
ip link delete wg0
检查防火墙/NAT 规则冲突
WireGuard 使用 UDP 端口(默认 51820),如果该端口被占用或防火墙阻止,wg-quick up 可能报错。
解决:
- 确认端口未被占用:
ss -tulpn | grep 51820 - 临时关闭防火墙测试:
systemctl stop firewalld或ufw disable - 如需保留防火墙,添加规则:
iptables -A INPUT -p udp --dport 51820 -j ACCEPT ip6tables -A INPUT -p udp --dport 51820 -j ACCEPT
检查 IP 地址或子网冲突
[Interface] 中的 Address 不能与现有接口的地址冲突。
解决:
- 检查现有 IP:
ip addr - 修改配置文件中的
Address为未使用的子网,0.0.2/24。
检查 DNS 配置(如果使用)
如果配置了 DNS = ...,而系统未安装 resolvectl 或 systemd-resolved,wg-quick 会报错。
解决方法:
- 安装
systemd-resolved:apt install systemd-resolved - 或临时禁用 DNS 设置,注释掉
DNS = ...行。
检查权限与 SELinux(Linux)
- 以 root 用户运行
wg-quick up wg0。 - 检查 SELinux 是否阻止:
ausearch -m avc -ts recent | grep wg - 临时禁用 SELinux:
setenforce 0(永久修改需编辑/etc/selinux/config)。
查看详细错误日志
直接运行 wg-quick up wg0 时,通常会有错误输出,若输出不详细,可以:
- 使用
strace跟踪:strace -f wg-quick up wg0 2>&1 | grep -i error
- 查看系统日志:
journalctl -xe | grep wireguard
特殊错误代码示例
| 错误信息 | 可能原因 | 解决 |
|---|---|---|
Line 5: syntax error |
配置文件格式错误 | 检查缩进和空格 |
Unable to load module wireguard |
内核模块未安装 | 安装 wireguard-dkms |
Error: RTNETLINK answers: File exists |
接口地址冲突 | 删除冲突接口或修改地址 |
curl: (6) Could not resolve host |
DNS 配置错误 | 检查 DNS = 行 |
Operation not supported |
内核版本太低 | 升级内核或使用用户空间实现(性能差) |
通用修复脚本
如果以上都不行,可以尝试重新初始化:
# 删除所有 WireGuard 接口
for iface in $(ip link show | grep -oP 'wg\d+'); do
ip link delete "$iface"
done
# 重新加载模块
modprobe -r wireguard
modprobe wireguard
# 重启网络服务(谨慎,会中断连接)
systemctl restart systemd-networkd
最后建议: 始终以 root 身份运行,并使用 wg-quick up /path/to/config.conf 指定完整路径,避免当前目录问题。
如果问题依旧,请分享具体的错误信息(截图或完整输出),以便进一步分析。