# WireGuard VPN 详细操作手册

## 目录
1. [服务器端部署](#服务器端部署)
2. [客户端配置](#客户端配置)
3. [多客户端配置](#多客户端配置)
4. [性能优化](#性能优化)
5. [故障排查](#故障排查)

---

## 服务器端部署

### 1. 选择云服务商并创建实例

推荐选择：
- **Linode Toronto** ($5/月，1GB 内存)
- **DigitalOcean Toronto** ($6/月，1GB 内存)
- **Vultr Toronto** ($6/月，1GB 内存)

操作系统选择：**Ubuntu 22.04 LTS** 或 **Debian 12**

### 2. 初始服务器配置

#### 2.1 登录服务器
```bash
ssh root@your-server-ip
```

#### 2.2 更新系统
```bash
apt update && apt upgrade -y
```

#### 2.3 启用 BBR 拥塞控制（推荐）
```bash
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
```

#### 2.4 配置防火墙（UFW）
```bash
apt install ufw -y
ufw allow 22/tcp
ufw allow 51820/udp
ufw enable
```

### 3. 安装 WireGuard

#### 3.1 安装 WireGuard 软件包
```bash
apt install wireguard -y
```

#### 3.2 启用 IP 转发
```bash
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
```

### 4. 生成密钥

#### 4.1 创建密钥存储目录
```bash
mkdir -p /etc/wireguard/keys
cd /etc/wireguard/keys
```

#### 4.2 生成服务器密钥对
```bash
wg genkey | tee server_privatekey | wg pubkey > server_publickey
```

#### 4.3 生成客户端密钥对
```bash
wg genkey | tee client1_privatekey | wg pubkey > client1_publickey
```

#### 4.4 查看生成的密钥
```bash
echo "服务器私钥: $(cat server_privatekey)"
echo "服务器公钥: $(cat server_publickey)"
echo "客户端私钥: $(cat client1_privatekey)"
echo "客户端公钥: $(cat client1_publickey)"
```

**重要：请妥善保存这些密钥！**

### 5. 创建 WireGuard 配置文件

#### 5.1 创建服务器配置
```bash
nano /etc/wireguard/wg0.conf
```

配置内容（请替换为实际的密钥）：
```
[Interface]
PrivateKey = <这里填入服务器私钥>
Address = 10.0.0.1/24
ListenPort = 51820
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
SaveConfig = true

[Peer]
PublicKey = <这里填入客户端公钥>
AllowedIPs = 10.0.0.2/32
```

**注意：** 如果您的网络接口不是 `eth0`，请替换为实际接口名（可以用 `ip a` 查看）。

#### 5.2 设置配置文件权限
```bash
chmod 600 /etc/wireguard/wg0.conf
```

### 6. 启动 WireGuard 服务

#### 6.1 启动服务
```bash
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
```

#### 6.2 检查服务状态
```bash
systemctl status wg-quick@wg0
wg show
```

---

## 客户端配置

### Windows 客户端

1. 下载 WireGuard 客户端：https://www.wireguard.com/download/
2. 安装并打开 WireGuard
3. 点击 "Add Tunnel" -> "Add empty tunnel..."
4. 输入以下配置（替换为实际值）：

```
[Interface]
PrivateKey = <客户端私钥>
Address = 10.0.0.2/24
DNS = 8.8.8.8, 1.1.1.1

[Peer]
PublicKey = <服务器公钥>
Endpoint = <服务器IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
```

5. 保存并点击 "Activate"

### macOS 客户端

1. 从 Mac App Store 下载 WireGuard
2. 打开应用，点击 "+" 创建新隧道
3. 导入或粘贴配置文件（同 Windows 配置）
4. 点击 "Activate"

### Linux 客户端

```bash
# 安装 WireGuard
sudo apt install wireguard -y

# 创建配置文件
sudo nano /etc/wireguard/wg0.conf

# 粘贴配置（同 Windows）

# 启动
sudo wg-quick up wg0

# 设置开机自启
sudo systemctl enable wg-quick@wg0
```

### iOS 客户端

1. 从 App Store 下载 WireGuard
2. 可以通过扫描二维码或导入配置文件
3. 激活隧道

### Android 客户端

1. 从 Google Play 下载 WireGuard
2. 导入配置文件或扫描二维码
3. 激活隧道

---

## 多客户端配置

### 添加第二个客户端

1. 在服务器上生成第二组客户端密钥：
```bash
cd /etc/wireguard/keys
wg genkey | tee client2_privatekey | wg pubkey > client2_publickey
```

2. 添加到服务器配置：
```bash
wg set wg0 peer $(cat client2_publickey) allowed-ips 10.0.0.3/32
wg-quick save wg0
```

3. 创建第二个客户端配置（使用 10.0.0.3 作为地址）

---

## 性能优化

### 1. MTU 优化

在客户端配置中添加：
```
[Interface]
MTU = 1420
```

### 2. 使用更快的加密算法

WireGuard 默认使用的加密算法已经很快，通常不需要调整。

### 3. 服务器性能调优

创建 `/etc/sysctl.d/wireguard.conf`：
```
net.core.rmem_max = 2500000
net.core.wmem_max = 2500000
net.ipv4.tcp_rmem = 4096 87380 2500000
net.ipv4.tcp_wmem = 4096 65536 2500000
```

应用：
```bash
sysctl -p /etc/sysctl.d/wireguard.conf
```

---

## 故障排查

### 问题1：无法连接

- 检查服务器防火墙：`ufw status`
- 检查 WireGuard 是否运行：`systemctl status wg-quick@wg0`
- 查看 WireGuard 状态：`wg show`
- 验证密钥是否正确

### 问题2：连接成功但无法上网

- 检查 IP 转发是否启用：`sysctl net.ipv4.ip_forward`
- 检查 iptables 规则
- 验证 DNS 设置

### 问题3：速度慢

- 尝试优化 MTU 设置
- 启用 BBR（已在前面配置）
- 检查服务器资源使用：`top`
- 考虑更换更近的区域

### 查看日志
```bash
journalctl -u wg-quick@wg0 -f
```

---

## 安全加固建议

1. **禁用 SSH 密码登录，只使用密钥**
2. **更改 SSH 端口**
3. **安装 Fail2Ban**：`apt install fail2ban -y`
4. **定期更新系统**：`apt update && apt upgrade -y`
5. **使用非默认 WireGuard 端口**（修改 ListenPort）

---

*操作手册版本：1.0*
