NAS远程访问解决方案:基于WireGuard的内网穿透与异地组网 | 企业VPN与家庭影院远程播放
本文最后更新于 2025-08-27,文章内容可能已经过时。
在远程办公需求激增、家庭数据管理愈发重要的当下,如何安全、高效地访问家中 NAS,成了不少用户的共同困扰 —— 尤其是像我这样的 NAS 深度用户,出门在外想调取存着的电影和文件时,要么得费劲折腾公网 IP,要么只能依赖速度慢还暗藏安全隐患的内网穿透工具,传统端口转发更是既麻烦又风险重重。
直到我遇见了WireGuard,这款轻量、快速、加密安全的现代 VPN 协议,彻底解决了我的远程访问难题。作为内核级支持的 VPN 方案,它不仅性能强悍,更关键的是不需要家庭宽带具备固定公网 IP,也不用额外付费:现在无论我在外地出差,还是旅行途中,都能像在家一样流畅访问群晖 NAS—— 既能快速传输工作文件,享受企业级 VPN 般的安全连接;也能直接播放私人影院里的高清电影,看片体验丝毫不受影响,真正实现了 “把 NAS 装进口袋”。
如果你也想摆脱公网 IP 限制,避开传统方案的安全漏洞,用低成本实现安全又高速的异地组网,让 NAS 从 “固定在家的存储” 变成 “随时随地可控的数字基地”,这篇教程或许能帮你轻松打通内外网,解锁 NAS 的远程使用新可能 🌐。
WireGuard 是什么?
WireGuard 是一款性能卓越、设计简洁、安全性高的开源 VPN 协议与软件,旨在比传统 VPN(如 IPsec、OpenVPN)更加高效、轻量与易用。其核心优势包括:
轻量级、安全性高:WireGuard 的代码量非常小,攻击面窄,便于安全审计,非常适合追求稳定与安全的项目。
现代加密算法:采用 Curve25519(密钥协商)、ChaCha20(加密)、Poly1305(消息认证)、BLAKE2s(哈希)等行业前沿算法,并基于 Noise 协议框架构建安全握手机制,确保前向保密和抗重放攻击。
跨平台支持强:Linux、Windows、macOS、BSD、iOS、Android 等主流平台均可使用,适配环境广泛。
高性能、低延迟:由于在 Linux 内核中实现,配合现代加密算法,WireGuard 在速度和资源消耗上明显优于 OpenVPN 等方案。
网络接口简洁:WireGuard 使用虚拟网卡(如 wg0),配置逻辑类似 SSH,交换公钥即可建立连接,无需管理复杂的连接状态或守护进程。
应用场景:无公网 IP 下群晖 NAS 的远程访问解决方案
针对没有公共 IP 地址,但希望远程访问群晖 NAS 的用户,WireGuard 提供了灵活、安全且高效的解决方式:
使用 VPS 转接实现远程访问
多数家庭用户处于 IPv4 CGNAT(运营商级 NAT) 或内网环境,无法直接进行端口转发,此时可以采取:
在拥有公网 IP 的 VPS(或云服务器)部署 WireGuard 服务端;
群晖 NAS 和远程客户端均配置为 WireGuard 客户端,连接到 VPS;
通过 VPS,NAS 与客户端间建立内网 VPN 通道,实现远程访问。
这种方式无需更改家庭网络设置,也能绕过公网 IP 限制,适配性极佳。
支持 Mesh 组网与灵活拓扑
WireGuard 支持 Mesh 结构,即节点间可直接相互通信,而不必总通过中心服务器。这对多地点互联,或者 NAS 与多个设备(如家庭、多地办公设备)构建骨干网格非常有用。
趋势与替代方案
许多论坛中也提到,如果完全没有公网 IP 的情况下,可使用 Tailscale(基于 WireGuard)实现点对点连接,无需公网 IP 或手动配置转发。
当然,这涉及的是商业/托管服务;而纯粹使用 WireGuard + VPS 的方案则成本更低、控制性更强,适合技术用户。
为什么 NAS 用户群体适合使用 WireGuard
无需公网 IP,突破访问瓶颈:通过 VPS 中转部署,轻松绕过运营商限制。
部署简单、安全可靠:配置类似 SSH、使用现代加密算法;NAS 容器或套件部署便捷。
性能优越、资源占用低:传输效率高,适合家庭场景甚至嵌入式硬件。
架构灵活、可扩展:Mesh 或中心结构均可,适合多人协作或多设备访问场景。
📖本教程通用,部署在群晖上只是一个演示,其他Linux系统上通用~
网络拓扑规划
在组网前,我们需要先确定每个节点的 WireGuard 内网 IP 以及对应的角色。
WireGuard 内网网段使用
10.0.0.0/24。
Server 作为中转路由器,流量走向为:PC → Server → NAS。对应的密钥信息示例:
Address 与 AllowedIPs 的区别
很多初学者会混淆 Address 和 AllowedIPs,我们用例子来解释:
1. 服务端 10.0.0.1/24
配置:
[Interface]
Address = 10.0.0.1/24[Interface]是服务端10.0.0.1:表示分配给服务端虚拟网卡 wg0 的地址。/24:表示这个虚拟子网掩码是 255.255.255.0,也就是说服务端的 WireGuard 网络是 10.0.0.0 - 10.0.0.255 这一整段。意义:服务端通常要作为“网关”,因此要声明整个 10.0.0.0/24 的子网,方便管理和路由多个客户端。
2. 客户端 10.0.0.2/32
配置:
[Peer]
AllowedIPs = 10.0.0.2/32[Peer]是客户端10.0.0.2:表示分配给这个客户端的 IP。/32:表示这是一个单独的 IP,不是一个网段。意义:客户端只需要知道“我就是 10.0.0.2”,而不需要声明整个子网。
3. 为什么要这样做?
避免冲突:服务端掌管整个虚拟网段(10.0.0.0/24),客户端只认领自己的一个地址(10.0.0.x/32)。
路由规则不同:服务端负责处理整个虚拟子网的路由(10.0.0.0/24),才能转发客户端之间的流量,客户端只需连上网关,不必关心整个网段,因此用 /32。
安全性:客户端配置 /32,可以防止它误占网段,服务端集中分配,统一管理。
📌 形象比喻:
服务端(10.0.0.1/24)就像一个小区物业,声明“我管理 10.0.0 这一整条街”。
客户端(10.0.0.2/32)就像住户,只认领自己家门牌号“10.0.0.2”。
部署教程
一、服务端安装 WireGuard
购买云服务器(低价云服务器点这里),安装Linux系统(演示Debian11)。
查看网卡名,就是你设备IP地址的那一个,默认的基本都是
eth0:ip addr # 下面作为演示 root@hcss-ecs-4063:~# ip addr----《《《查看命令 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000----《《《《最前面的eth0就是网卡名 link/ether fa:16:3e:22:86:6e brd ff:ff:ff:ff:ff:ff altname enp0s3 altname ens3 inet 192.168.12.244/20 brd 192.168.15.255 scope global dynamic noprefixroute eth0----《《《《服务器的局域网IP valid_lft 315307404sec preferred_lft 315307404sec inet6 fe80::5b48:c5b3:6a35:da81/64 scope link noprefixroute valid_lft forever preferred_lft forever root@hcss-ecs-4063:~#更新系统并安装 WireGuard:
# 如果一次性执行失败就把这条命令分开执行。 apt update && apt install -y wireguard检查安装是否成功:
wg --help进入WireGuard配置目录:
cd /etc/wireguard/
二、生成密钥对
设置权限掩码:
# 设置权限掩码,保证生成的文件权限为 600(私钥只能自己读写) umask 077生成服务端私钥和公钥:
# 生成服务端私钥,同时将其写入 服务端设备名_private.key # tee 命令会把私钥保存到文件,并继续传递给下一条命令生成公钥。 # 格式如下 wg genkey | tee 服务端设备名_private.key | wg pubkey > 服务端备名_public.key wg genkey | tee server_private.key | wg pubkey > server_public.key生成客户端密钥对(例如 NAS 或用户设备,演示直接在服务端生成,你也可以自行在对应的连接端生成。)
# 生成客户端私钥,同时将其写入 连接设备名_private.key # tee 命令会把私钥保存到文件,并继续传递给下一条命令生成公钥。 # 格式如下 wg genkey | tee 连接设备名_private.key | wg pubkey > 连接设备名_public.key # 例如生成一个NAS的配置信息 wg genkey | tee nas_private.key | wg pubkey > nas_public.key # 例如生成一个电脑PC的配置信息 wg genkey | tee pc_private.key | wg pubkey > pc_public.key # 例如生成一个用户user1的配置信息 wg genkey | tee user1_private.key | wg pubkey > user1_public.key查看生成的密钥对文件
ls查看密钥对文件信息,每一个都查看,然后将信息复制出来记录好,标记分清哪个是哪个。
# 格式如下 # cat 文件名 cat server_private.key
📌 说明
umask 077 → 确保生成的私钥文件权限是
-rw-------,否则会出现警告。私钥文件:
server_private.key、client_private.key→ 只能保存在各自设备上,绝不能外泄。公钥文件:
server_public.key、client_public.key→ 可以拷贝到对端配置中使用。每个设备都要有一对密钥,才能相互认证。
三、编辑服务端配置
在当前路径下编辑
wg0.conf,你可以自由的更改wg0这个名称,更改后后续的教程都要修改此名称。
例如你是在服务端配置的,可以把wg0.conf换成server.conf,便于区分。vi wg0.conf按字母
i键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc键退出编辑模式,输入:wq保存并退出。(排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)
# Peer就是连接用户信息,你想多少个用户就创建并添加多少个。 # 一个连接用户分配一个内网IP,不可重复。 [Interface] # 服务端内网IP Address = 10.0.0.1/24 ListenPort = 51820 # 服务端私钥 PrivateKey = sCPQ+A5C3dWV5BwJVivIObaVhUg8CJ9lK4s3b2DFH2Y= # 【开启转发并做 NAT(允许组网的设备通过服务器中转,进行连接互访。)】 # 【这里 sysctl -w 的写法会影响 wg-quick,在 up 过程中失败,所以接口最后停在 DOWN。】 # 【更推荐的写法是:在 /etc/sysctl.conf 里永久打开转发,而不是放在 PostUp/PostDown。】 # 【所以下面两个仅作为网络中铺天盖地的错误教程提醒,已注释掉。】 #PostUp = sysctl -w net.ipv4.ip_forward=1; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE #PostDown = sysctl -w net.ipv4.ip_forward=0; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE # NAS 节点 [Peer] # NAS端公钥 PublicKey = pmpvMUfokdfrnpinEyPLls+4J7PnP8agPhaeTkg8ghU= # 为连接端分配内网IP AllowedIPs = 10.0.0.2/32 # PC 节点 [Peer] # PC端公钥 PublicKey = fKt26/RWexHnmRIqilKw1m0vmzWlHptMnSWKf40QAF0= # 为连接端分配内网IP AllowedIPs = 10.0.0.3/32开启永久打开 IP 转发(允许连接用户访问组网的其他设备,否则只能访问服务端。):
# 开启永久打开 IP 转发 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # 使配置生效 sysctl -p确认是否成功
sysctl net.ipv4.ip_forward # 这条应该返回参数= 1确保防火墙允许流量
Ubuntu/Debian 云服务器(服务端):# 如已安装ufw防火墙则执行,默认未安装则不执行这一条。 sudo ufw allow 51820/udp # 你的配置文件如果是wg0就执行下面的,如果自己设置的是其他配置名就将wg0换成你设置的。 sudo iptables -A FORWARD -i wg0 -j ACCEPT sudo iptables -A FORWARD -o wg0 -j ACCEPT启动服务:
systemctl enable wg-quick@wg0 systemctl start wg-quick@wg0确认状态:
sudo wg show
四、配置云服务器安全组
演示是在华为云服务器上部署的,每个云服务器的设置页面不同,这里只讲设置。
WireGuard的默认端口是UDP 51820,你也可以在配置文件中更改,防止运营商策略限制。
在华为云服务器上配置 WireGuard (UDP 51820 端口) 时,主要是考虑 客户端访问到服务器 的方向。
✅ 正确做法:
入口方向 (Inbound):必须放行 UDP 51820,否则外部客户端无法连上你的 WireGuard 服务。
出口方向 (Outbound):一般默认是放行所有端口的,如果没有额外限制可以不用管。如果你的安全组对出站端口也有限制,那就需要同时放行 UDP 51820 的出口。
📌 总结:
入口方向:UDP 51820 必须放行(客户端 → 服务器)。
出口方向:通常默认放通,无需设置;若有限制,则也需要放行 UDP 51820。
NAS 配置(群晖)
打开群晖的SSH功能,使用终端软件进行连接,并切换到root状态下。

