ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

EasyTier实战:去中心化异地组网与虚拟局域网搭建指南

EasyTier实战:去中心化异地组网与虚拟局域网搭建指南 我最近把家里 NAS、办公室台式机和一台常年开着的云主机用 EasyTier 拉进了同一个虚拟局域网。以前想从外面拿家里文件要么开端口映射要么依赖某台固定服务器转发心里总是没底。EasyTier 是一个强调去中心化的异地组网工具它没有固定主节点设备之间能直连就直连不能直连再由中转节点帮忙配置起来比我想象中简单。这篇文章不是官方文档是我从踩坑到跑通全过程的完整使用记录包括为什么放弃老方案、怎么部署、怎么排查问题适合正在折腾异地组网、想给多台设备做内网互通的人参考。1. 为什么选EasyTier去中心化异地组网的选型思考1.1 传统思路为什么越组越累先说说我经历过的旧方案。第一种是端口映射。大多数家用宽带没有公网 IPv4即使路由器支持 DMZ运营商分配的也是一个大内网地址端口映射只能作用在自己的小路由器上外人根本访问不到。即便你真拿到公网 IP把 SSH、文件服务一个个暴露出去防火墙规则会越堆越乱任何一款服务有漏洞整台设备都暴露在公网扫描之下。我最初就是这么折腾的最后连自己都分不清哪个端口对应哪个服务每次调整都要重新梳理一遍规则。后来我转向了中心化组网思路找一台有公网 IP 的服务器所有设备都主动连它由它来做转发。这种方式确实稳定但瓶颈也很明显。总带宽受限于服务器延迟要多跳一次而且这台服务器一旦停机所有设备之间就彻底失联。尤其像我这种只租了低价云主机的人带宽也就几 Mbps传大文件根本跑不动更别说多台设备同时互访了。我要的其实是另一种状态设备与设备之间优先直连只有直连失败才找服务器帮忙没有哪个节点是离了就不行的。在这个背景下我开始认真看“去中心化异地组网”这个方向最后把重点落在 EasyTier 上。它给我的第一印象是这不是在搭一个中心服务而是把设备织成一张网。1.2 EasyTier的核心机制去中心化和P2P直连EasyTier 的基本工作方式可以这样理解你在一台设备上运行 easytier-core它会创建一块虚拟网卡并把这台设备变成一个虚拟网络上的节点。多个节点通过同一个网络名称和网络密钥聚到一张网里节点之间会周期性交换路由信息尝试用 P2P 打洞建立直接连接如果打洞失败再走一个可用的中继节点。节点之间不仅可以直连还可以帮其他节点转发流量也就是说每个节点既是客户端也可能承担路由功能。它并不是完全不要服务器而是把服务器角色弱化成了“通讯录”。协调节点只帮你找到对方数据不一定要经过它。这就是去中心化的意义任何单个节点离线其他节点仍可以通过别的路径互联。打个比方传统方式像所有快递都去县城分拣中心转一圈EasyTier 则像每个村的驿站之间先尝试直达不行再就近中转。只要路径不是唯一的网络就不会被某个点卡死。我实际使用下来这种设计的最大好处是抗故障能力强。云主机临时重启已经建立好的直连隧道不会断就算断了节点之间也会重新协商而不是集体掉线。1.3 哪些场景适合哪些别硬上以我的使用经验它特别适合三类场景。第一类是远程访问家里的 NAS、摄像头、监控这类轻量服务流量不大延迟不敏感第二类是把多台云主机和本地电脑放到同一张网里方便直接走内网 IP 连 SSH不用把端口一个个暴露到公网第三类是临时给外部设备开一个入口比如出差时把笔记本加入虚拟网直接访问办公室内网资源。不太适合的场景也有。它本质上是“尽力而为”的组网走中继时延迟和吞吐都取决于中继节点不适合追求极致性能的实时应用比如游戏串流或大文件实时同步。如果两个节点都在非常严格的对称 NAT 后面打洞基本没戏必须有稳定中继。另外公共协调节点毕竟不是私有基础设施对隐私要求特别高的环境最好自建中继而不是依赖公共节点。2. 部署前必须搞懂的几个概念2.1 节点、虚拟IP和虚拟网卡到底怎么理解刚开始接触时我总把节点和服务器混在一起。在 EasyTier 里任何一台运行了 easytier-core 的设备都是一个节点不管它有没有公网 IP。每个节点启动后系统里会多出一块虚拟网卡并分配一个虚拟IP比如 10.144.0.11。这个虚拟IP不是物理网卡的IP只有虚拟网内的其他节点才能直接访问。可以把它理解成每个节点都往虚拟网络里插了一根网线这根网线的另一端连着一个虚拟交换机。数据包从虚拟网卡出来由 easytier-core 封装进正常的 UDP/TCP 包再通过物理网络发到目标节点目标节点解包后放进自己的虚拟网卡。对上层应用来说感觉就是两台机器被一根看不见的网线连起来 IP 变了其他行为和在局域网里几乎一样。这里有个容易踩的坑虚拟网段最好不要和现有物理局域网段冲突。如果家里路由器用的是 192.168.1.0/24虚拟网段就别再用 192.168.1.0/24否则路由表会打架。我习惯用 10.144.0.0/24 这类私网段和家庭、办公室常见的 192.168 网段错开。2.2 TUN模式和TAP模式的区别EasyTier 支持虚拟网卡的不同工作模式一般会看到 TUN 和 TAP 两种。TUN 工作在三层只处理 IP 包适合 IP 访问、端口访问这些常见需求TAP 工作在二层会把整个以太网帧都封装进去能看到广播包但开销更大也更容易出现驱动兼容性问题。我的建议是绝大多数情况下用 TUN 就够了。不管是访问 NAS、连 SSH、访问服务端口TUN 模式都能覆盖。只有在需要使用广播、ARP 嗅探这类特殊协议时才考虑 TAP。我在 Windows 上测试过 TAP驱动偶尔会不稳定虚拟网卡重启后要等一会儿才能恢复所以后续都固定用 TUN。另外TUN 模式需要在系统里安装并启动虚拟网卡驱动Linux 下一般需要 root 权限Windows 下需要管理员权限。第一次启动如果系统弹出安装驱动提示选择允许就好。如果被安全软件拦截需要先临时放开网络防护。2.3 配置文件选型YAML和命令行参数easytier-core 既支持命令行参数也支持指定配置文件。命令行适合临时验证节点一多建议用配置文件因为每个节点只是少数几行参数不同写成文件后清晰、可保存、重启能复现。我习惯用 YAML 格式把网络名称、密钥、虚拟IP、监听端口、对端地址全部显式写出来。重点说一下网络密钥 network_secret。它是整张虚拟网络的钥匙节点加入时会校验密钥一致才放行数据流在传输过程中也使用基于它的密钥进行加密。换句话说如果有人知道了 network_secret他就能加入你的虚拟网看到虚拟网内通信。所以别用太弱的密码也别把它写在会被抓屏的聊天窗口里。还有管理接口 rpc_portal这个接口是给 easytier-cli 这类管理工具用的。我通常只让它监听在 127.0.0.1绝不暴露公网。否则别人如果知道管理端口可能直接操作你的节点。3. 从零跑通一个三节点组网3.1 先想清楚拓扑和虚拟IP我建议第一次搭建时先画一张拓扑表再动手。我实际用的拓扑如下节点名运行位置物理网段虚拟IPcloud云主机有公网IP无特殊局域网10.144.0.10home-nas家里局域网192.168.31.0/2410.144.0.11office-pc办公室网络通过DHCP分配10.144.0.12云主机在这里有两个作用作为大家都认识的公网入口帮助其他节点完成初始发现同时也可以作为中继节点在直连失败时转发流量。但它不是一个必需的主节点。家里 NAS 打开子网代理后可以让整个虚拟网访问 192.168.31.0/24 上的物理设备办公室电脑作为普通客户端加入。虚拟IP最好固定不要依赖自动分配。节点多了以后固定IP方便写路由和防火墙规则。三台设备我都用了 10.144.0.0/24 网段按角色分配尾号记忆成本很低。3.2 安装二进制和验证EasyTier 各个平台都有预编译二进制包。去 release 页面下载对应平台的压缩包Linux 解压后得到 easytier-core 和 easytier-cli 两个文件放进 /usr/local/bin/ 即可。Windows 同理把 exe 放到固定目录后面配开机自启会用到。# Linux 下解压并安装到 /usr/local/bin文件名以实际下载为准 tar -xzf easytier-linux-x86_64.tar.gz sudo mv easytier-core easytier-cli /usr/local/bin/ which easytier-coreWindows 下建议用管理员权限打开 CMD 或 PowerShell先运行 easytier-core --help 确认驱动初始化正常。如果系统提示是否安装虚拟网卡驱动选择允许。我第一次在 Windows 上就是没注意权限双击运行直接报错后来才发现必须以管理员身份运行。3.3 编写配置文件并启动三台节点的配置主体结构相同只有 instance_name、ipv4、peers 有差异。云主机因为要承担公网入口和中继角色listeners 里同时监听 TCP 和 UDP 11010 端口方便不同 NAT 类型的设备连接。# 云主机配置文件 cloud.yaml instance_name: cloud network_name: mylab network_secret: REPLACE_WITH_A_LONG_RANDOM_STRING ipv4: 10.144.0.10 listeners: - tcp://0.0.0.0:11010 - udp://0.0.0.0:11010 rpc_portal: 127.0.0.1:15888家里 NAS 这台节点除了加入网络还要把物理局域网共享出来所以在配置里加了一条 proxy_networks把 192.168.31.0/24 整体代理到虚拟网。它主动连接的 peers 指向云主机。# 家里NAS配置文件 home.yaml instance_name: home-nas network_name: mylab network_secret: REPLACE_WITH_A_LONG_RANDOM_STRING ipv4: 10.144.0.11 listeners: - udp://0.0.0.0:11010 peers: - tcp://your-cloud-host.com:11010 proxy_networks: - 192.168.31.0/24 rpc_portal: 127.0.0.1:15888办公室电脑配置最简单不需要代理网段只加入虚拟网并指向云主机。# 办公室电脑配置文件 office.yaml instance_name: office-pc network_name: mylab network_secret: REPLACE_WITH_A_LONG_RANDOM_STRING ipv4: 10.144.0.12 listeners: - udp://0.0.0.0:11010 peers: - tcp://your-cloud-host.com:11010 rpc_portal: 127.0.0.1:15888启动命令分别是sudo easytier-core -c cloud.yaml sudo easytier-core -c home.yaml easytier-core -c office.yaml # Windows 需要用管理员 CMD我建议的启动顺序是先启动云主机再启动其他节点。这样新节点一启动就能通过 peers 找到云主机快速交换节点信息。如果顺序反了设备之间会多等一段时间重新发现。3.4 用 easytier-cli 检查联通性等所有节点都启动后用管理工具确认状态。我常用两条命令一个是查看节点列表 easytier-cli node list另一个是查看隧道和延迟 easytier-cli peer list。输出里能看到每个节点的虚拟IP、在线状态以及当前隧道的 RTT 和路径类型。如果命令提示连接被拒绝先检查 easytier-core 进程是不是真的起来了再确认 rpc_portal 是否监听在 127.0.0.1:15888。CLI 默认读取本机管理端口不需要额外认证。我一开始把 rpc_portal 写成了 0.0.0.0:15888结果既暴露了公网又让 CLI 连不上后来改成 127.0.0.1 才消停。联通测试直接 ping 虚拟IPping 10.144.0.10 # 测云主机 ping 10.144.0.11 # 测家里NAS ping 10.144.0.12 # 测办公室电脑从办公室电脑 ping 10.144.0.11如果延迟在几毫秒到十几毫秒说明两边成功打洞流量走了 P2P。如果延迟猛然跳到几十毫秒甚至一百多毫秒大概率是走了云主机中转。后面会讲怎么进一步确认和优化。4. 进阶玩法子网代理与去中心化路由4.1 把整段局域网也共享进虚拟网默认情况下只有安装了 easytier-core 的设备才能通过虚拟IP互相访问。家里 NAS 自身能被访问但同一局域网下的打印机、路由器管理页、智能电视这类物理设备虚拟网里其他节点还是够不到。这时就要用子网代理。home.yaml 里的 proxy_networks 字段就是干这个的。它告诉整个虚拟网192.168.31.0/24 这个网段可以由 home-nas 节点代为访问。虚拟网内其他节点访问这个网段时数据会封装后发给 home-nasNAS 再解封转发给物理局域网设备。对于办公室电脑来说访问 192.168.31.100 就像访问本地邻居一样完全不用感知底层隧道。启用代理后要先做两个检查。一个是确认被代理的物理网段和虚拟网段不冲突另一个是确认代理设备本身是可信的因为一旦开了代理虚拟网内所有节点都可能访问你家里的整个网段。如果家里有智能门锁之类敏感设备建议不要加进被代理网段或者单独拆一个虚拟网络出来。测试子网代理是否成功可以在办公室电脑上 ping 家里 NAS 的物理IPping 192.168.31.100通了说明代理生效。如果不同问题多半出在 NAS 的系统路由上需要确认 NAS 开启了 IP 转发。4.2 多节点路由和去中心化的真实效果三节点组网稳定后可以做一个小实验来感受去中心化的意义把云主机上的 easytier-core 进程停掉然后观察办公室电脑和家里 NAS 之间是否还能互访。如果之前已经建立了 P2P 直连那么这次停机不会造成任何影响如果之前依赖云主机中转连接会短暂中断但只要还有其他可达路径节点之间会自动重新协商路由。我实际测过这样的场景办公室电脑最初通过云主机认识家里 NAS后来两边成功打洞。某天云主机因为内存不足被系统重启整个过程里办公室电脑和家里 NAS 的 ping 没有掉过一个包。这就是去中心化路由带来的稳定性链路不是写死的而是在节点状态变化时动态收敛。多节点冗余也有代价。节点越多维护量越大出现子网重叠、密钥不统一的风险也越高。所以我的建议是按需加节点不要为了“去中心化”而把一堆设备塞进同一张网。两三个关键节点就能满足大部分场景。4.3 需要注意的安全边界子网代理带来便利的同时也明显扩大了暴露面。虚拟网内的每一个节点都可能访问你代理出来的物理网段所以不要随便把不信任的设备加进同一个 network_name。我建议把虚拟网络拆成多个给家里自用的一个给办公合作设备的一个密钥分开别图省事全塞一起。rpc_portal 前面提过只监听 127.0.0.1。如果发现节点所在机器 CPU 占用异常升高先检查是否有人在虚拟网内进行扫描再检查 rpc_portal 是否意外暴露到了公网。多节点组网里一台机器被入侵可能影响整张网所以承载虚拟网络的设备本身要有基本的安全基线比如系统更新、防火墙、弱密码清理。5. 常见问题与排查技巧实录5.1 打洞失败、延迟高的排查我遇到过的最典型问题是虚拟IP能 ping 通但延迟明显偏高。这时先用 easytier-cli peer list 看路径类型确认到底是 p2p 还是 relay。如果是 relay说明打洞失败或者还没有建立直连。可能的原因包括网络里有严格对称 NAT、UDP 被运营商限制、防火墙没有放行监听端口。现象可能原因处理方法能ping通但延迟高流量走了中继没直连检查路径类型尝试换端口、加稳定公网中继时通时不通UDP被限或NAT映射超时改用TCP监听增加保活减少空闲断连完全不通密钥不一致、防火墙未放行核对 network_secret、检查监听端口和防火墙高延迟且持续抖动中继节点带宽不足自建中继或找一台距离更近的公网节点如果确认当前是 relay 且延迟不可接受最好加一台距离双方都不远的云主机作为专用中继。默认公共协调节点虽然能用但地理位置和带宽都不可控延迟可能很高。我加了一台国内云主机做中继后办公室到家里的延迟从 90ms 降到了 30ms 左右。5.2 配置不生效、端口冲突与驱动问题EasyTier 的配置文件不会热加载每次修改后都必须重启进程。我踩过一次坑修改了虚拟IP但旧进程没完全退出两个实例同时开着端口被占用新配置完全没生效。后来统一用 systemd 管理重启时先 stop 再 start就再没遇到这个问题。如果在 Windows 上启动报错说不能创建虚拟网卡多半是驱动被安全软件拦截或者 TUN 驱动不兼容。Win10/11 上安装 wintun 驱动前先把杀毒软件的网络防护临时关掉装好后再打开。我第一次装的时候被拦截了几次最后去驱动目录手动删了旧版本才成功。端口占用也是常见问题。Linux 下可以用 lsof -i :11010 查看Windows 用 netstat -ano | findstr 11010。如果端口被其他程序占用修改配置里的监听端口即可不要直接 kill 掉占用进程避免破坏其他服务。5.3 开机自启和进程守护Linux 下别让 easytier-core 裸跑在 shell 里最好写成 systemd 服务。我用的单元文件大致如下[Unit] DescriptionEasyTier Service Afternetwork-online.target Wantsnetwork-online.target [Service] ExecStart/usr/local/bin/easytier-core -c /etc/easytier/home.yaml Restartalways RestartSec5 [Install] WantedBymulti-user.target启动并设置开机自启sudo systemctl daemon-reload sudo systemctl enable --now easytier sudo systemctl status easytierWindows 下可以用任务计划程序触发器设为“计算机启动时”操作指向 easytier-core.exe并勾选“使用最高权限运行”。这一步很重要否则虚拟网卡无法创建。我之前没勾选权限重启后节点一直离线看日志才定位到是权限不足。5.4 版本升级和配置备份EasyTier 迭代速度不算慢升级前先把配置文件备份一份。我通常的顺序是停服务、备份旧配置、替换二进制、执行 easytier-core --help 看一下参数是否有变动然后再启动。如果新版配置格式不兼容日志里会有明显提示对照官方文档改字段即可。没必要追新跑稳定的版本就继续用着。如果节点很多network_secret 要统一管理建议放在密码管理器里。虚拟网的钥匙就是它一旦泄露整个虚拟网都不安全。更新密钥时需要同时改所有节点配置所以我会固定一套密钥管理流程先备好新密钥再逐台更新配置并重启。这个过程要在低峰期做否则节点间会有一段时间互相连不上。我目前这套三节点已经稳定跑了两三周唯一一次断线是家里宽带重启后 NAS 上的 easytier 没自动拉起来后来补了 systemd 就没有再犯。回过头看EasyTier 把去中心化异地组网的门槛降到了个人也能轻松驾驭的程度关键是先让两台设备跑通再加子网代理最后再考虑高可用和性能优化。如果你正准备折腾建议把 network_secret 设成随机长字符串并且从云主机开始启动后续节点加入都会简单很多。
返回列表