Loading... 群晖可以通过 QC、DDNS 这些来达到公网访问服务的目的,但是这几种方式也有弊端,QC 比较慢,有时候基本上没法用,DDNS 需要路由器桥接拨号,折腾起来也比较麻烦,更不用说部分地区可能还不支持。 这时候可以采用一些 VPN 技术来实现目的,如 WireGuard。本文是关于群晖 920+ 在 DSM7.0 系统上面安装 WireGuard 客户端的教程。 ## 搭建固定 IP 的 WireGuard 服务端 WireGuard 没有区分客户端和服务端,但是我们可以在有固定 IP 的设备上面搭建,其他设备的 WireGuard 连接到该该设备,实现互相访问。这里固定 IP 的设备可以考虑云主机。 ### 1. 部署 这里使用开源项目 wg-easy 来快捷部署 WireGuard 并管理连接。可自行参考 wg-easy 项目搭建。地址:https://github.com/WeeJeWel/wg-easy 采用 Docker Compose 部署 **docker-compose.yml** ```yaml version: "3.8" services: wg-easy: environment: - WG_HOST=你的固定IP或者域名 - PASSWORD=你的密码 - WG_DEFAULT_ADDRESS=10.8.1.x - WG_DEFAULT_DNS=114.114.114.114 - WG_ALLOWED_IPS=10.8.1.0/24 image: weejewel/wg-easy container_name: wg-easy volumes: - .:/etc/wireguard ports: - "51820:51820/udp" - "51821:51821/tcp" restart: unless-stopped cap_add: - NET_ADMIN - SYS_MODULE sysctls: - net.ipv4.ip_forward=1 - net.ipv4.conf.all.src_valid_mark=1 ``` **注意** - WG_HOST:你的固定IP或者域名 - PASSWORD:wg-easy 管理面板密码 - WG_DEFAULT_ADDRESS:WireGuard 默认网段,建议和已有的云主机及设备不冲突 - WG_ALLOWED_IPS:和 WG_DEFAULT_ADDRESS 配置有关,同步更新即可 使用 `docker-compose up -d` 部署服务,防火墙开放对应的端口 ### 2. 使用 访问 IP:51821 打开 wg-easy 管理界面,输入密码  第一次进入 Clients 列表应该为空,这时候点击 New 按钮创建一个 Client,输入名字即创建成功,在列表中找到刚刚创建好的配置,点击右边下载按钮,会下载一份 xxx.conf 的配置文件,将该文件导入到 WireGuard 客户端即可连上。 ## 群晖安装 WireGuard 客户端 WireGuard 官方提供了很多系统的客户端,但是群晖暂时还没有,有开发者打包了对应的安装包,但是 DSM 7.0 中,群晖插件机制有改动,造成无法简单安装使用。 ### 1. 打包群晖安装包 在 Linux Docker 环境下打包,这里可以使用 WSL2。如果你的系统是 DSM7.0 以下,直接访问[仓库](https://github.com/runfalk/synology-wireguard),安装开发者已打包好的客户端就可以了。 ```bash # 克隆客户端仓库 git clone https://github.com/runfalk/synology-wireguard.git cd synology-wireguard/ # 创建环境 sudo docker build -t synobuild . # 打包客户端 sudo docker run --rm --privileged --env PACKAGE_ARCH=你的群晖架构 --env DSM_VER=群晖系统版本 -v $(pwd)/artifacts:/result_spk synobuild ``` **注意** - 打包客户端的 `PACKAGE_ARCH`:你的群晖处理器架构,可以通过[官方网站](https://kb.synology.com/en-global/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have)查询,我的是群晖 920+,也就是 `geminilake` - 打包客户端的 `DSM_VER`:你的群晖系统版本,我这里是 DSM7.0,所以填上 7.0 - 最终群晖 920+ DSM7.0 的打包命令就是 `sudo docker run --rm --privileged --env PACKAGE_ARCH=geminilake --env DSM_VER=7.0 -v $(pwd)/artifacts:/result_spk synobuild` - 打包比较慢,耐心等待即可,大约需要 15分钟 打包完成后,我们就可以得到一个 spk 安装包,目录为 `synology-wireguard/artifacts/` ### 2. 群晖上面安装 WireGuard 将 WireGuard 的 spk 安装包复制到群晖上面,群晖开启 SSH,连接 SSH 后 ```bash # 安装 sudo synopkg install WireGuard.spk # 执行初始化脚本 sudo /var/packages/WireGuard/scripts/start ``` 将 wg-easy 配置文件复制到群晖目录 `/etc/wireguard/` 下面,重命名为 `wg0.conf` 将其中的 DNS 一项删除,如下: **原 conf 文件示例** ``` [Interface] PrivateKey = 123456789 Address = 10.8.1.2/24 DNS = 114.114.114.114 [Peer] PublicKey = 123456789 PresharedKey = 123456789 AllowedIPs = 10.8.1.0/24, 10.0.4.0/24 Endpoint = ip:51820 ``` 包含 DNS 114.114.114.114,将该行删除。因为群晖缺少对应的功能,如果不删除,会导致连接有问题。 同时添加定期心跳 `PersistentKeepalive`,不然偶尔会失联。 **修改后的文件示例** ``` [Interface] PrivateKey = 123456789 Address = 10.8.1.2/24 [Peer] PublicKey = 123456789 PresharedKey = 123456789 AllowedIPs = 10.8.1.0/24, 10.0.4.0/24 PersistentKeepalive = 25 Endpoint = ip:51820 ``` 以上操作完成后,需要启动我们的配置 ```bash # 启动 sudo wg-quick up wg0 # 关闭 sudo wg-quick down wg0 ``` 查看连接状态 ```bash sudo wg show wg0 ``` 设置开机启动,群晖上面该命令和 Linux 的有区别,注意区分 ```bash # 开启 sudo wg-autostart enable wg0 # 关闭 sudo wg-autostart disable wg0 ``` ## 电脑访问 去 [WireGuard](https://www.wireguard.com/) 下载对应系统的客户端,在 wg-easy 管理面板新建 Client 并下载配置文件,导入到电脑上面的客户端中,如图  面板中查看群晖 Client 分配的 WireGuard IP,此时即可连接上,方便起见,可以在 hosts 中配置一下解析。 ## 参考 - https://eve.gd/2021/08/20/replacing-openvpn-with-wireguard-including-on-synology-devices/ - https://www.wireguard.com/ - https://github.com/WeeJeWel/wg-easy - https://github.com/runfalk/synology-wireguard 最后修改:2025 年 02 月 24 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