在远程办公需求激增、家庭数据管理愈发重要的当下,如何安全、高效地访问家中 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系统上通用~


网络拓扑规划

  1. 在组网前,我们需要先确定每个节点的 WireGuard 内网 IP 以及对应的角色。

    节点

    说明

    公网 IP:端口 (UDP)

    WireGuard 内网 IP

    Server

    阿里云服务器(VPN Hub)

    123.60.166.144:51820

    10.0.0.1

    NAS

    群晖 NAS(无公网 IP)

    -

    10.0.0.2

    PC

    Windows11(或手机)

    -

    10.0.0.3

    张三

    Windows11(或手机)

    10.0.0.4

    李四

    Windows11(或手机)

    10.0.0.5

  2. WireGuard 内网网段使用 10.0.0.0/24
    Server 作为中转路由器,流量走向为:PC → Server → NAS

  3. 对应的密钥信息示例:

    节点

    内网 IP

    公钥(示例)

    私钥(示例)

    Server

    10.0.0.1/24

    Eok/Srf+STSXwOnRjHQyZ+4GpodvzOEytRPnKH2I+3g=

    sCPQ+A5C3dWV5BwJVivIObaVhUg8CJ9lK4s3b2DFH2Y=

    NAS

    10.0.0.2/32

    pmpvMUfokdfrnpinEyPLls+4J7PnP8agPhaeTkg8ghU=

    KGZcDN3ACNH2vX+wB2FQ1goAru+zhuS+SMLtu8ptRkw=

    PC

    10.0.0.3/32

    fKt26/RWexHnmRIqilKw1m0vmzWlHptMnSWKf40QAF0=

    WPA0c08HXXVteLGgQoxCD5wElYT7A/Yp5mfbHmbHRlM=


Address 与 AllowedIPs 的区别

很多初学者会混淆 AddressAllowedIPs,我们用例子来解释:

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

  1. 购买云服务器(低价云服务器点这里),安装Linux系统(演示Debian11)。

  2. 查看网卡名,就是你设备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:~#
  3. 更新系统并安装 WireGuard:

    # 如果一次性执行失败就把这条命令分开执行。
    
    apt update && apt install -y wireguard
  4. 检查安装是否成功:

    wg --help
  5. 进入WireGuard配置目录:

    cd /etc/wireguard/

二、生成密钥对

  1. 设置权限掩码:

    # 设置权限掩码,保证生成的文件权限为 600(私钥只能自己读写)
    
    umask 077
  2. 生成服务端私钥和公钥:

    # 生成服务端私钥,同时将其写入 服务端设备名_private.key
    # tee 命令会把私钥保存到文件,并继续传递给下一条命令生成公钥。
    # 格式如下
    wg genkey | tee 服务端设备名_private.key | wg pubkey > 服务端备名_public.key
    
    wg genkey | tee server_private.key | wg pubkey > server_public.key
  3. 生成客户端密钥对(例如 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
  4. 查看生成的密钥对文件

    ls
  5. 查看密钥对文件信息,每一个都查看,然后将信息复制出来记录好,标记分清哪个是哪个。

    # 格式如下
    # cat 文件名
    
    cat server_private.key

📌 说明

  • umask 077 → 确保生成的私钥文件权限是 -rw-------,否则会出现警告。

  • 私钥文件server_private.keyclient_private.key → 只能保存在各自设备上,绝不能外泄。

  • 公钥文件server_public.keyclient_public.key → 可以拷贝到对端配置中使用。

  • 每个设备都要有一对密钥,才能相互认证。


三、编辑服务端配置

  1. 在当前路径下编辑 wg0.conf,你可以自由的更改wg0这个名称,更改后后续的教程都要修改此名称。
    例如你是在服务端配置的,可以把wg0.conf换成server.conf,便于区分。

    vi wg0.conf
  2. 按字母i键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc键退出编辑模式,输入:wq保存并退出。

    (排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)