WireGuard VPN 配置与管理实战
一、概述
WireGuard 是一款现代化的 VPN 协议,以其简洁的代码库、高性能和易配置性著称。相比 OpenVPN 和 IPsec,WireGuard 具有以下优势:
- 代码简洁:核心代码仅约 4000 行,易于审计
- 性能优异:基于 UDP,支持多队列,吞吐量更高
- 配置简单:无需复杂的证书管理,使用公钥/私钥对
- 连接快速:握手延迟低,重连速度快
本文将在 Linux 服务器上部署 WireGuard VPN,实现安全的远程访问。
二、环境准备
2.1 系统要求
- Linux 内核 5.6+(WireGuard 已并入主线内核)
- 或安装 wireguard-dkms 模块支持旧内核
- 服务器具有公网 IP 地址
2.2 安装 WireGuard
Ubuntu/Debian:
1 2
| sudo apt update sudo apt install wireguard wireguard-tools
|
CentOS/RHEL:
1 2
| sudo yum install epel-release sudo yum install kmod-wireguard wireguard-tools
|
检查内核模块:
1 2
| sudo modprobe wireguard lsmod | grep wireguard
|
三、服务端配置
3.1 生成密钥对
1 2 3 4 5 6 7 8 9
| cd /etc/wireguard umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
cat server_private.key cat server_public.key
|
3.2 配置服务器接口
创建配置文件 /etc/wireguard/wg0.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <server_private_key>
PostUp = iptables -A FORWARD -i %i -j ACCEPT PostDown = iptables -D FORWARD -i %i -j ACCEPT
[Peer] PublicKey = <client1_public_key>
AllowedIPs = 10.0.0.2/32
[Peer] PublicKey = <client2_public_key> AllowedIPs = 10.0.0.3/32
|
3.3 启用 IP 转发
1 2 3 4 5 6
| echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
|
3.4 配置防火墙
使用 iptables:
1 2 3 4 5 6 7 8
| iptables -A INPUT -p udp --dport 51820 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4
|
使用 firewalld (CentOS):
1 2 3
| firewall-cmd --permanent --add-port=51820/udp firewall-cmd --permanent --add-masquerade firewall-cmd --reload
|
3.5 启动 WireGuard 服务
1 2 3 4 5 6 7 8 9 10
| wg-quick up wg0
systemctl enable wg-quick@wg0 systemctl start wg-quick@wg0
systemctl status wg-quick@wg0 wg show
|
四、客户端配置
4.1 生成客户端密钥
在客户端机器上:
1 2 3
| cd /etc/wireguard umask 077 wg genkey | tee client_private.key | wg pubkey > client_public.key
|
4.2 配置客户端
创建 /etc/wireguard/wg0.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [Interface]
Address = 10.0.0.2/24
PrivateKey = <client_private_key>
DNS = 8.8.8.8,1.1.1.1
[Peer]
PublicKey = <server_public_key>
Endpoint = <server_public_ip>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
|
4.3 启动客户端
1 2 3 4 5 6 7 8 9 10
| wg-quick up wg0
brew install wireguard-tools wg-quick up wg0
|
五、高级配置
5.1 多客户端管理
为每个客户端生成独立密钥对,并在服务端配置中添加对应的 [Peer] 段:
1 2 3 4
| for i in {1..10}; do wg genkey | tee client${i}_private.key | wg pubkey > client${i}_public.key done
|
5.2 路由配置
仅特定网段走 VPN:
1 2
| AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
|
分流配置(国内直连,国外走 VPN):
1 2 3 4
| AllowedIPs = 0.0.0.0/0
|
5.3 监控与日志
1 2 3 4 5 6 7 8
| wg show wg0
watch -n 1 'wg show wg0 transfer'
journalctl -u wg-quick@wg0 -f
|
5.4 配置备份
1 2 3 4 5 6 7
| cp -r /etc/wireguard /backup/wireguard-$(date +%Y%m%d)
cp -r /backup/wireguard-20260309 /etc/wireguard wg-quick down wg0 wg-quick up wg0
|
六、故障排查
6.1 常见问题
无法连接:
1 2 3 4 5 6 7 8
| ss -ulnp | grep 51820
iptables -L -n -v | grep 51820
ip route show
|
连接但无法上网:
1 2 3 4 5 6 7 8
| cat /proc/sys/net/ipv4/ip_forward
iptables -t nat -L -n -v
cat /etc/resolv.conf
|
密钥不匹配:
1 2
| wg genkey | tee private.key | wg pubkey > public.key
|
6.2 性能优化
1 2 3 4 5 6 7
|
MTU = 1420
cat /proc/cpuinfo | grep aes
|
七、安全建议
- 定期轮换密钥:建议每 3-6 个月更换一次密钥对
- 限制 AllowedIPs:仅允许必要的 IP 地址
- 使用防火墙:仅开放必要端口
- 监控连接:定期检查异常连接
- 日志审计:启用并定期审查日志
八、总结
WireGuard 以其简洁高效的特点,成为现代 VPN 部署的首选方案。通过本文的配置指南,您可以快速搭建安全可靠的 VPN 服务,实现远程访问、站点互联等场景。
关键要点:
- 密钥管理是安全的核心
- 防火墙和 NAT 配置必不可少
- 合理设置 AllowedIPs 实现流量控制
- 定期维护和监控确保服务稳定
参考文档: