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]
# 服务器内网 IP(VPN 网段)
Address = 10.0.0.1/24
# 监听端口
ListenPort = 51820
# 服务器私钥
PrivateKey = <server_private_key>
# 可选:保存配置后自动启用
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# 客户端 1
[Peer]
PublicKey = <client1_public_key>
# 可选:限制客户端 IP
AllowedIPs = 10.0.0.2/32

# 客户端 2
[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
# 允许 WireGuard 端口
iptables -A INPUT -p udp --dport 51820 -j ACCEPT

# 配置 NAT 转发
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]
# 客户端 VPN IP
Address = 10.0.0.2/24
# 客户端私钥
PrivateKey = <client_private_key>
# DNS 服务器(可选,使用内网 DNS 或公共 DNS)
DNS = 8.8.8.8,1.1.1.1

[Peer]
# 服务器公钥
PublicKey = <server_public_key>
# 服务器公网 IP 和端口
Endpoint = <server_public_ip>:51820
# 通过 VPN 访问的网段(0.0.0.0/0 表示所有流量走 VPN)
AllowedIPs = 0.0.0.0/0
# 保持连接(NAT 穿透)
PersistentKeepalive = 25

4.3 启动客户端

1
2
3
4
5
6
7
8
9
10
# Linux
wg-quick up wg0

# macOS (使用 Homebrew)
brew install wireguard-tools
wg-quick up wg0

# Windows
# 下载官方客户端:https://www.wireguard.com/install/
# 导入配置文件后启用

五、高级配置

5.1 多客户端管理

为每个客户端生成独立密钥对,并在服务端配置中添加对应的 [Peer] 段:

1
2
3
4
# 批量生成 10 个客户端密钥
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
# 仅默认路由走 VPN
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
# 检查 IP 转发
cat /proc/sys/net/ipv4/ip_forward

# 检查 NAT 规则
iptables -t nat -L -n -v

# 检查客户端 DNS
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(避免分片)
# 在 Interface 段添加
MTU = 1420

# 使用更快的加密算法(WireGuard 默认已优化)
# 确保 CPU 支持 AES-NI
cat /proc/cpuinfo | grep aes

七、安全建议

  1. 定期轮换密钥:建议每 3-6 个月更换一次密钥对
  2. 限制 AllowedIPs:仅允许必要的 IP 地址
  3. 使用防火墙:仅开放必要端口
  4. 监控连接:定期检查异常连接
  5. 日志审计:启用并定期审查日志

八、总结

WireGuard 以其简洁高效的特点,成为现代 VPN 部署的首选方案。通过本文的配置指南,您可以快速搭建安全可靠的 VPN 服务,实现远程访问、站点互联等场景。

关键要点:

  • 密钥管理是安全的核心
  • 防火墙和 NAT 配置必不可少
  • 合理设置 AllowedIPs 实现流量控制
  • 定期维护和监控确保服务稳定

参考文档: