Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


大家好,我是飘雷。

对于咱们玩 NAS 的老油条来说,异地组网、外网远程访问一直是个绝对的刚需。以前很多朋友可能都折腾过 Tailscale、ZeroTier One,或者为了追求全权掌控,硬着头皮买云服务器去搭建 Headscale,但是,这些方案多多少少都有点让人难受的痛点。

像我之前在用的 ZeroTier One,以及 Tailscale,它们的官方服务器全在国外,国内握手连接不仅有时候会比较慢,而且成功率难有保障,一旦遇到复杂的网络环境打洞失败,就会被迫走限速极其严重的 DERP 中继服务器,那速度简直让人抓狂。

而一些朋友选择自建 Headscale 的话,门槛又太高,像是买云服务器、配域名、搞证书、命令行操作等等等等,对很多只想安安静静用 NAS 的朋友来说,只是看看教程就会被劝退了。幸好最近我在 GitHub 上挖到了一款基于 Rust 语言编写的去中心化异地组网神器——EasyTier

https://github.com/EasyTier/EasyTier

在我的威联通 NAS 上试用了一段时间后,只能说这玩意儿完全可以作为比 Zerotier One 更好用的替代品,真的很香。

今天,飘雷就和大家深入聊聊 EasyTier,并且分享在NAS、PC和手机上异地组建虚拟内网的教程。

老规矩,强烈建议大家先点赞、收藏本文,以防后面折腾的时候找不到路!

为什么我极力推荐 EasyTier?

简单给大家盘一盘 EasyTier 的核心优势,看完你就知道它为什么在 GitHub 能拿到 11.5K 的收藏。

1. 此前市面上以 Zerotier One 为代表的绝大多数组网软件是中心化的,必须通过中心服务器进行握手才可以实现配对。而 EasyTier 可以实现纯粹的去中心化架构,不区分服务器和客户端,节点之间全部是对等联网,只要一个设备可以与虚拟网中任意一个节点通信,就可以加入虚拟网。

2. EasyTier 更适合墙内的网络环境,采用 UDP+TCP 双通道,对称型 NAT 突破率达 98%,优于 ZeroTier 的 UDP 单通道,也避免了 ZeroTier 默认中继服务器在国外导致的高延迟、不稳定问题。

3. 极简部署,不用去国外网站注册账号,也不用折腾什么网页授权,提供网页、客户端、命令行三种操作方式,满足不同用户需求,小白也能轻松搞定,而且完全免费,没有组网设备的数量限制。

4. 更灵活的协议与传输机制,原生支持 TCP/UDP/WireGuard,还可将 TCP 流量转为 KCP/QUIC 协议,提升高丢包环境下的传输稳定性,并且具有全链路零拷贝技术,数据面性能更强,尤其适合大文件传输。

5. EasyTier 还有更强的扩展性与兼容性,支持 WireGuard 客户端直接接入 EasyTier 网络,实现与现有 WireGuard 设备的互通,同时节点可共享子网供其他节点访问,轻松实现跨子网通信。而且它还支持 Win/MacOS/Linux/FreeBSD/Android/ 鸿蒙等多个平台,兼容 X86/ARM/MIPS 架构,适配路由器、NAS 等多种设备。

NAS 部署流程

这里我们来展示如何在威联通 NAS 上使用 Docker 形式部署 EasyTier,用到的设备是威联通最新的 8 盘位旗舰新品 Qu805。

这里我强烈推荐大家使用 Docker Compose 的方式来部署,一键复制粘贴代码即可,参数修改清晰可见,非常方便。其他配置方法可以参考 EasyTier 的官网文档,讲得很清晰:

https://easytier.cn/

打开威联通 Container Station,点击左侧的「应用程序」,然后点击右侧黑色「创建」按钮,输入以下代码:

services:
  # 附加神器:Watchtower (用于自动静默更新 EasyTier 镜像,保持最新打洞协议)
  watchtower:
    image: nickfedor/watchtower
    container_name: watchtower
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_NO_STARTUP_MESSAGE=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 3600 --cleanup --label-enable


  easytier:
    image: easytier/easytier:latest
    hostname: easytier
    container_name: easytier
    labels:
      # 配合上方的 watchtower,只允许更新带有此标签的容器
      com.centurylinklabs.watchtower.enable: 'true'
    restart: unless-stopped
    network_mode: host
    
    # 摒弃高风险的 privileged 特权模式,采用精准权限控制
    cap_add:
      - NET_ADMIN
      - NET_RAW
    environment:
      - TZ=Asia/Shanghai
    devices:
      - /dev/net/tun:/dev/net/tun
    volumes:
      # 映射宿主机的 machine-id,确保每次重启容器 Node ID 绝对不变更!
      - /etc/machine-id:/etc/machine-id:ro
    
    command: >
      -i 10.144.144.10
      --hostname Qu805
      --network-name piaolei
      --network-secret 123
      -p tcp://8.148.29.206:11010
      -n 192.168.10.0/24

