【Linux】WG-Easy:基于 Docker 和 Web 面板的异地组网
本教程将指导您使用 WireGuard Easy在具有公网 IP 的云服务器上搭建一个基于 Docker 的 WireGuard VPN 服务。通过此服务,不同设备可以通过该云服务器加入同一个虚拟内网,实现异地组网。项目提供了一个简单的 Web 管理界面,方便管理和配置。
准备工作
系统环境
- 一台具有公网 IP 的云服务器(推荐 Ubuntu 20.04 或更高版本)。
- 安装了 Docker 和 Docker Compose。
工具安装
-
更新系统:
sudo apt update && sudo apt upgrade -y
-
安装 Docker:
curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
-
验证安装:
docker --version
生成 bcrypt 哈希
以下是关于生成 bcrypt 哈希值(用于设置 Web 管理面板的登录密码)的正确教程及注意事项,参考了 wg-password (wgpw) 工具的官方说明。
生成 bcrypt 哈希值的方法
使用 Docker 生成哈希
运行以下命令,替换 YOUR_PASSWORD
为您想设置的密码:
docker run -it ghcr.io/wg-easy/wg-easy wgpw YOUR_PASSWORD
示例:
如果密码为 mypassword123
,运行:
docker run -it ghcr.io/wg-easy/wg-easy wgpw mypassword123
输出结果:
PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'
如果未指定密码
如果您未直接提供密码,工具会提示您输入密码。运行以下命令:
docker run -it ghcr.io/wg-easy/wg-easy wgpw
系统会提示:
Enter your password: // 此提示为隐藏输入,您键入的密码不会显示
输入完成后,会生成类似以下的哈希值:
PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'
重要注意事项
-
正确使用引号
在命令行中生成哈希值时,确保使用单引号'
包裹输出值:echo '$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'
不要使用双引号
"
或省略引号。 -
避免直接暴露密码
在生产环境中,推荐通过安全方式(例如环境变量管理工具或密钥管理服务)存储并加载哈希值。
通过以上步骤,您即可安全地为 WireGuard Easy 的 Web 管理界面设置登录密码!
拉取并运行 WireGuard Easy
使用以下命令启动 WireGuard Easy:
docker run --detach \
--name wg-easy \
--env WG_HOST=<你的服务器公网 IP 或域名> \
--env PASSWORD_HASH='<管理员密码的 bcrypt 哈希>' \
--env WG_PORT=51820 \
--env PORT=51821 \
--volume ~/.wg-easy:/etc/wireguard \
--publish 51820:51820/udp \
--publish 51821:51821/tcp \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl 'net.ipv4.conf.all.src_valid_mark=1' \
--sysctl 'net.ipv4.ip_forward=1' \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
WG_HOST
:设置为云服务器的公网 IP 或动态域名。PASSWORD_HASH
:设置管理员 Web 面板登录密码的 bcrypt 哈希值(详见生成 bcrypt 哈希部分)。PORT
:设置 Web 管理界面的端口号(默认 51821)。WG_PORT
:设置 WireGuard 的监听端口(默认 51820)。--volume
:指定配置文件存储路径。--publish
:映射服务器端口到容器。--cap-add
和--sysctl
:确保容器具备必要的网络权限。
访问 Web 管理界面
启动后,Web 管理界面可通过以下地址访问:
http://<你的服务器 IP>:51821
在页面中,您可以:
- 添加和删除设备。
- 下载设备配置文件。
- 管理网络设置。
客户端部署与运行
以下将介绍如何在 Windows、Linux、 和 Android 上配置和运行 WireGuard 客户端。
Windows 客户端
安装 WireGuard
-
下载 WireGuard 客户端:
- 前往官网 WireGuard 官方下载页面。
- 下载适用于 Windows 的安装程序并安装。
-
安装完成后,打开 WireGuard 应用。
导入配置
- 在云服务器上的 Web 管理面板中为 Windows 客户端生成配置文件(
.conf
)。 - 将配置文件下载到本地(通过邮箱、U盘或其他方式传输)。
- 在 WireGuard 应用中点击
Import tunnel(s) from file
,选择下载的.conf
文件。 - 点击
Activate
启动 WireGuard。
Linux 客户端
安装 WireGuard
WireGuard 已在大多数 Linux 发行版中内置。如果未安装,可以按以下步骤操作:
-
更新软件包:
sudo apt update && sudo apt upgrade -y
-
安装 WireGuard:
sudo apt install wireguard -y
配置 WireGuard
-
在 Web 管理面板中生成 Linux 客户端的配置文件(例如
client.conf
)。 -
将配置文件传输到 Linux 设备:
scp client.conf user@<linux-device-ip>:/etc/wireguard/
-
启动 WireGuard:
sudo wg-quick up /etc/wireguard/client.conf
-
停止 WireGuard:
sudo wg-quick down /etc/wireguard/client.conf
Android 客户端
安装 WireGuard
- 打开 Google Play Store。
- 搜索 WireGuard 并安装官方应用。
导入配置
- 在 Web 管理面板中生成 Android 客户端的配置二维码。
- 打开 WireGuard 应用,点击右下角的
+
,选择Scan QR Code
。 - 扫描生成的二维码后,配置将自动导入。
- 点击切换按钮启动 VPN。
WG-Easy环境变量
以下是 WireGuard Easy 支持的环境变量配置选项的完整整理、翻译和讲解:
环境变量 | 默认值 | 示例值 | 描述 |
---|---|---|---|
PORT | 51821 | 6789 | Web 管理界面使用的 TCP 端口号。 |
WEBUI_HOST | 0.0.0.0 | localhost | Web 管理界面绑定的 IP 地址。如果需要仅在本地访问,可以设置为 localhost 。 |
PASSWORD_HASH | - | $2y$05$Ci... | Web 管理界面登录所需的密码 bcrypt 哈希值。具体生成方法见 How to generate a bcrypt hash.md 。 |
WG_HOST | - | vpn.myserver.com | VPN 服务器的公网主机名或 IP 地址。 |
WG_DEVICE | eth0 | ens6f0 | WireGuard 数据流量需要转发的以太网设备(网卡名称)。 |
WG_PORT | 51820 | 12345 | VPN 服务器监听的 UDP 端口号(WireGuard 默认使用 51820)。 |
WG_CONFIG_PORT | 51820 | 12345 | 用于 Home Assistant 插件的 UDP 端口号(同 WireGuard 端口)。 |
WG_MTU | null | 1420 | 客户端使用的 MTU 值。默认使用 WireGuard 的 MTU 设置。 |
WG_PERSISTENT_KEEPALIVE | 0 | 25 | 连接保持时间(秒)。设置为 0 时不保持连接。 |
WG_DEFAULT_ADDRESS | 10.8.0.x | 192.168.1.0/24 | 分配给客户端的虚拟内网 IP 地址范围。 |
WG_DEFAULT_DNS | 1.1.1.1 | 8.8.8.8, 8.8.4.4 | 客户端使用的 DNS 服务器地址。如果为空,客户端将不使用 DNS。 |
WG_ALLOWED_IPS | 0.0.0.0/0, ::/0 | 192.168.15.0/24, 10.0.1.0/24 | 客户端的流量允许访问的 IP 范围。默认允许访问所有 IP(0.0.0.0/0 和 ::/0 表示 IPv4 和 IPv6 的全局范围)。 |
WG_PRE_UP | ... | - | WireGuard 启动前执行的命令,默认值可查看 config.js 。 |
WG_POST_UP | ... | iptables ... | WireGuard 启动后执行的命令,默认值可查看 config.js 。 |
WG_PRE_DOWN | ... | - | WireGuard 停止前执行的命令,默认值可查看 config.js 。 |
WG_POST_DOWN | ... | iptables ... | WireGuard 停止后执行的命令,默认值可查看 config.js 。 |
WG_ENABLE_EXPIRES_TIME | false | true | 是否启用客户端过期时间设置(到期后客户端会失效)。 |
LANG | en | de | Web 界面的语言设置(支持:en 、ua 、ru 、tr 、no 、pl 、fr 、de 、ca 、es 、ko 、vi 、nl 、is 、pt 、chs 、cht 、it 、th 、hi 、ja 、si )。 |
UI_TRAFFIC_STATS | false | true | 是否在 Web 界面启用详细的 RX / TX 流量统计。 |
UI_CHART_TYPE | 0 | 1 | 图表显示类型:0 (禁用图表)、1 (折线图)、2 (面积图)、3 (柱状图)。 |
WG_ENABLE_ONE_TIME_LINKS | false | true | 是否启用短期下载链接(链接有效期为 5 分钟)。 |
MAX_AGE | 0 | 1440 | Web 界面会话的最长有效时间(分钟)。设置为 0 表示会话在浏览器关闭后失效。 |
UI_ENABLE_SORT_CLIENTS | false | true | 是否在 Web 界面中按名称排序客户端。 |
ENABLE_PROMETHEUS_METRICS | false | true | 是否启用 Prometheus 指标(指标地址为 http://0.0.0.0:51821/metrics )。 |
PROMETHEUS_METRICS_PASSWORD | - | $2y$05$Ci... | 为 Prometheus 指标设置 Basic Auth 密码(bcrypt 哈希)。 |
-
设置环境变量时,通过
-e KEY="VALUE"
参数传递,例如:docker run -e WG_HOST="vpn.myserver.com" -e WG_PORT="12345" ...
-
如果修改了
WG_PORT
,需确保对应的端口已在防火墙或云服务安全组中开放。
WireGuard配置文件
以下是 WireGuard 的配置文件(.conf
文件)中常见的配置项及其详细讲解,帮助用户根据需求进行修改:
示例配置文件
以下是一个典型的 WireGuard 配置文件示例:
[Interface]
PrivateKey = <服务器的私钥>
Address = 10.8.0.1/24
ListenPort = 51820
DNS = 1.1.1.1
[Peer]
PublicKey = <客户端的公钥>
AllowedIPs = 10.8.0.2/32
配置项解析
[Interface] 部分
[Interface]
定义了 WireGuard 节点的接口配置,通常是服务器或客户端的基本配置。
配置项 | 说明 | 示例值 |
---|---|---|
PrivateKey | 当前节点的私钥,使用 wg genkey 生成。这是一个敏感信息,不应与他人共享。 | ZXNkZmNkZmNkZmc... |
Address | 当前节点的虚拟内网 IP 地址。 格式为 <IP地址>/<子网掩码> ,例如 10.8.0.1/24 。子网掩码定义了可分配的客户端 IP 范围。 | 10.8.0.1/24 |
ListenPort | 当前节点监听的 UDP 端口,用于接收 WireGuard 流量。默认是 51820 ,可以根据需要更改,但需确保在防火墙中开放该端口。 | 51820 |
DNS | 客户端连接时使用的 DNS 服务器地址。如果设置为服务器端,所有客户端都将使用该 DNS。 | 1.1.1.1 , 8.8.8.8 |
[Peer] 部分
[Peer]
定义了与远程节点(客户端或其他服务器)通信的规则。每个 Peer 块代表一个对等节点的配置。
配置项 | 说明 | 示例值 |
---|---|---|
PublicKey | 对等节点的公钥,与对方的 PrivateKey 配套。通过交换公钥建立加密连接。 | ZXNkZmNkZmNkZmc... |
AllowedIPs | 定义从当前节点可以路由到对等节点的 IP 范围。 可以指定具体 IP( 10.8.0.2/32 )或子网范围(0.0.0.0/0 表示全流量)。 | 10.8.0.2/32 , 0.0.0.0/0 |
Endpoint | 对等节点的 IP 地址或域名以及其监听的端口号。对于客户端来说,这通常是服务器的公网 IP 和端口。 | vpn.myserver.com:51820 |
PersistentKeepalive | (可选)指定每隔多少秒向对等节点发送一个保持连接的数据包。对 NAT 网络或防火墙穿透有用。0 表示不启用。 | 25 |
典型配置场景
服务器配置
服务器配置通常用于管理多个客户端,需明确服务器私钥、监听端口和分配 IP 范围:
[Interface]
PrivateKey = <服务器的私钥>
Address = 10.8.0.1/24
ListenPort = 51820
DNS = 1.1.1.1
[Peer]
PublicKey = <客户端1的公钥>
AllowedIPs = 10.8.0.2/32
[Peer]
PublicKey = <客户端2的公钥>
AllowedIPs = 10.8.0.3/32
客户端配置
客户端需要定义自身的虚拟 IP、服务器的公网信息及加密公钥:
[Interface]
PrivateKey = <客户端的私钥>
Address = 10.8.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = <服务器的公钥>
Endpoint = <服务器的IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
按需修改的重点配置项
-
Address
:- 服务器:分配一个
/24
或更大的子网以支持多客户端,例如10.8.0.1/24
。 - 客户端:分配一个唯一的
/32
地址,例如10.8.0.2/32
。
- 服务器:分配一个
-
AllowedIPs
:- 客户端:
0.0.0.0/0
允许全流量通过 VPN;指定局域网范围(如192.168.1.0/24
)仅允许部分流量。
- 客户端:
-
Endpoint
:- 配置客户端时需要填写服务器的公网 IP 或域名以及端口。
-
PersistentKeepalive
:- 建议设置为
25
秒,防止 NAT 路由器关闭连接。
- 建议设置为
-
DNS
:- 可设置为公共 DNS(如
1.1.1.1
或8.8.8.8
),也可使用本地 DNS(如192.168.1.1
)。
- 可设置为公共 DNS(如
公私钥手动生成
要手动生成 WireGuard 的公钥和私钥,可以使用系统自带的工具 wg
,具体方法如下:
-
打开终端。
-
执行以下命令生成私钥:
wg genkey
输出示例:
3xZxScZ4slYXkJ4uAeZ8PS+f6xjYfwHV28m53ltYrFM=
将此值保存为 私钥(PrivateKey)。
-
使用生成的私钥生成对应的公钥:
echo '3xZxScZ4slYXkJ4uAeZ8PS+f6xjYfwHV28m53ltYrFM=' | wg pubkey
输出示例:
xsm8JZZbk4Ggrw48LbXDyCQdyczKTyhxSmxnB9tRmyI=
将此值保存为 公钥(PublicKey)。
保存到文件
为了方便管理,可以将私钥和公钥分别保存到文件:
wg genkey | tee privatekey | wg pubkey > publickey
privatekey
文件:包含私钥。publickey
文件:包含公钥。
总结
至此,您已经掌握了在不同系统下配置和运行 WireGuard 客户端的方法! 🎉
原文地址:https://blog.csdn.net/2303_80346267/article/details/143894528
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!