群晖可以通过 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

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 以下,直接访问仓库,安装开发者已打包好的客户端就可以了。

# 克隆客户端仓库
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:你的群晖处理器架构,可以通过官方网站查询,我的是群晖 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 后

# 安装
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

以上操作完成后,需要启动我们的配置

# 启动
sudo wg-quick up wg0
# 关闭
sudo wg-quick down wg0

查看连接状态

sudo wg show wg0

设置开机启动,群晖上面该命令和 Linux 的有区别,注意区分

# 开启
sudo wg-autostart enable wg0
# 关闭
sudo wg-autostart disable wg0

电脑访问

WireGuard 下载对应系统的客户端,在 wg-easy 管理面板新建 Client 并下载配置文件,导入到电脑上面的客户端中,如图

面板中查看群晖 Client 分配的 WireGuard IP,此时即可连接上,方便起见,可以在 hosts 中配置一下解析。

参考

最后修改:2024 年 03 月 24 日
如果觉得我的文章对你有用,请随意赞赏