Coralesoft/Openwrt-Wireguard-Installer
GitHub: Coralesoft/Openwrt-Wireguard-Installer
一个用于在 OpenWrt 路由器上交互式安装、配置和管理 WireGuard VPN 的自动化脚本套件。
Stars: 17 | Forks: 2
# OpenWrt WireGuard 交互式安装器
一套全面的脚本,用于在 OpenWrt 路由器上自动化 WireGuard VPN 的设置、管理和维护。
## 🚀 功能
- **自动化安装** - 通过交互式提示完成完整的 WireGuard 设置
- **自动安装软件包** - 自动检测并安装缺失的软件包
- **交互式 Peer 管理** - 用户友好的菜单界面,用于管理 peer
- **二维码生成** - 通过二维码即时完成移动设备设置
- **密钥轮换** - 以安全为核心的密钥轮换及备份功能
- **备份与回滚** - 自动备份配置并提供回滚选项
- **系统集成备份** - 将 WireGuard 添加到 OpenWrt 备份配置中
- **彻底卸载** - 包含预览(dry-run)功能的完全卸载工具
## 📦 包含的脚本
| 脚本 | 用途 | 版本 |
|--------|---------|---------|
| `wg-openwrt-installer.sh` | 主安装程序和初始 peer 设置 | 2026.4.2 |
| `wg-peer-manage.sh` | 交互式 peer 管理 | 2026.4.2 |
| `wg-key-rotate.sh` | 用于安全性的密钥轮换 | 2026.4.1 |
| `wg-uninstall.sh` | 彻底移除 WireGuard | 2025.11.2 |
## 🔧 前置条件
### OpenWrt 路由器要求
- OpenWrt 23.05 或更高版本
- 需要互联网连接以下载和安装软件包
- 同时支持 `apk`(OpenWrt 24.10+)和 `opkg`(旧版本)包管理器
### 必需的软件包
安装器会自动检测并提示安装以下软件包:
- `wireguard-tools` - WireGuard 命令行工具
- `kmod-wireguard` - WireGuard 内核模块
- `luci-proto-wireguard` - LuCI Web 界面集成
### 可选软件包
- `qrencode` - 为移动设备生成二维码
**注意:** 你不再需要手动安装软件包!安装器会自动为你处理。
## 📖 快速开始
### 1. 下载脚本
```
cd /root
wget https://raw.githubusercontent.com/Coralesoft/Openwrt-Wireguard-Installer/main/wg-openwrt-installer.sh
wget https://raw.githubusercontent.com/Coralesoft/Openwrt-Wireguard-Installer/main/wg-peer-manage.sh
wget https://raw.githubusercontent.com/Coralesoft/Openwrt-Wireguard-Installer/main/wg-key-rotate.sh
wget https://raw.githubusercontent.com/Coralesoft/Openwrt-Wireguard-Installer/main/wg-uninstall.sh
chmod +x wg-*.sh
```
### 2. 运行安装器
```
./wg-openwrt-installer.sh
```
安装器将会:
1. 检查缺失的软件包并提示进行安装
2. 通过实用的提示引导你完成配置
3. 生成服务器和 peer 的密钥
4. 配置网络和防火墙
5. 生成二维码以便于在移动设备上设置
6. 将 `/etc/wireguard` 添加到备份配置中
**交互式提示:**
- WireGuard 接口名称(默认:`wg0`)
- UDP 端口(默认:`51820`)
- VPN 子网(默认:`192.168.20.1/24`)
- 公共 endpoint(路由器的公网 IP/域名)
- LAN/WAN 区域名称
- 为 peer 提供 DNS 服务器
- 初始创建的 peer 数量
### 3. 管理 Peer(新功能!)
使用交互式 peer 管理工具:
```
./wg-peer-manage.sh
```
**交互式菜单:**
```
WireGuard Peer Management
════════════════════════════════════════
Interface: wg0
1. List all peers
2. Add new peer
3. Manage existing peer
4. Show traffic statistics
5. Show active connections
6. Restart WireGuard interface
7. Exit
Select option [1-7]: _
```
**功能:**
- 📋 列出带有编号和状态的 peer
- ➕ 添加新 peer 并自动分配 IP
- 🔧 启用/禁用 peer 而无需删除它们
- 🗑️ 删除 peer 并自动进行归档
- 📊 查看流量统计
- 🔍 显示 peer 详细信息并重新生成二维码
- 🔄 在需要时重启接口
**命令行模式(可脚本化):**
```
./wg-peer-manage.sh --list # List all peers
./wg-peer-manage.sh --add # Add new peer
./wg-peer-manage.sh --show=laptop # Show peer details + QR
./wg-peer-manage.sh --remove=old-phone # Remove peer
./wg-peer-manage.sh --disable=tablet # Temporarily disable
./wg-peer-manage.sh --enable=tablet # Re-enable
./wg-peer-manage.sh --traffic # Show bandwidth usage
./wg-peer-manage.sh --active # Show connected peers
./wg-peer-manage.sh --no-clear # Disable screen clearing
```
### 4. 配置 Peer 设备
添加 peer 后,配置文件可在以下位置找到:
```
/etc/wireguard/peers/
```
每个 peer 会获得:
- `.conf` 文件 - WireGuard 配置
- `-privatekey` - 该 peer 的私钥
- `-publickey` - 该 peer 的公钥
- `.png` - 二维码(如果安装了 qrencode)
#### 在移动设备上:
1. 安装 WireGuard 应用程序
2. 点击 "+" → "扫描二维码"
3. 扫描显示的二维码
4. 激活隧道
#### 在台式机/笔记本电脑上:
```
# 将 .conf 文件复制到 peer 设备,然后:
sudo cp peer.conf /etc/wireguard/wg0.conf
sudo wg-quick up wg0
# 开机启用(可选):
sudo systemctl enable wg-quick@wg0
```
## 🔑 密钥轮换
定期轮换密钥对安全至关重要。请使用内置的轮换脚本:
### 轮换所有内容(最高安全性)
```
./wg-key-rotate.sh --server --all-peers
```
### 轮换特定 Peer
```
./wg-key-rotate.sh --peer=laptop --peer=phone
```
### 仅轮换服务器密钥
```
./wg-key-rotate.sh --server
```
**重要注意事项:**
- 轮换服务器密钥后,所有 peer 必须更新其配置!
- 旧密钥会备份到 `/etc/wireguard/backup/`
- 新的 peer 配置和二维码会自动生成
- 脚本将提示重启网络接口
**选项:**
```
--server Rotate server keypair
--peer=NAME Rotate specific peer (can use multiple times)
--all-peers Rotate all peer keypairs
--no-backup Skip creating backups
--interface=NAME Specify interface (default: wg0)
```
## 🗑️ 卸载
要完全移除 WireGuard 配置:
```
# 预览将要删除的内容(建议作为第一步)
./wg-uninstall.sh --dry-run
# 完全卸载
./wg-uninstall.sh
# 卸载特定 interface
./wg-uninstall.sh --interface=wg1
```
卸载程序会移除:
- ✅ 网络接口配置 (UCI)
- ✅ 所有 peer 配置
- ✅ 防火墙规则和区域
- ✅ WireGuard 密钥和配置 (`/etc/wireguard/`)
- ✅ 运行中的网络接口
- ✅ 从备份配置中移除 `/etc/wireguard`
**注意:** 卸载程序在进行任何更改前会要求你确认。
## 📁 文件结构
安装完成后,WireGuard 的文件组织如下:
```
/etc/wireguard/
├── privatekey # Server private key
├── publickey # Server public key
├── peers/ # Peer configurations
│ ├── laptop.conf # Peer config file
│ ├── laptop-privatekey # Peer private key
│ ├── laptop-publickey # Peer public key
│ └── laptop.png # QR code
├── backup/ # Key rotation backups
│ └── 20251101-120000/ # Timestamped backup directory
└── removed/ # Archived removed peers
└── 20251101-130000-old-device/
/etc/config/
├── network # UCI network config
├── firewall # UCI firewall config
├── network.bak.* # Automatic backups
└── firewall.bak.* # Automatic backups
/etc/sysupgrade.conf # Contains /etc/wireguard for backups
```
## 🛡️ 安全最佳实践
1. **定期轮换密钥**:每 3-6 个月轮换一次密钥
2. **安全分发密钥**:切勿通过未加密的渠道发送配置
3. **防火墙配置**:确保仅开放必要的端口
4. **Peer 管理**:使用 `wg-peer-manage.sh` 及时删除未使用的 peer
5. **备份密钥**:系统备份现在会自动包含 `/etc/wireguard`
6. **监控连接**:定期使用 `--active` 检查已连接的 peer
## 💾 备份与恢复
### 自动集成备份
安装器会自动将 `/etc/wireguard/` 添加到 OpenWrt 的备份配置 (`/etc/sysupgrade.conf`) 中。
**这意味着:**
- ✅ 你的 WireGuard 密钥将包含在系统备份中
- ✅ 配置在系统升级后依然保留
- ✅ 通过 LuCI 创建的备份包含 WireGuard
### 创建手动备份
```
# 创建备份归档
sysupgrade -b /tmp/backup-$(date +%Y%m%d).tar.gz
# 验证是否包含 WireGuard
tar -tzf /tmp/backup-*.tar.gz | grep wireguard
```
### 从备份恢复
```
# 全新安装或升级后:
sysupgrade -r /tmp/backup-20251101.tar.gz
# Router 将重启并恢复 WireGuard 配置
```
## 🔧 高级配置
### 自定义接口名称
在安装过程中,只需在出现提示时输入不同的接口名称:
```
./wg-openwrt-installer.sh
# 出现提示时:输入 WireGuard interface 名称 [wg0]: wg1
```
### 多个 WireGuard 接口
使用不同的接口名称多次运行安装程序:
```
# 第一个 VPN
./wg-openwrt-installer.sh # Use wg0
# 第二个 VPN
./wg-openwrt-installer.sh # Use wg1
# 分别管理
./wg-peer-manage.sh --interface=wg0
./wg-peer-manage.sh --interface=wg1
```
### 手动配置 UCI
安装完成后,你可以手动编辑:
```
# 显示当前配置
uci show network.wg0
# 更改端口
uci set network.wg0.listen_port='51821'
uci commit network
/etc/init.d/network restart
# 添加手动 peer
uci add network wireguard_wg0
uci set network.@wireguard_wg0[-1].description='manual-peer'
uci set network.@wireguard_wg0[-1].public_key=''
uci set network.@wireguard_wg0[-1].allowed_ips='192.168.20.10/32'
uci commit network
```
## 📊 监控
### 使用 Peer 管理脚本
```
./wg-peer-manage.sh --active # Show currently connected peers
./wg-peer-manage.sh --traffic # Show bandwidth usage per peer
./wg-peer-manage.sh --list # List all configured peers
```
### 命令行
```
# 显示 interface 状态
wg show wg0
# 显示所有已连接 peer 的详细信息
wg show wg0 peers
# 检查最新 handshakes(指示活动连接)
wg show wg0 latest-handshakes
# 显示传输统计信息
wg show wg0 transfer
# 所有信息的紧凑视图
wg show wg0 dump
```
### 使用 LuCI Web 界面
如果已安装 `luci-proto-wireguard`:
1. 导航到:`Status` → `WireGuard`
2. 查看已连接的 peer 和流量统计
3. 或者:`Network` → `Interfaces` → `wg0` → `Edit`
## 🐛 故障排除
### Peer 无法连接
```
# 1. 检查 WireGuard 是否正在运行
wg show wg0
# 2. 验证 interface 是否具有正确的 IP
ip addr show wg0
# 3. 检查防火墙规则
uci show firewall | grep wg0
# 4. 验证端口是否正在监听
netstat -ulnp | grep 51820
# 5. 检查日志
logread | grep -i wireguard
# 6. 从 peer 设备进行测试
ping 192.168.20.1 # Should work if connected
```
### 无握手
- 验证 peer 配置中的 endpoint 是否与你的公网 IP/域名匹配
- 检查路由器上的 UDP 端口是否已开放/转发
- 确保两台设备上的时间已同步(WireGuard 要求此项)
- 验证服务器和 peer 配置之间的密钥是否匹配
- 检查 peer 是否已启用:`./wg-peer-manage.sh --list`
### DNS 问题
- 检查 peer 配置中的 DNS 服务器:`cat /etc/wireguard/peers/device.conf`
- 验证 OpenWrt 上是否启用了 DNS 转发
- 首先使用 IP 地址进行测试:`ping 192.168.1.1`
- 检查 LAN 防火墙是否接受来自 VPN 的 DNS 请求
### 系统恢复后
如果恢复备份后 WireGuard 无法正常工作:
```
# 1. 验证文件是否已恢复
ls -la /etc/wireguard/
# 2. 检查 UCI 配置
uci show network.wg0
# 3. 重启网络
/etc/init.d/network restart
# 4. 检查 interface
wg show wg0
```
### Peer 管理脚本问题
```
# 如果您看到 "Server public key not found":
# 尚未安装 WireGuard server
./wg-openwrt-installer.sh
# 某些终端上的屏幕清除问题:
./wg-peer-manage.sh --no-clear
```
## 📝 完整脚本参考
### wg-openwrt-installer.sh
**用途:** 初始化 WireGuard 服务器设置
**功能:**
- 自动检测并安装缺失的软件包
- 提供实用提示的交互式配置
- 创建带有二维码的初始 peer
- 配置网络、防火墙和 UCI
- 将 WireGuard 添加到备份配置
- 出现问题时提供回滚选项
**用法:**
```
./wg-openwrt-installer.sh
# 遵循交互式提示
```
### wg-peer-manage.sh
**用途:** 日常 peer 管理
**交互模式:**
```
./wg-peer-manage.sh # Full interactive menu
./wg-peer-manage.sh --no-clear # Without screen clearing
```
**命令行模式:**
```
./wg-peer-manage.sh --list
./wg-peer-manage.sh --add
./wg-peer-manage.sh --show=NAME
./wg-peer-manage.sh --remove=NAME
./wg-peer-manage.sh --enable=NAME
./wg-peer-manage.sh --disable=NAME
./wg-peer-manage.sh --traffic
./wg-peer-manage.sh --active
./wg-peer-manage.sh --interface=wg1
./wg-peer-manage.sh --help
```
### wg-key-rotate.sh
**用途:** 安全密钥轮换
**用法:**
```
./wg-key-rotate.sh --server # Rotate server only
./wg-key-rotate.sh --peer=laptop # Rotate one peer
./wg-key-rotate.sh --peer=laptop --peer=phone # Multiple peers
./wg-key-rotate.sh --all-peers # All peers
./wg-key-rotate.sh --server --all-peers # Everything
./wg-key-rotate.sh --no-backup # Skip backup
./wg-key-rotate.sh --interface=wg1 # Specific interface
./wg-key-rotate.sh --help
```
### wg-uninstall.sh
**用途:** 彻底移除 WireGuard
**用法:**
```
./wg-uninstall.sh --dry-run # Preview only
./wg-uninstall.sh # Full removal
./wg-uninstall.sh --interface=wg1 # Specific interface
./wg-uninstall.sh --help
```
## 📄 许可证
本项目是开源的,基于 [MIT 许可证](LICENSE) 提供。
**版权所有:** C.Brown CoraleSoft, 2025-2026
## 📮 支持
如有问题、疑问或建议:
- 在 [GitHub](https://github.com/Coralesoft/Openwrt-Wireguard-Installer/issues) 上提交 issue
- 查看现有的 issue 获取解决方案
- 报告问题时请提供路由器型号和 OpenWrt 版本
## 🔗 链接
- [WireGuard 官网](https://www.wireguard.com/)
- [OpenWrt 文档](https://openwrt.org/docs/guide-user/services/vpn/wireguard/start)
- [OpenWrt 上的 WireGuard Wiki](https://openwrt.org/docs/guide-user/services/vpn/wireguard/basics)
## 🎯 版本历史
### 2026.4.2(当前版本)
- ✨ 在 peer 管理器中增加了密钥轮换支持
- ✨ 在交互式菜单中选中时显示 peer 详情
- ✨ 使用网络重启代替接口重启
- 🐛 修复了包检测 grep 模式中尾随空格的问题 (PR #8)
### 2026.4.1
- ✨ 支持 `apk` 包管理器(OpenWrt 24.10+ 从 opkg 切换到了 apk)
### 2026.1.0
- 🐛 修复了带有连字符的 peer 名称导致 UCI 错误的问题 (issue #6)
- 🐛 通过使用 `luci-proto-wireguard` 修复了 LuCI “缺少协议” 的问题 (issue #7)
### 2025.11.2
- ✨ 增加了自动安装软件包的功能
- ✨ 增加了交互式 peer 管理工具 (`wg-peer-manage.sh`)
- ✨ 增加了备份配置集成 (`/etc/sysupgrade.conf`)
- ✨ 改进了卸载程序,支持预览(dry-run)和接口选项
- 🐛 修复了密钥轮换中 sed 分隔符的 bug
- 🐛 修复了 peer 管理器中 IP 分配的检测问题
### 2025.9.1
- ✨ 初始密钥轮换脚本
- 🔒 安全的密钥备份功能
### 2025.8.1
- ✨ 首次公开发布
- 🚀 支持二维码生成的基础安装程序
**注意:** 在部署到生产环境之前,请务必在安全的环境中进行测试。保留可用配置的备份!
**测试环境:** OpenWrt 23.05.x / 24.10.x,包含多种路由器(如 Flint 2 (MT6000))
标签:Cutter, OpenWrt, VPN, WireGuard, 数字取证, 网络配置, 自动化脚本, 运维工具