跳转到内容

WireGuard:自建 VPN 回家 ​

完成后,手机或笔记本在外面连上 WireGuard,就能访问 NAS 的 SMB 共享、Web 界面和家里局域网里的其他设备,和在家里一样。路由器上只需要为它转发一个 UDP 端口。

适合谁 ​

  • 想在外面访问整个家里的网络,愿意自己维护一台 VPN 服务端。
  • 家里有公网 IPv4 地址,或者有域名和动态域名(DDNS)。

不适合:宽带在运营商级 NAT(CG-NAT)后面、拿不到公网地址的家庭,可以改用不需要端口映射的 Tailscale。总体思路见 远程访问:别把 NAS 直接暴露到公网。

这个插件会把一个 UDP 端口开放到公网,并让客户端进入你的局域网

  • 影响范围:路由器转发的 UDP 端口直通 NAS;任何持有客户端配置(配置文本或二维码)的设备都能接入隧道。插件默认生成的转发和地址转换规则让客户端能访问 NAS 所在的整个局域网。客户端配置里的 限制(Restrict)只改变客户端自己的路由,不是服务端的访问控制,拿到配置的人可以自己改回全通。
  • 前置条件:有公网 IPv4;Web 界面、SMB 等服务本身已经设置了强密码;客户端配置和二维码当密码保管,用完删除导出的文件,不要发到聊天软件里。
  • 怎么回退:先取消勾选隧道的 启用(Enable),保存并应用,隧道就停止;再到路由器取消端口转发。某台设备丢失或配置泄露,停用并删除对应的客户端,应用后服务端不再接受它。

插件信息 ​

项内容
包名openmediavault-wireguard
来源omv-extras
OMV 8 状态截至 2026-10-22 的 omv-extras synchrony 软件源为 8.0.4(amd64、arm64)
菜单位置服务 → Wireguard(Services → Wireguard),三个标签:隧道(Tunnels)、客户端(Clients)、用户自定义(Custom Config)
依赖wireguard、qrencode、php-zip。安装时会写入 /etc/sysctl.d/ip_forward.conf 打开 IPv4 转发,并加载 wireguard 内核模块

先装 omv-extras,再到 系统 → 插件(System → Plugins)里安装。

树莓派和 Armbian

omv-extras wiki 提醒:基于 Armbian 镜像的系统上,安装这个插件可能替换或破坏现有内核,装完后要重新安装 Armbian 的内核。用这类设备前先看 wiki 里的说明。

先弄清三个概念 ​

  • 隧道是 NAS 这一端。每个隧道有一个编号 N(1 到 255),隧道内的网段固定是 10.192.N.0/24,NAS 自己在隧道里的地址是 10.192.N.254。同一个 NAS 上隧道的名称、编号、端口都不能重复。
  • 客户端是一台设备,例如手机、笔记本。客户端号 M(1 到 253)决定它在隧道里的地址 10.192.N.M。名称和编号都不能和别的客户端重复。
  • 对端(Endpoint)是客户端要连的公网地址:你的公网 IP,或指向它的域名。

每台设备用自己的一份客户端配置。同一份配置装到两台设备上,两台设备不能同时在线。

配置与使用 ​

1. 准备公网地址和端口 ​

  • 在路由器上看 WAN 口地址,和某个「查询我的 IP」网站显示的地址对比。两者不同,说明你在 CG-NAT 后面,外面连不进来,只能找运营商要公网地址,或换用 Tailscale。
  • 地址会变的家庭宽带用域名加动态域名。
  • 路由器上把 UDP 的 51820(或你自己选的端口)转发到 NAS 的局域网地址。

2. 创建隧道 ​

  1. 服务 → Wireguard → 隧道 → 创建(Create)。
  2. 勾选 启用(Enable),填写下面的字段:
字段默认值说明
隧道号(Tunnel number)1决定隧道内网段 10.192.N.0/24
名称(Name)空便于识别
Network adapter无选 NAS 连接路由器的那块网卡,可在 网络 → 接口(Network → Interfaces)里确认。以界面显示为准
对端(Endpoint)空公网 IP 或域名,写进客户端配置
端口(Port)51820要和路由器转发的 UDP 端口一致,且不能被别的隧道占用
iptables 配置(Configure iptables)勾选自动生成转发和地址转换规则(见下)
链接保活间隔(Persistent keepalive)00 表示不发。设成正数(例如 25)会每隔这么多秒发一个保活包,只在连接经常被 NAT 断开时才用。客户端表单里有同名字段,管客户端发往 NAS 的保活包
本地 IP(Local IP)空填家里局域网的网段,例如 192.168.2.0/24。只在客户端勾选了 限制 和 本地 IP 时才会被写进客户端配置,用来分流
MTU00 表示不设置,WireGuard 用 1420。走 PPPoE 或 VLAN 出现分片问题时再调小
  1. 保存,点黄色提示条上的应用。

iptables 配置勾选时,隧道启动和停止时会自动添加和删除三条规则:允许进出隧道接口的转发,以及从所选网卡出去的地址转换(MASQUERADE)。所以局域网里的设备看到的来源地址是 NAS,而不是 10.192.N.M,路由器上不需要加静态路由。如果你在 OMV 里配了 防火墙 规则,要自己放行这个 UDP 端口。