安装 WireGuard(套件中心 或 Docker)。

该套件需要root权限启动服务:
sudo /var/packages/WireGuard/scripts/start进入wireguard目录,如果不存在就创建后再进入。
# 进入wireguard目录 cd /etc/wireguard/ # 创建wireguard目录 mkdir -p /etc/wireguard在wireguard目录内编辑配置文件,这个
wg0.conf文件名内的wg0仍然是可以自己按需命名。vi wg0.conf按字母
i键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc键退出编辑模式,输入:wq保存并退出。(排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)
[Interface] # NAS端私钥 PrivateKey = KGZcDN3ACNH2vX+wB2FQ1goAru+zhuS+SMLtu8ptRkw= # 客户端虚拟内网IP,一个设备一个IP,可自行更改。 Address = 10.0.0.2/32 [Peer] # 服务端公钥 PublicKey = Eok/Srf+STSXwOnRjHQyZ+4GpodvzOEytRPnKH2I+3g= # 服务端公网IP和端口 Endpoint = 123.60.166.144:51820 # 允许访问的网段 (内网段) AllowedIPs = 10.0.0.0/24 # 保持心跳,避免 NAT 超时 PersistentKeepalive = 25
启动:
wg-quick up wg0查看状态:
sudo wg showPING一下服务端看能不能PING通
ping 10.0.0.1
PC 配置(Windows 客户端)
安装并打开WireGuard 客户端,点击左下角的新建空隧道。
安装时客户端会从GitHub拉取文件,如果网络差的可以看这篇教程科学上网,解决程序无法安装的问题。
将下面的配置文件按需修改后粘贴上去:
[Interface] # PC端私钥 PrivateKey = WPA0c08HXXVteLGgQoxCD5wElYT7A/Yp5mfbHmbHRlM= # 客户端虚拟内网IP Address = 10.0.0.3/32 # 可选,设置DNS #DNS = 223.5.5.5 [Peer] # 服务端公钥 PublicKey = Eok/Srf+STSXwOnRjHQyZ+4GpodvzOEytRPnKH2I+3g= # 服务端公网IP和端口 Endpoint = 123.60.166.144:51820 # 允许访问的网段 (内网段) AllowedIPs = 10.0.0.0/24 # 保持心跳,避免 NAT 超时 PersistentKeepalive = 25演示截图

测试连接
在 PC 上执行命令:
ping 10.0.0.1 ping 10.0.0.2能成功返回,说明组网配置完成,也不影响当前网络连接。

访问组网后的局域网设备就是输入虚拟局域网设备IP+端口,例如访问组网设备中的群晖。
http://10.0.0.2:5000
手机配置
在Windows客户端上将配置文件一个个添加测试好之后,把配置文件导出。
手机上下载客户端,导入配置文件,连接即可。
相关地址
WireGuard官网:https://zh-wireguard.com/
WireGuard客户端下载地址:https://www.wireguard.com/install/
synology-wireguard套件:https://github.com/runfalk/synology-wireguard
WireGuard客户端网盘下载地址:https://pan.quark.cn/s/0dac1d0b95ca?pwd=wVEb
文末

👇👇👇
- 感谢你赐予我前进的力量

