WireGuard:内网穿透组网
WireGuard 是一种现代的 VPN (虚拟私人网络) 协议。与传统的 VPN 协议相比,WireGuard 提供了更高的安全性和更快的速度,因此在家庭和企业用户中越来越受欢迎。通过使用 WireGuard,用户可以安全地连接和管理位于不同地理位置的网络设备,并保护数据传输不被外部访问和监控。
在一些不支持原生 WireGuard 的设备上,如某些 NAS 设备,配置和管理 WireGuard 可能会比较复杂。为了简化这一过程,我们可以在 NAS 上部署 Docker wg-easy ,它可以使 WireGuard 配置和管理更加简便。
部署步骤
1. 部署 WireGuard 服务端
推荐通过 Docker Compose 部署 Wireguard,详情请见 Docker Compose 部署教程。以下是 Docker Compose 配置示例:
version: "3.8"
# https://github.com/wg-easy/wg-easy/blob/master/docker-compose.yml
services:
wg-easy:
environment:
# Change Language:
# (Supports: en, ua, ru, tr, no, pl, fr, de, ca, es, ko, vi, nl, is, pt, chs, cht, it, th, hi)
- LANG=chs
# ⚠️ Required:
# Change this to your host's public address
- WG_HOST=xxx.newzone.top
# Optional:
# When set, requires a password when logging in to the Web UI.
# needs double $$, hash of 'foobar123'; see "[How_to_generate_an_bcrypt_hash.md](https://github.com/wg-easy/wg-easy/blob/master/How_to_generate_an_bcrypt_hash.md)" for generate the hash
- PASSWORD_HASH=$$2a$$12$$JEqX/UUGgqiqAQry3hjw0.PZq5scC0DDTPLJ6lKtXRifps7ZuZnuW
# - PORT=51821
# 更改外网端口,避免后期被识别(默认 51820)
- WG_PORT=57899
# - WG_DEFAULT_ADDRESS=10.8.0.x
# - WG_DEFAULT_DNS=1.1.1.1
# - WG_MTU=1420
# - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
# - WG_PERSISTENT_KEEPALIVE=25
# - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
# - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
# - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
# - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
# - UI_TRAFFIC_STATS=true
# - UI_CHART_TYPE=0 # (0 Charts disabled, 1 # Line chart, 2 # Area chart, 3 # Bar chart)
# - WG_ENABLE_ONE_TIME_LINKS=true
# - UI_ENABLE_SORT_CLIENTS=true
# - WG_ENABLE_EXPIRES_TIME=true
# - ENABLE_PROMETHEUS_METRICS=false
# - PROMETHEUS_METRICS_PASSWORD=$$2a$$12$$vkvKpeEAHD78gasyawIod.1leBMKg8sBwKW.pQyNsq78bXV3INf2G # (needs double $$, hash of 'prometheus_password'; see "How_to_generate_an_bcrypt_hash.md" for generate the hash)
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
volumes:
- /volume1/docker/wireguard:/etc/wireguard
ports:
- "57899:57899/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
# - NET_RAW # ⚠️ Uncomment if using Podman
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
2. 设置端口转发
由于许多路由器默认会关闭大部分端口,需要对 WireGuard 进行端口转发。根据上述配置,我们设置外网端口为 57899,并将 WAN 接口的 57899 端口转发至 NAS 的 57899 端口。
3. 解决群晖等设备的问题
群晖等设备默认不支持 WireGuard,可能会出现如下错误:
Error: WireGuard exited with the error: Cannot find device "wg0"
This usually means that your host's kernel does not support WireGuard!
为了解决这个问题,我们可以在 NAS 上安装第三方提供的 WireGuard 组件(比如矿神),并执行以下命令修复 SSH 的问题:
sudo sed -i 's/package/root/g' /var/packages/WireGuard/conf/privilege
使用问题
生成 PASSWORD_HASH
在最近的更新中,Wireguard 不再支持直接在配置文件中使用 password
配置项。如果你之前的 Wireguard 配置文件中使用了 password
,你需要将其迁移为 PASSWORD_HASH
才能继续使用。
使用以下命令生成符合 Wireguard 要求的 PASSWORD_HASH
:
docker run -it ghcr.io/wg-easy/wg-easy wgpw 'YOUR_PASSWORD'
其中,YOUR_PASSWORD
是你希望设置的密码。运行该命令后,系统会生成一个 PASSWORD_HASH
。例如,模拟输出如下:
PASSWORD_HASH='$2a$12$JEqX/UUGgqiqAQry3hjw0.PZq5scC0DDTPLJ6lKtXRifps7ZuZnuW'
需要注意的是,生成的 PASSWORD_HASH
不能直接使用在 docker-compose.yml
文件中。为了让它在 docker-compose.yml
文件中正常工作,你需要将每个 $
符号替换为两个 $$
符号。例如,假设生成的 PASSWORD_HASH
是 $2a$12$JEqX/UUGgqiqAQry3hjw0.PZq5scC0DDTPLJ6lKtXRifps7ZuZnuW
,则在 docker-compose.yml
文件中应如下配置:
- PASSWORD_HASH=$$2a$$12$$JEqX/UUGgqiqAQry3hjw0.PZq5scC0DDTPLJ6lKtXRifps7ZuZnuW
- 0
- 0
- 0
- 0
- 0