Debian 11 下 WireGuard 服务端与客户端的全流程配置指南
1. 环境准备与基础概念在开始配置之前我们先来理解几个关键点。WireGuard是一种新型的虚拟专用网络技术它比传统方案更轻量、更快速。想象一下就像在两个房子之间挖了一条专属隧道只有持有正确钥匙的人才能进出。Debian 11作为稳定的Linux发行版是搭建这类服务的理想选择。我建议使用全新的Debian 11系统来避免软件冲突。实际操作中遇到过不少因为系统残留配置导致的问题特别是之前安装过其他网络工具的机器。先用这个命令检查系统版本lsb_release -a你会看到类似Debian GNU/Linux 11 (bullseye)的输出。如果还是旧版本建议先升级系统。接着更新软件源这个步骤我每次都会做两遍因为遇到过缓存未刷新的情况sudo apt update sudo apt upgrade -y需要准备的软件包比想象中要少主要就是WireGuard本身和必要的工具链。这里有个小技巧先安装vim而不是nano因为后续编辑配置文件时vim的语法高亮能帮大忙sudo apt install vim wireguard resolvconf -y2. 服务端核心配置实战2.1 密钥生成与管理密钥是WireGuard安全的核心我习惯在/etc/wireguard目录下操作这里有个细节很多人会忽略 - umask设置。它确保生成的密钥文件权限是600避免私钥泄露sudo -i cd /etc/wireguard umask 077 wg genkey | tee privatekey | wg pubkey publickey生成的私钥看起来像一串乱码比如cJPJ7pJ7zJ7pJ7zJ7pJ7zJ7pJ7zJ7pJ7zJ7pJ7zJ7pJ。公钥则稍短些。建议把它们复制到安全的地方我遇到过服务器宕机导致密钥丢失的情况。2.2 配置文件详解配置文件wg0.conf是整套系统的灵魂这里分享几个实测有效的优化参数。先创建基础配置vim /etc/wireguard/wg0.conf关键配置项解析Address使用10.0.0.1/24这类私有IP段ListenPort推荐在40000-50000之间选端口MTU移动设备建议设1420避免分片PersistentKeepaliveNAT后设备需要设25秒完整配置示例[Interface] Address 10.0.0.1/24 ListenPort 45678 PrivateKey 你的私钥 MTU 1420 PostUp iptables -A FORWARD -i wg0 -j ACCEPT PostUp iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown iptables -D FORWARD -i wg0 -j ACCEPT PostDown iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE2.3 防火墙与系统服务UFW防火墙需要放行WireGuard端口这里有个坑Debian 11默认的iptables版本可能与UFW有冲突。建议先用status确认防火墙状态sudo ufw status sudo ufw allow 45678/udp启动服务时遇到过服务名混淆的问题正确的姿势是sudo systemctl enable --now wg-quickwg0检查状态时这三个命令组合使用最靠谱sudo systemctl status wg-quickwg0 sudo wg show ip addr show wg03. 客户端配置技巧3.1 多平台通用配置虽然我们以Debian为例但客户端配置其实跨平台通用。Windows/Mac/iOS/Android都适用类似的配置逻辑。客户端也需要生成密钥对wg genkey | tee privatekey | wg pubkey publickey客户端的配置文件有个关键区别需要指定DNS。我推荐用Cloudflare的1.1.1.1比Google的8.8.8.8延迟更低[Interface] PrivateKey 客户端私钥 Address 10.0.0.2/24 DNS 1.1.1.1 [Peer] PublicKey 服务端公钥 AllowedIPs 0.0.0.0/0 Endpoint 服务器IP:45678 PersistentKeepalive 253.2 移动端特殊处理手机客户端使用时有个常见问题切换网络会断连。解决方案是在配置里加上PersistentKeepalive 25Android用户建议使用官方的WireGuard应用比第三方客户端稳定得多。iOS端有个技巧在设置里关闭按需连接可以避免系统自动断开。4. 服务端与客户端联调4.1 双向认证配置很多教程漏掉了这个关键步骤服务端需要注册客户端公钥。先停止服务sudo wg-quick down wg0然后在服务端配置添加[Peer] PublicKey 客户端公钥 AllowedIPs 10.0.0.2/32重启服务后用这个命令检查连接状态sudo wg show应该能看到latest handshake时间戳。如果显示0说明连接有问题。4.2 网络连通性测试我习惯用这套组合拳测试ping测试基础连通性traceroute检查路由curl测试DNS解析具体命令ping 10.0.0.1 traceroute -n 8.8.8.8 curl -v https://example.com遇到连接问题时先检查服务端日志journalctl -u wg-quickwg0 -f5. 高级优化与排错5.1 性能调优参数在/etc/sysctl.conf中添加这些参数可以提升吞吐量net.core.rmem_max 2500000 net.core.wmem_max 2500000 net.ipv4.ip_forward 1应用配置sudo sysctl -p5.2 常见问题解决方案问题1握手失败检查两端时间是否同步确认防火墙放行了UDP端口验证密钥是否匹配问题2能ping通但无法上网检查服务端iptables规则确认AllowedIPs设置正确测试DNS解析是否正常问题3速度慢尝试调整MTU值检查CPU使用率测试不同加密算法最后提醒一点WireGuard默认不记录日志需要调试时可以临时启用sudo wg set wg0 log-levelverbose