# 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
⚠️ 修改后必须更新防火墙和安全组
⚠️ 所有客户端配置都需要同步更新