# Debian 服务器部署 WireGuard VPN 完整指南
## 📋 目录
1. [前置准备](#前置准备)
2. [方案一:命令行部署(推荐)](#方案一命令行部署推荐)
3. [方案二:WG-Easy 图形化管理(强烈推荐)](#方案二wg-easy-图形化管理强烈推荐)
4. [客户端配置](#客户端配置)
5. [常见问题](#常见问题)
6. [安全建议](#安全建议)
---
## 前置准备
### 系统要求
- Debian 10/11/12
- root 权限或 sudo 权限
- 公网 IP 地址
- 开放 UDP 51820 端口
### 检查系统信息
```bash
# 查看系统版本
cat /etc/os-release
# 查看内核版本(WireGuard 需要内核 5.6+)
uname -r
# 查看网络接口名称
ip addr show
```
### 更新系统
```bash
sudo apt update && sudo apt upgrade -y
```
---
## 方案一:命令行部署(推荐)
### 步骤 1: 安装 WireGuard
```bash
# 安装 WireGuard
sudo apt install wireguard wireguard-tools resolvconf -y
# 验证安装
wg --version
```
### 步骤 2: 生成密钥对
```bash
# 创建配置目录
sudo mkdir -p /etc/wireguard
# 生成服务器密钥对
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
# 生成客户端密钥对
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
# 查看密钥(记录下来,后面要用)
echo "=== 服务器私钥 ==="
sudo cat /etc/wireguard/server_private.key
echo ""
echo "=== 服务器公钥 ==="
sudo cat /etc/wireguard/server_public.key
echo ""
echo "=== 客户端私钥 ==="
sudo cat /etc/wireguard/client_private.key
echo ""
echo "=== 客户端公钥 ==="
sudo cat /etc/wireguard/client_public.key
```
**⚠️ 重要:** 请妥善保存这些密钥!
### 步骤 3: 配置服务器
创建 WireGuard 配置文件:
```bash
sudo nano /etc/wireguard/wg0.conf
```
添加以下内容(**替换尖括号内的内容**):
```ini
[Interface]
# 服务器内网 IP 段
Address = 10.0.0.1/24
# 监听端口
ListenPort = 51820
# 服务器私钥(替换为上面生成的服务器私钥)
PrivateKey = <SERVER_PRIVATE_KEY>
# DNS 服务器
DNS = 8.8.8.8, 8.8.4.4
# 启动时执行的命令(配置防火墙规则)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 客户端配置
[Peer]
# 客户端公钥(替换为上面生成的客户端公钥)
PublicKey = <CLIENT_PUBLIC_KEY>
# 允许访问的 IP 范围
AllowedIPs = 10.0.0.2/32
# 保持连接(可选,防止 NAT 超时)
PersistentKeepalive = 25
```
**注意:**
- 将 `eth0` 替换为你的实际网卡名称(使用 `ip addr` 查看)
- 常见的网卡名称:`eth0`, `ens3`, `enp0s3` 等
### 步骤 4: 启用 IP 转发
```bash
# 编辑 sysctl 配置
sudo nano /etc/sysctl.conf
# 找到并取消注释这一行(如果没有就添加)
net.ipv4.ip_forward=1
# 应用配置
sudo sysctl -p
```
### 步骤 5: 设置文件权限
```bash
# 设置配置文件权限(只有 root 可读写)
sudo chmod 600 /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/server_private.key
sudo chmod 600 /etc/wireguard/client_private.key
```
### 步骤 6: 启动 WireGuard
```bash
# 启动 WireGuard 接口
sudo wg-quick up wg0
# 查看状态
sudo wg show
# 设置开机自启
sudo systemctl enable wg-quick@wg0
# 检查服务状态
sudo systemctl status wg-quick@wg0
```
### 步骤 7: 配置防火墙
#### 如果使用 UFW:
```bash
# 安装 UFW(如果还没安装)
sudo apt install ufw -y
# 允许 SSH(重要!避免把自己锁在外面)
sudo ufw allow 22/tcp
# 允许 WireGuard
sudo ufw allow 51820/udp
# 启用 UFW
sudo ufw enable
# 查看规则
sudo ufw status
```
#### 如果使用 iptables:
```bash
# 允许 WireGuard 端口
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
# 保存规则(Debian)
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
```
### 步骤 8: 测试连接
```bash
# 查看 WireGuard 接口
ip addr show wg0
# 查看路由表
ip route show
# 测试连通性
ping -c 4 10.0.0.1
```
---
## 方案二:WG-Easy 图形化管理(强烈推荐)
WG-Easy 提供了 Web 界面,可以方便地管理多个客户端。
### 步骤 1: 安装 Docker
```bash
# 安装 Docker
curl -fsSL https://get.docker.com | bash
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
docker --version
docker compose version
```
### 步骤 2: 创建 WG-Easy 配置
```bash
# 创建项目目录
mkdir -p ~/wireguard-easy
cd ~/wireguard-easy
# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: "3.8"
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
environment:
# 你的服务器公网 IP 或域名
- WG_HOST=你的服务器IP
# Web 管理界面密码(请修改为强密码)
- PASSWORD=你的管理密码
# WireGuard 监听端口
- WG_PORT=51820
# 客户端默认 IP 段
- WG_DEFAULT_ADDRESS=10.8.0.x
# DNS 服务器
- WG_DEFAULT_DNS=8.8.8.8,8.8.4.4
# 允许的 IP 范围(0.0.0.0/0 表示所有流量都走 VPN)
- WG_ALLOWED_IPS=0.0.0.0/0,::/0
# MTU(可选)
- WG_MTU=1420
volumes:
- ./wg-easy:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
EOF
```
**⚠️ 重要:** 修改以下配置:
- `WG_HOST` - 替换为你的服务器公网 IP
- `PASSWORD` - 设置一个强密码
### 步骤 3: 启动 WG-Easy
```bash
# 启动服务
docker compose up -d
# 查看日志
docker compose logs -f
# 查看运行状态
docker compose ps
```
### 步骤 4: 配置防火墙
```bash
# 允许 Web 管理界面端口
sudo ufw allow 51821/tcp
# 允许 WireGuard 端口
sudo ufw allow 51820/udp
```
### 步骤 5: 访问 Web 界面
在浏览器中访问:
```
http://你的服务器IP:51821
```
输入你设置的密码登录。
### 步骤 6: 创建客户端
1. 点击 "Add Client"
2. 输入客户端名称(如 "Phone", "Laptop")
3. 点击 "Create"
4. 下载配置文件或扫描二维码
---
## 客户端配置
### Windows 客户端
1. 下载 WireGuard:https://www.wireguard.com/install/
2. 安装后打开 WireGuard
3. 点击 "Import tunnel(s) from file"
4. 选择下载的 `.conf` 文件
5. 点击 "Activate"
### macOS 客户端
1. 从 App Store 下载 WireGuard
2. 导入配置文件
3. 激活连接
### Linux 客户端
```bash
# 安装 WireGuard
sudo apt install wireguard -y
# 创建配置文件
sudo nano /etc/wireguard/wg0.conf
# 粘贴从服务器下载的配置内容
# 启动
sudo wg-quick up wg0
```
### Android 客户端
1. 从 Google Play 下载 WireGuard
2. 点击右上角 "+"
3. 选择 "Create from file or archive"
4. 选择配置文件
5. 激活连接
### iOS 客户端
1. 从 App Store 下载 WireGuard
2. 点击 "+"
3. 选择 "Create from file, QR code, or paste"
4. 扫描二维码或导入文件
5. 激活连接
---
## 常见问题
### 1. 无法连接到 VPN
**检查清单:**
```bash
# 1. 检查 WireGuard 是否运行
sudo wg show
# 2. 检查端口是否开放
sudo ss -ulnp | grep 51820
# 3. 检查防火墙规则
sudo ufw status
# 或
sudo iptables -L -n
# 4. 检查 IP 转发是否启用
cat /proc/sys/net/ipv4/ip_forward
# 应该输出 1
# 5. 查看日志
sudo journalctl -u wg-quick@wg0 -f
# 或
docker compose logs -f # 如果使用 WG-Easy
```
### 2. 连接成功但无法上网
```bash
# 检查 NAT 规则
sudo iptables -t nat -L -n
# 确认网卡名称是否正确
ip addr show
# 编辑配置文件,确保 PostUp/PostDown 中的网卡名称正确
sudo nano /etc/wireguard/wg0.conf
```
### 3. 添加新客户端(命令行方式)
```bash
# 生成新的客户端密钥
wg genkey | tee client2_private.key | wg pubkey > client2_public.key
# 在服务器配置中添加新的 Peer
sudo nano /etc/wireguard/wg0.conf
# 添加以下内容:
[Peer]
PublicKey = <CLIENT2_PUBLIC_KEY>
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25
# 重启 WireGuard
sudo wg-quick down wg0
sudo wg-quick up wg0
```
### 4. 删除客户端
```bash
# 查看当前客户端
sudo wg show
# 删除指定客户端
sudo wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
# 重启服务
sudo wg-quick down wg0
sudo wg-quick up wg0
```
### 5. 修改服务器配置
```bash
# 编辑配置
sudo nano /etc/wireguard/wg0.conf
# 重启服务
sudo wg-quick down wg0
sudo wg-quick up wg0
# 或者重新加载(不中断现有连接)
sudo wg syncconf wg0 <(wg-quick strip wg0)
```
### 6. 备份和恢复
```bash
# 备份配置
sudo cp -r /etc/wireguard /etc/wireguard.backup
# 恢复配置
sudo cp -r /etc/wireguard.backup/* /etc/wireguard/
sudo wg-quick down wg0
sudo wg-quick up wg0
```
### 7. 查看连接统计
```bash
# 查看所有客户端的连接状态
sudo wg show
# 实时监控
watch -n 1 'sudo wg show'
```
---
## 安全建议
### 1. 保护私钥
```bash
# 确保私钥文件权限正确
sudo chmod 600 /etc/wireguard/*.key
sudo chown root:root /etc/wireguard/*.key
```
### 2. 使用强密码
- WG-Easy 管理密码至少 12 位
- 包含大小写字母、数字、特殊字符
### 3. 定期更新
```bash
# 更新系统和 WireGuard
sudo apt update && sudo apt upgrade -y
# 重启服务
sudo systemctl restart wg-quick@wg0
```
### 4. 限制访问
```bash
# 只允许特定 IP 访问管理界面(如果使用 WG-Easy)
# 在防火墙中添加规则
sudo ufw allow from 你的IP to any port 51821
```
### 5. 监控日志
```bash
# 定期检查日志
sudo journalctl -u wg-quick@wg0 --since "1 hour ago"
# 或使用 WG-Easy 的 Web 界面查看
```
### 6. 禁用不必要的服务
```bash
# 如果不需要 IPv6,可以禁用
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
```
---
## 性能优化
### 1. 调整 MTU
```bash
# 在配置文件中添加
[Interface]
MTU = 1420
```
### 2. 使用更快的 DNS
```bash
# 使用 Cloudflare DNS
DNS = 1.1.1.1, 1.0.0.1
# 或使用阿里云 DNS
DNS = 223.5.5.5, 223.6.6.6
```
### 3. 启用持久连接
```bash
# 在客户端配置中添加
PersistentKeepalive = 25
```
---
## 卸载 WireGuard
### 命令行方式
```bash
# 停止服务
sudo wg-quick down wg0
sudo systemctl disable wg-quick@wg0
# 卸载软件
sudo apt remove --purge wireguard wireguard-tools -y
# 删除配置
sudo rm -rf /etc/wireguard
# 清理防火墙规则
sudo iptables -F
sudo iptables -t nat -F
```
### WG-Easy 方式
```bash
cd ~/wireguard-easy
# 停止并删除容器
docker compose down
# 删除数据
rm -rf ~/wireguard-easy
# 删除 Docker 镜像
docker rmi ghcr.io/wg-easy/wg-easy
```
---
## 参考资源
- WireGuard 官网:https://www.wireguard.com/
- WG-Easy GitHub:https://github.com/wg-easy/wg-easy
- WireGuard 文档:https://www.wireguard.com/quickstart/
---
## 故障排除速查表
| 问题 | 可能原因 | 解决方案 |
|------|---------|---------|
| 无法连接 | 防火墙阻止 | 检查 UFW/iptables 规则 |
| 连接后无网络 | NAT 配置错误 | 检查 PostUp/PostDown 中的网卡名称 |
| 速度慢 | MTU 设置不当 | 调整为 1420 或更小 |
| 频繁断线 | NAT 超时 | 添加 PersistentKeepalive = 25 |
| 无法启动 | 端口被占用 | 更改 ListenPort |
---
**最后更新:** 2026年4月18日
**适用系统:** Debian 10/11/12
**WireGuard 版本:** 最新稳定版
如何更改 WireGuard 端口
方案一:命令行部署方式
1. 修改配置文件
bash
sudo nano /etc/wireguard/wg0.conf
找到 ListenPort 这一行,修改为你想要的端口(例如 443、8080、12345 等):
ini
[Interface]
Address = 10.0.0.1/24
ListenPort = 443 # 改为你想要的端口
PrivateKey = <SERVER_PRIVATE_KEY>
2. 更新防火墙规则
如果使用 UFW:
bash
# 删除旧端口规则
sudo ufw delete allow 51820/udp
# 添加新端口规则(以 443 为例)
sudo ufw allow 443/udp
如果使用 iptables:
bash
# 删除旧规则
sudo iptables -D INPUT -p udp --dport 51820 -j ACCEPT
# 添加新规则
sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT
# 保存规则
sudo netfilter-persistent save
3. 重启 WireGuard
bash
sudo wg-quick down wg0
sudo wg-quick up wg0
4. 更新客户端配置
在所有客户端的配置文件中,修改 Endpoint 的端口号:
ini
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = 你的服务器IP:443 # 修改这里的端口
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
方案二:WG-Easy 方式
1. 修改 docker-compose.yml
bash
cd ~/wireguard-easy
nano docker-compose.yml
修改两处端口配置:
yaml
environment:
- WG_HOST=你的服务器IP
- PASSWORD=你的密码
- WG_PORT=443 # ← 修改这里(WireGuard 监听端口)
ports:
- "443:443/udp" # ← 修改这里(外部映射端口)
- "51821:51821/tcp" # Web 管理界面端口保持不变
2. 重启服务
bash
docker compose down
docker compose up -d
3. 更新客户端
在 WG-Easy Web 界面中:
删除旧的客户端配置
重新创建客户端(会自动使用新端口)
或者手动编辑现有客户端,修改 Endpoint 端口
💡 推荐的端口选择
常用替代端口
端口 优点 缺点
443 HTTPS 标准端口,不易被封锁 可能与 Web 服务器冲突
8080 常用代理端口 可能被识别
1194 OpenVPN 默认端口 容易被识别为 VPN
随机高位端口
(如 10000-65535) 隐蔽性好 需要记住端口号
最佳实践
bash
# 选择一个不常见的高位端口(推荐)
ListenPort = 23456
# 或使用 443(如果服务器没有运行 HTTPS)
ListenPort = 443
⚠️ 注意事项
1. 确保端口未被占用
bash
# 检查端口是否被占用
sudo ss -ulnp | grep <端口号>
# 或
sudo netstat -ulnp | grep <端口号>
如果端口已被占用,需要先停止占用该端口的服务。
2. 云服务器安全组
如果你使用的是云服务器(阿里云、腾讯云、AWS 等),必须在控制台的安全组中开放新端口:
登录云服务商控制台
找到安全组/防火墙设置
添加入站规则:
协议:UDP
端口:你设置的新端口
源:0.0.0.0/0(或指定 IP)
3. 客户端必须同步更新
重要: 服务器端口改变后,所有客户端配置中的 Endpoint 都必须更新,否则无法连接。
4. 避免使用特权端口
端口 1-1023 是特权端口,需要 root 权限
WireGuard 通常以 root 运行,所以可以使用
但建议使用 1024 以上的端口,避免冲突
🔧 完整示例:将端口改为 443
命令行方式
bash
# 1. 修改配置
sudo nano /etc/wireguard/wg0.conf
# 将 ListenPort = 51820 改为 ListenPort = 443
# 2. 更新防火墙
sudo ufw delete allow 51820/udp
sudo ufw allow 443/udp
# 3. 重启服务
sudo wg-quick down wg0
sudo wg-quick up wg0
# 4. 验证
sudo wg show
# 应该显示:listening port: 443
WG-Easy 方式
yaml
# docker-compose.yml
environment:
- WG_PORT=443
ports:
- "443:443/udp"
- "51821:51821/tcp"
bash
docker compose down
docker compose up -d
📝 总结
✅ 可以随意更换端口
✅ 建议选择 1024-65535 之间的端口
✅ 推荐使用不常见的高位端口或 443
⚠️ 修改后必须更新防火墙和安全组
⚠️ 所有客户端配置都需要同步更新
部署 WireGuard VPN 完整指南
登录后即可发表评论
还没有评论,快来发表第一条吧!