brianatalliance/wireguard-vpn-spk
GitHub: brianatalliance/wireguard-vpn-spk
为群晖 DS220+ 提供 DSM 7.0+ 兼容的 WireGuard VPN 隧道功能,通过用户空间实现绕过内核模块限制。
Stars: 0 | Forks: 0
# WireGuard VPN Tunnel SPK
**作者:** Brian Vicente
**版本:** 1.0.0
**日期:** 2026-03-28
**组织:** Alliance for Empowerment
Synology SPK 软件包,为 DSM 7.0+ 提供用户空间 WireGuard VPN 隧道,无需内核模块支持。使用 `wireguard-go`(Go 实现)以及来自 `wireguard-tools` 的 `wg` 和 `wg-quick`。
## 目标平台
| 规格 | 值 |
|------|-------|
| NAS 型号 | Synology DS220+ |
| 架构 | x86_64 (Geminilake) |
| DSM 版本 | 7.0+ |
| 权限 | `run-as: package` (兼容 DSM 7) |
## 包含内容
| 组件 | 描述 |
|-----------|-------------|
| `wireguard-go` | 用户空间 WireGuard 实现(从[源码](https://git.zx2c4.com/wireguard-go)静态编译) |
| `wg` | WireGuard CLI 工具(从 [wireguard-tools](https://git.zx2c4.com/wireguard-tools) 静态编译) |
| `wg-quick` | 标准隧道启动/关闭脚本 |
| `wg-tunnel-setup` | 用于交互式配置、状态检查、测试和重置的辅助脚本 |
| `VERSION` | 版本跟踪和更新日志 |
## 构建 SPK
### 前置条件
- Go 1.22+(用于编译 `wireguard-go`)
- GCC(用于编译 `wg`)
- `tar`(用于打包)
### 构建步骤
```
# 1. 编译 wireguard-go (静态)
git clone https://git.zx2c4.com/wireguard-go /tmp/wireguard-go
cd /tmp/wireguard-go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o package/wireguard-go .
# 2. 编译 wg (静态)
git clone https://git.zx2c4.com/wireguard-tools /tmp/wireguard-tools
cd /tmp/wireguard-tools/src
make CC="gcc" LDFLAGS="-static"
cp wg package/wg
strip package/wg
# 3. 复制 wg-quick
cp /tmp/wireguard-tools/src/wg-quick/linux.bash package/wg-quick
# 4. 创建 package.tgz
cd package && tar czf ../package.tgz wireguard-go wg wg-quick wg-tunnel-setup VERSION && cd ..
# 5. 构建 SPK
tar cf WireGuardVPN-geminilake-1.0.0.spk INFO package.tgz scripts conf PACKAGE_ICON.PNG PACKAGE_ICON_256.PNG LICENSE
```
## 安装说明
1. 打开 DSM → **套件中心** → **手动安装**
2. 上传 `WireGuardVPN-geminilake-1.0.0.spk`
3. **取消勾选** "安装后立即运行"
4. 安装完成后,通过 SSH 进入 NAS 并配置:
```
# 使用您的 VPN 凭据编辑配置
sudo vi /etc/wireguard/wg0.conf
# 启动 tunnel (需要 root)
sudo /var/packages/WireGuardVPN/scripts/start-stop-status start
# 验证
sudo /var/packages/WireGuardVPN/target/wg show wg0
curl -s https://ifconfig.me
```
## 配置
编辑 `/etc/wireguard/wg0.conf`:
```
[Interface]
PrivateKey =
Address = /32
# DNS 行已移除 — DSM 缺少 resolvconf
[Peer]
PublicKey =
AllowedIPs = 0.0.0.0/0
Endpoint = :
PersistentKeepalive = 25
```
## 辅助工具
```
wg-tunnel-setup status # Show tunnel status + public IP
wg-tunnel-setup test # Run connectivity diagnostics
wg-tunnel-setup configure # Interactive config wizard
wg-tunnel-setup reset # Stop and clean up
```
## DSM 7 说明
- DSM 7 阻止未签名的第三方软件包以 root 身份运行
- 软件包使用 `run-as: package` 权限级别进行 GUI 安装
- 启动/停止需要通过 SSH 使用 `sudo`
- 若要开机自启,请在 DSM 任务计划程序中创建一个触发任务(开机,root)
## 架构说明
对于生产环境使用,建议通过 **UDM Pro WireGuard VPN Client** 进行路由,而不是直接在 NAS 上运行 WireGuard。UDM Pro 在网关级别处理隧道,NAS 只需通过它进行路由 —— 无需内核模块,没有 DSM 兼容性问题,可以干净地度过 NAS 重启和 DSM 更新。
## 项目结构
```
wireguard-spk/
├── INFO # SPK metadata
├── LICENSE # MIT + bundled component licenses
├── PACKAGE_ICON.PNG # 64x64 icon for Package Center
├── PACKAGE_ICON_256.PNG # 256x256 icon for Package Center
├── conf/
│ ├── privilege # run-as: package (DSM 7 compatible)
│ └── resource # usr-local-linker for PATH
├── package/
│ ├── wireguard-go # (built from source, not in repo)
│ ├── wg # (built from source, not in repo)
│ ├── wg-quick # Bash script from wireguard-tools
│ ├── wg-tunnel-setup # Helper script
│ └── VERSION # Version tracking
└── scripts/
├── postinst # Post-install: symlinks, config dir, template
├── postuninst # Post-uninstall: cleanup symlinks
├── postupgrade # Post-upgrade: re-link binaries
├── preinst # Pre-install: ensure TUN device
├── preuninst # Pre-uninstall: stop tunnel
├── preupgrade # Pre-upgrade: stop tunnel
└── start-stop-status # Main lifecycle script
```
## 相关项目
- [perplexity-windows-xpc](https://github.com/brianatalliance/perplexity-windows-xpc) — Windows 版 Perplexity AI — PowerShell、系统托盘、Office 集成
- [perplexity-xpc](https://github.com/brianatalliance/perplexity-xpc) — PerplexityXPC 代理服务、托盘应用、MCP 服务器管理
- [perplexity-connector](https://github.com/brianatalliance/perplexity-connector) — Perplexity Sonar API 连接器 — CLI、流式传输、异步、结构化输出
- [atera-dashboard](https://github.com/brianatalliance/atera-dashboard) — Atera RMM NOC 仪表盘 — React + Vite + Tailwind + Recharts
- [atera-connector](https://github.com/brianatalliance/atera-connector) — Atera RMM API v3 连接器 — 具有完整 CRUD 支持的 Python CLI
- [synology-connector](https://github.com/brianatalliance/synology-connector) — Synology DSM Web API 连接器 — 跨 10 个模块的 40 个 CLI 操作
- [udm-nspawn-pki](https://github.com/brianatalliance/udm-nspawn-pki) — UniFi Dream Machine Pro 上 systemd-nspawn 中的两层 PKI
- [nas-git-sync](https://github.com/brianatalliance/nas-git-sync) — 自动化 GitHub 到 Synology NAS 仓库同步脚本
## 作者
**Brian Vicente** — 网络协调员与网络安全管理员,[Alliance for Empowerment](https://www.allianceforempowerment.org)
GitHub: [@brianatalliance](https://github.com/brianatalliance)
## 许可证
MIT — 有关捆绑组件的许可证,请参阅 [LICENSE](LICENSE)。
WireGuard 是 Jason A. Donenfeld 的注册商标。
标签:DS220+, DSM 7.0+, Geminilake, Go语言, IP 地址批量处理, Linux网络工具, SPK套件, Synology, VPN隧道, wg-quick, WireGuard, wireguard-go, wireguard-tools, x86_64, 内网穿透, 应用安全, 日志审计, 用户态实现, 程序破解, 网络安全, 网络安全, 群晖, 远程访问, 隐私保护, 隐私保护, 静态编译