1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 在Docker中部署WireGuard VPN实现远程笔记备份
最近需要备份笔记,但不想购买额外服务器。计划将笔记保存在本地设备,由于设备不在同一局域网,决定搭建WireGuard VPN实现安全远程访问。

## WireGuard服务器部署

### Docker部署命令
```bash
docker run -d \
--name=wireguard \
--network host \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Etc/UTC \
-e SERVERURL=46.7.144.49 \ #自己的公网ip
-e SERVERPORT=51820 \ #端口
-e PEERS=my01,my02,my03,my04,my05 \
-e INTERNAL_SUBNET=10.13.13.0 \
-e ALLOWEDIPS=10.13.13.0/24 \
-e PERSISTENTKEEPALIVE_PEERS=all \
-e LOG_CONFS=true \
-v /home/docker/wireguard/config:/config \
-v /lib/modules:/lib/modules \
--restart unless-stopped \
lscr.io/linuxserver/wireguard:latest

参数说明

  • 网络模式: host模式使用宿主机网络栈
  • 权限设置: 添加网络管理和系统模块权限
  • 环境变量:
    • SERVERURL: VPN服务器公网IP
    • SERVERPORT: WireGuard监听端口(51820)
    • PEERS: 客户端配置名称(逗号分隔)
    • INTERNAL_SUBNET: VPN内网网段
    • ALLOWEDIPS: 允许访问的IP范围

客户端配置管理

1. 生成客户端配置二维码

扫描二维码快速添加配置到客户端:

1
docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done'

2. 查看详细配置信息

1
docker exec wireguard sh -c 'for d in /config/peer_*; do echo "===== $(basename $d) ====="; cat $d/*.conf; echo; done'

3. 检查运行状态

1
docker exec wireguard wg show

重要配置提醒

防火墙配置

云服务器需开放相应端口:

  • UDP 51820端口
  • 或根据实际使用的端口调整

客户端安装

以下我只针对Ubuntu24.04LTS安装进行解说

1
2
3
4
sudo apt install wireguard
sudo nano /etc/wireguard/wgo.conf
wg-quick up ~/wg0.conf #载入配置文件
(crontab -l 2>/dev/null; echo "@reboot /usr/bin/wg-quick up ~/wg0.conf") | crontab - #开机自启动

或者用docker compose安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3.8'  # 可选:移除此行以避免警告

services:
wireguard-client:
image: docker.1ms.run/linuxserver/wireguard:latest # 或 ghcr.mirror.nju.edu.cn/linuxserver/wireguard:latest
container_name: wireguard-client
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- /path/to/your/config:/config
- /lib/modules:/lib/modules
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
network_mode: bridge
restart: unless-stopped