wg-manager WireGuard 管理脚本
WireGuard 本身不难。
真正麻烦的是后面这些零碎事情:加一个手机、删一个旧设备、生成二维码、改配置、重载服务、看 peer 有没有握手。
手动改 wg0.conf 也不是不行,就是次数多了很烦。而且一不小心把私钥、公钥、AllowedIPs 写错,又得回去排。
所以我写了个 wg-manager.sh,目标很简单:把 WireGuard 常见运维动作包起来,别每次都从头敲。
适用场景
这个脚本适合个人 VPS 上的 WireGuard 小环境:
- 想快速添加、删除客户端。
- 想直接在终端里生成二维码给手机扫。
- 不想每次都手动改
wg0.conf。 - 希望通过菜单看状态、重载配置、导出客户端文件。
如果你已经有复杂的策略路由、多网卡、多出口环境,这个脚本不一定适合直接接管。
前置条件
默认按 Debian / Ubuntu 这类常见服务器环境写。使用前至少需要:
- 一台可以使用 root 权限的 Linux 服务器。
- 系统能正常安装 WireGuard 相关软件包。
- 防火墙或云厂商安全组放行 WireGuard 使用的 UDP 端口。
- 你知道自己要给客户端分配的大致网段。
最终效果
最后你可以直接运行:
1 | sudo ./wg-manager.sh |
然后通过菜单完成客户端增删、二维码查看、服务状态检查和配置重载。常用操作不用再反复翻命令。
这个脚本是干嘛的
wg-manager 是一个 Bash 脚本,主要用来管理 WireGuard 服务端和客户端。
它现在能做这些:
- 安装 WireGuard 服务端。
- 创建第一个客户端。
- 添加 / 删除客户端。
- 自动分配客户端 IP。
- 生成客户端配置文件。
- 在终端显示二维码,手机直接扫。
- 支持全局模式和简单分流模式。
- 查看服务状态和 peer 信息。
- 重建配置并重载。
- 卸载脚本管理的配置。
适合一台 Debian / Ubuntu 云服务器。
不适合那种已经有复杂 WireGuard 生产环境、策略路由一堆、分流规则特别细的场景。这个脚本不是来接管复杂网络的,主要是把普通人最常用的那套流程弄顺。
为什么要写菜单模式
一开始这种脚本通常都是命令行参数:
1 | sudo ./wg-manager.sh add-client iphone |
能用,但要记命令。
平时自己手动运维的时候,我更想直接看到菜单:
1 | sudo ./wg-manager.sh |
然后选:
1 | 1) 安装 WireGuard |
这样不用每次翻 README。
还有一个细节:菜单模式启动时会先检查是不是 root。
如果没用 sudo,直接退出。不要让人填了一堆东西,最后才提示权限不够。那种体验有点抽象。
获取脚本
如果仓库已经公开,可以直接克隆:
1 | git clone https://github.com/Kaurisss/wg-manager.git |
也可以只下载单文件:
1 | curl -fsSL -o wg-manager.sh https://raw.githubusercontent.com/Kaurisss/wg-manager/main/wg-manager.sh |
脚本建议放服务器上用。别在本地 Windows 上硬跑,这玩意本来就是给 Linux 服务器准备的。
菜单模式使用
最简单:
1 | sudo ./wg-manager.sh |
第一次用,选安装 WireGuard。
脚本会让你填这些东西:
- WireGuard 接口名,默认
wg0 - UDP 端口,默认
51820 - IPv4 网段,默认
10.66.66.0/24 - 是否启用 IPv6
- 客户端 DNS
- 第一个客户端名字
- 客户端模式:全局 / 分流
大部分直接回车用默认值就行。
装完之后会生成服务端配置,也会顺手生成第一个客户端配置。
如果装了 qrencode,还能直接在终端显示二维码。手机 WireGuard 客户端一扫就能导入,挺省事。
命令行模式
菜单适合人手动点。
但写文档、自动化、复制命令时,子命令还是要保留。
安装并创建第一个客户端:
1 | sudo ./wg-manager.sh install --client-name phone |
启用 IPv6:
1 | sudo ./wg-manager.sh install --enable-ipv6 --client-name phone |
自定义端口和网段:
1 | sudo ./wg-manager.sh install \ |
添加客户端:
1 | sudo ./wg-manager.sh add-client iphone |
显示二维码:
1 | sudo ./wg-manager.sh qr iphone |
查看状态:
1 | sudo ./wg-manager.sh status |
列出客户端:
1 | ./wg-manager.sh list-clients |
重载配置:
1 | sudo ./wg-manager.sh reload |
卸载:
1 | sudo ./wg-manager.sh uninstall --yes |
全局模式和分流模式
脚本里客户端有两种模式。
全局模式
全局模式就是客户端所有流量都走 WireGuard:
1 | AllowedIPs = 0.0.0.0/0,::/0 |
适合:
- 手机出门连回服务器。
- 想让所有流量都经过这台 VPS。
- 不想研究分流规则。
分流模式
分流模式就是只让指定网段走 WireGuard。
比如只走内网地址:
1 | sudo ./wg-manager.sh add-client office \ |
注意,这只是靠 AllowedIPs 做简单分流。
它不是智能分流,也不会自动识别游戏、网站、域名。你要是想做特别细的规则,那得上更复杂的方案。
生成的文件放哪
默认都在 /etc/wireguard/:
1 | /etc/wireguard/ |
这里面有私钥、PSK、客户端配置。
不要传 GitHub。
公开仓库里只放脚本、README、示例配置就行。真实配置文件传上去,基本就是自己给自己挖坑。
安全组和防火墙
脚本会尝试处理 UFW 和 firewalld,自动放行 WireGuard 的 UDP 端口。
但云服务器还有安全组。
这个脚本管不了云厂商控制台。
如果连不上,先看:
- 云服务器安全组有没有放行 UDP
51820 - 本机防火墙有没有拦
- 客户端里的 endpoint 是不是写错
- 服务端公网 IP 有没有变
sudo ./wg-manager.sh status里有没有握手
不要一连不上就怀疑脚本。
网络这东西很多时候不是配置没生成,是流量根本没进来。
排错顺序
我一般按这个顺序看:
1. 服务有没有起来
1 | sudo ./wg-manager.sh status |
或者:
1 | sudo systemctl status wg-quick@wg0 |
2. 客户端配置有没有生成
1 | ls -l /etc/wireguard/clients/ |
3. 二维码能不能扫
1 | sudo ./wg-manager.sh qr iphone |
4. peer 有没有握手
1 | sudo wg |
有 latest handshake 才说明客户端真的连上了。
没有握手就继续看端口、安全组、endpoint、公私钥。
已知限制
这个脚本不是万能的。
目前限制大概是:
- 只支持 Debian / Ubuntu。
- IPv4 网段只按
/24处理。 - IPv6 网段只按
/64处理。 - 默认用
iptables/ip6tables做 NAT。 - 不接管已有复杂 WireGuard 环境。
- 分流只是简单
AllowedIPs,不做智能规则。
这些限制不是 bug,是故意先控制范围。
脚本这种东西最怕一开始想包打天下,最后写成一坨没人敢跑的东西。
最后
wg-manager 不是为了替代 WireGuard 官方工具。
它只是把我经常要做的几件事包成一个脚本:安装、加客户端、删客户端、扫二维码、看状态、重载配置。
能少手改一次 wg0.conf,就少一次写错配置的机会。
先能稳定跑,再慢慢补功能。这个方向比较像人样。