3. 添加客户端 ​

  1. 服务 → Wireguard → 客户端 → 创建。
  2. 勾选 启用,选 隧道号,填 客户端号和 名称。
  3. 保持默认,保存并应用。密钥和预共享密钥由插件自动生成。

高级字段的含义:

字段默认行为什么时候改
DNS 服务器不设在外面想用家里的路由器解析内网名字时,填路由器的地址
限制(Restrict)不勾,客户端的 AllowedIPs 是 0.0.0.0/0,所有 IPv4 流量都走 NAS只想让访问家里的流量走隧道时勾选,再配下面三项
VPN限制勾选后可用把隧道网段 10.192.N.0/24 加入路由
本地 IP限制勾选后可用把隧道里填的「本地 IP」网段(家里局域网)加入路由
其它子网(Additional subnet(s))空再补充别的网段

默认的「全隧道」只包含 IPv4(0.0.0.0/0),IPv6 流量不会进入隧道。想知道外面的流量是否都经过家里,自己测一下,不要假设。

4. 把配置装到设备上 ​

  • 手机:先装 WireGuard 应用,点 +,选扫描二维码。在 OMV 的客户端表格里先点 生成二维码(Generate QR Codes),二维码会显示在表格的二维码列。
  • 电脑:选中客户端,点 客户端配置(Client Config)查看配置文本,或用工具栏的下载菜单下载配置文件,在 WireGuard 应用里用「从文件导入隧道」。

客户端配置按钮只在该客户端和它的隧道都启用时才可用。

5. 测试 ​

关掉手机的 Wi-Fi,用移动数据连接隧道。在家里的 Wi-Fi 下测试常常连不上,常见原因之一是路由器不支持从内网访问自己的公网地址(NAT 回环),这不是插件的问题。

检查结果 ​

  1. 在 OMV 的 shell(root)里,只读确认:
sh
# 在 OMV 的 shell 里执行(root)
wg show                          # 列出隧道和每个客户端,latest handshake 应是几秒到几分钟前
systemctl status wg-quick@wgnet1 # 隧道 1 的服务状态,编号换成你的隧道号
  1. 客户端连上后,先 ping 隧道里 NAS 的地址 10.192.N.254,再 ping NAS 的局域网地址,最后打开 \\<NAS 的局域网地址> 访问 SMB 共享。
  2. 在客户端查看公网出口地址,确认是否符合你对「全隧道」或「分流」的预期。
  3. 重启 NAS,隧道应自动恢复,wg show 重新出现握手。

备份与维护 ​

  • 数据在哪里:隧道和客户端的密钥都保存在 OMV 的配置数据库(config.xml)里,/etc/wireguard/ 下的 wgnet*.conf 是插件生成的,不要手改,下一次应用会被覆盖。备份 config.xml 时当作机密保管。
  • 改了隧道,要重装客户端配置:编辑隧道会同步更新客户端配置,设备上已导入的旧配置要用新的二维码或文件重新导入。
  • 删除顺序:隧道下还有客户端时不能删除隧道。删除客户端或隧道前,先取消勾选 启用,保存并应用,再删除,再应用一次。
  • 卸载插件:系统 → 插件 里的卸载等于 purge,会删除 /etc/wireguard/wgnet*.conf 和配置数据库里的全部隧道、客户端与密钥,所有客户端都要重新配置。卸载前先导出需要保留的配置。
  • 自定义配置:用户自定义(Custom Config)标签用来接入商业 VPN 或做点对点、站点到站点组网,名称最长 9 个字符,对应的服务名是 wg-quick@wgnet_<名称>。隧道和客户端使用 10.192.x.x 网段,自定义配置要避开它。拓扑设计超出本文范围,见 wiki 的说明。

常见问题 ​

外面连不上,wg show 里没有握手。 按顺序查:路由器转发的是 UDP 而不是 TCP;端口和隧道里的端口一致;对端填的地址确实指向你的公网地址;运营商有没有给公网地址(CG-NAT);NAS 上的防火墙规则有没有拦截这个端口。

连上了,但访问不到局域网里的设备。 先把客户端的 限制 取消,回到全隧道(AllowedIPs 为 0.0.0.0/0)测试。通了再收紧路由。局域网设备只在 SMB 之类的服务里认 NAS 的地址时,也可以先用 IP 访问,排除名字解析的问题。

访问不了 macvlan 网络里的容器。 这是 Linux 内核的限制:macvlan 上的容器和宿主机本身不能互通,从 WireGuard 也一样进不去(wiki 的说明)。要解决得改容器的网络方案,例如改用普通桥接网络并映射端口,见 Docker 与应用。

家里和外面网络的网段相同。 两个网络都是 192.168.1.0/24 时路由会冲突。把家里的网段改成不常见的,例如 192.168.23.0/24。

两台设备用同一份配置,只有一台能连。 每台设备要有自己的客户端,用不同的客户端号。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。