部署完成后,可以在 Contain Station 中看到正在运行的应用程序和容器:

由于参数较多,在 yaml 最后一段的 command 部分,我们着重做一下说明。

-i 10.144.144.10

这是你给 NAS 手动指定的虚拟内网中的固定 IP,其中 10.144.144.X 是我随便选的内网网段,大家可以根据自己的需求设置一个好记的。EasyTier 默认使用的是 -d 参数,虚拟 IP 会自动设置,不过个人觉得 NAS 这种设备还是用一个固定 IP 比较好记忆,所以选择了手动指定的方式。

--hostname Qu805

这是用于标识此设备的主机名,方便我们在节点列表中精准识别。

--network-name piaolei

这是用于标识这个虚拟内网络的网络名称,这里我随便将其命名为piaolei,大家在使用的时候要自己修改一下。

--network-secret 123

这是入网密码,用于验证此节点属于虚拟内网,我随便写了个 123,大家可以根据实际需求设置一个复杂一点儿的。

-p tcp://8.148.29.206:11010

这是用于握手的公共节点地址,大家也可以去 EasyTier 提供的公共服务器列表中进行查询替换:

https://easytier.gd.nkbpal.cn/status/easytier

当然如果自己的入网设备有比较固定的公网 IP 或者 DDNS 地址的话,那就可以在这里设置成自己的节点地址,实现完全的去中心化。

-n 192.168.10.0/24

这是对 NAS 用户来说非常香的子网代理功能,这里将其设置成 NAS 所在的实际物理局域网网段,比如你家主路由后台是 192.168.50.1,那就改成 192.168.50.0/24,配置好后,外网设备就能直接穿透进内网,远程管理路由器、PC 等其他设备,实现一机入网,全屋畅通。

PC 客户端虚拟组网

异地组网的意义就在于,我们可以把在外办公、或者在咖啡厅里摸鱼的电脑也拉进这个虚拟局域网里。这里我们以 Windows 电脑为例,官方提供了非常漂亮的 GUI 桌面图形版,对小白极其友好,Linux、MacOS 电脑的操作流程也很类似。

首先咱们前往 EasyTier 的 GitHub Release 页面,下载最新的 Windows 客户端 easytier-gui_2.6.4_x86-setup.exe。

安装并打开 EasyTier GUI,软件界面一目了然,非常直观,配置信息后点击「运行网络」即可加入虚拟内网。

虚拟 IPv4 地址处,可以手动填一个同网段的未分配 IP,例如 10.144.144.2;如果不填,EasyTier 也会通过 DHCP 自动为你分出一个。

网络名称、网络密码、初始节点等处,与 yaml 代码中最后 command 一段的参数意思相同,这里不再赘述。

此外在这里还有更多更详细的高级设置、端口转发和访问控制选项,大家可以根据自己的实际需要来选择是否勾选。

加入虚拟内网之后,可以在这里看到在网的其他节点的状态:

ping 一下刚才给 NAS 设置的虚拟内网 IP,实测可以完美连接:

手机等移动客户端虚拟组网

手机的安装与设置方式与 PC 端没啥区别,同样需要先去 EasyTier 的 GitHub Release 页面下载对应的安装包,比如安卓手机下载 app-arm64-release.apk,安装后即可进入配置页面,需要填写的信息也和 PC 端没啥差别。鸿蒙手机则可以去 AppGallery 里直接下载安装。

入网成功后,同样能看到这个虚拟内网中其他节点的信息,这一点比 ZeroTier 直观多了。

此外,别忘了我们在 yaml 代码里加入了子网代理参数:

 -n 192.168.10.0/24

现在,见证奇迹的时刻到了,即便我的手机正在使用 SIM 卡流量,此时在浏览器里直接输入我家软路由的实际 IP(比如 http://192.168.10.1),直接瞬间秒开,就在家里使用 WiFi 是一个效果。

有了这个功能,NAS 就可以替我们把外网所有发往家里内网的流量做好路由中转,出差在外想改个路由配置、控制下家里的智能家居,或者从办公室直接打印家里书房的文件,体验简直不要太爽。

用入网的电脑 ping 一下使用 SIM 卡流量的手机,延迟还是挺低的:

总结

折腾到这里,整个教程其实就差不多了。

如果你在老家、办公室、新房都有 NAS 或者可以使用 Docker 的设备,完全可以如法炮制,实现异地组建虚拟内网,安全且高效。

另外提醒一下,为了让 EasyTier 的 P2P 直连成功率更高,比较建议大家登录自己家里的主路由器后台,把 NAT 类型修改为 FullCone NAT 全锥形 NAT) 或开启 DMZ / UPnP。一旦两端设备实现 P2P 直连,异地拷贝文件的速度就只取决于你家宽带的上传极限了。

以上就是本期的全部内容,如果大家在部署过程中遇到什么问题,欢迎在评论区留言交流,我们下期再见!

> 中断久坐、科学多动,直接跟练让身体更健康 💪🏻

> 简单、好用、专注的写作软件,少数派为你呈现 🚀

3
2