【Linux】WG-Easy:基于 Docker 和 Web 面板的异地组网

WG-Easy:基于 Docker 和 Web 面板的异地组网

本教程将指导您使用 WireGuard Easy在具有公网 IP 的云服务器上搭建一个基于 Docker 的 WireGuard VPN 服务。通过此服务,不同设备可以通过该云服务器加入同一个虚拟内网,实现异地组网。项目提供了一个简单的 Web 管理界面,方便管理和配置。

准备工作

系统环境
  • 一台具有公网 IP 的云服务器(推荐 Ubuntu 20.04 或更高版本)。
  • 安装了 Docker 和 Docker Compose。
工具安装
  1. 更新系统:

    sudo apt update && sudo apt upgrade -y
    
  2. 安装 Docker:

    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
    
  3. 验证安装:

    docker --version
    

生成 bcrypt 哈希

以下是关于生成 bcrypt 哈希值(用于设置 Web 管理面板的登录密码)的正确教程及注意事项,参考了 wg-password (wgpw) 工具的官方说明。

使用 Docker 生成哈希:

运行以下命令执行(执行完毕自动销毁),替换 YOUR_PASSWORD 为您想设置的密码:

docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw YOUR_PASSWORD

示例

如果密码为 mypassword123,运行:

docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw wgpw mypassword123

输出结果

PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'

拉取并运行 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

在页面中,您可以:

  • 添加和删除设备。
  • 下载设备配置文件。
  • 管理网络设置。

客户端部署与运行

以下将介绍如何在 WindowsLinux 、 和 Android 上配置和运行 WireGuard 客户端。

Windows 客户端
安装 WireGuard
  1. 下载 WireGuard 客户端:

  2. 安装完成后,打开 WireGuard 应用。

导入配置
  1. 在云服务器上的 Web 管理面板中为 Windows 客户端生成配置文件(.conf)。
  2. 将配置文件下载到本地(通过邮箱、U盘或其他方式传输)。
  3. 在 WireGuard 应用中点击 Import tunnel(s) from file,选择下载的 .conf 文件。
  4. 点击 Activate 启动 WireGuard。
Linux 客户端
安装 WireGuard

WireGuard 已在大多数 Linux 发行版中内置。如果未安装,可以按以下步骤操作:

  1. 更新软件包:

    sudo apt update && sudo apt upgrade -y
    
  2. 安装 WireGuard:

    sudo apt install wireguard -y
    
配置 WireGuard
  1. 在 Web 管理面板中生成 Linux 客户端的配置文件(例如 client.conf)。

  2. 将配置文件传输到 Linux 设备:

    scp client.conf user@<linux-device-ip>:/etc/wireguard/
    
  3. 启动 WireGuard:

    sudo wg-quick up /etc/wireguard/client.conf
    
  4. 停止 WireGuard:

    sudo wg-quick down /etc/wireguard/client.conf
    
Android 客户端
安装 WireGuard
  1. 打开 Google Play Store。
  2. 搜索 WireGuard 并安装官方应用。
导入配置
  1. 在 Web 管理面板中生成 Android 客户端的配置二维码。
  2. 打开 WireGuard 应用,点击右下角的 +,选择 Scan QR Code
  3. 扫描生成的二维码后,配置将自动导入。
  4. 点击切换按钮启动 VPN。

典型配置场景

服务器配置

服务器配置通常用于管理多个客户端,需明确服务器私钥、监听端口和分配 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
按需修改的重点配置项
  1. Address

    • 服务器 :分配一个 /24 或更大的子网以支持多客户端,例如 10.8.0.1/24
    • 客户端 :分配一个唯一的 /32 地址,例如 10.8.0.2/32
  2. AllowedIPs

    • 客户端0.0.0.0/0 允许全流量通过 VPN;指定局域网范围(如 192.168.1.0/24)仅允许部分流量。
  3. Endpoint

    • 配置客户端时需要填写服务器的公网 IP 或域名以及端口。
  4. PersistentKeepalive

    • 建议设置为 25 秒,防止 NAT 路由器关闭连接。
  5. DNS

    • 可设置为公共 DNS(如 1.1.1.18.8.8.8),也可使用本地 DNS(如 192.168.1.1)。

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 界面的语言设置(支持:enuarutrnoplfrdecaeskovinlisptchschtitthhijasi)。

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 客户端的方法! ??

相关推荐
CC大煊1 小时前
【Linux】vi/vim 使用技巧
linux·运维·vim
cwtlw1 小时前
CSS学习记录11
前端·css·笔记·学习·其他
是十一月末1 小时前
Linux的基本功能和命令
linux·服务器·开发语言·数据库
曼陀罗1 小时前
import 一个js文件,报ts类型错误的解决思路
前端·typescript
暮已深1 小时前
【RTAB-Map+VINS-Fusion+euroc】(Ubuntu 20.04)三维稠密重建-实践笔记
linux·笔记·ubuntu
轻动琴弦1 小时前
nestjs+webpack打包成一个mainjs
前端·webpack·node.js
浮尘笔记1 小时前
在Ubuntu服务器上备份文件到自己的百度网盘
linux·服务器·ubuntu
m0_748236112 小时前
前端怎么预览pdf
前端·pdf
快乐牛牛不要困难2 小时前
前端将base64转pdf页面预览
前端
m0_748233642 小时前
Python Flask Web框架快速入门
前端·python·flask