type
status
date
slug
summary
tags
category
icon
password
最近出门的次数变得越来越多,在外出的时间,家里的网络维护以及内网数据资料的获取成为了一个新的难题。之前我也有尝试过使用Tailscale以及Zerotier等方式进行内网穿透回家,但是由于Zerotier和Tailscale的中心服务器都是在国外,同时父母家那边的网络由于是社区宽带,已经不知道NAT了多少次,所以远程管理的效果还差也很折磨。这次发现了一个新的内网穿透软件:EasyTier,可以在一定程度上缓解上述提到的问题。这篇文章进行一些EasyTier的配置讲解

📝 EasyTier 介绍
EasyTier是一个去中心化的VPN组网方案,由Rust和Tokio驱动。相对于Zerotier、Tailscale的区别也在于去中心化这个特点,客户端即服务端,处于不同网络环境下的客户端在组网的同时,也是服务端的一部分,提供基于RPC的中继能力。相比于Zerotier于Tailscale的中心化组网方案,EasyTier在具有多客户端的情况下,借助P2P异地组网,相比传统的中心化组网方案,成功率更高,可实现更好的内网穿透效果,更有效的利用家宽的上下行带宽。
EasyTier 特点
以下部分内容摘选自EasyTier的Github项目介绍页面
- 去中心化:无需依赖中心化服务,节点平等且独立。
- 安全:支持利用 WireGuard 加密通信,也支持 AES-GCM 加密保护中转流量。
- 高性能:全链路零拷贝,性能与主流组网软件相当。
- 跨平台:支持 MacOS/Linux/Windows/Android,未来将支持 IOS。可执行文件静态链接,部署简单。
- 无公网 IP 组网:支持利用共享的公网节点组网,
- NAT 穿透:支持基于 UDP 的 NAT 穿透,即使在复杂的网络环境下也能建立稳定的连接。(据说在NAT4-NAT4网络下也可能打洞成功)
- 子网代理(点对网):节点可以将可访问的网段作为代理暴露给 VPN 子网,允许其他节点通过该节点访问这些子网。
- 智能路由:根据流量智能选择链路,减少延迟,提高吞吐量。
- TCP 支持:在 UDP 受限的情况下,通过并发 TCP 链接提供可靠的数据传输,优化性能。
- 高可用性:支持多路径和在检测到高丢包率或网络错误时切换到健康路径。
- IPV6 支持:支持利用 IPV6 组网。
- 多协议类型: 支持使用 WebSocket、QUIC 等协议进行节点间通信。
- Web 管理界面:支持通过 Web 界面管理节点。
个人使用感受
目前我的网络环境为电信宽带,具有公网IPv4 + 公网IPv6,手机使用联通5G,正常情况下可以实现在建立连接之后3-5秒内实现P2P的内网穿透,不再借助中继服务器进行数据传输,同城延迟在50ms左右,如果是相同运营商的宽带,理论上同城延迟会更低。
同时,在CoalCloud(碳云)的VPS,在启用EasyTier作为节点后,与家里的Debian旁路网关和手机均可即时建立P2P连接,无需EasyTier提供公共服务器进行数据传输。
📝 EasyTier 安装方法
目前EasyTier提供了多种安装方式,以适应不同的系统平台,同时提供多种第三方工具,可用于对EasyTier节点进行管理,例如EasyTier Game ( Windows )、EasyTier Manager ( Windows )、luci-app-easytier ( OpenWrt )等。
我个人目前将EasyTier部署在家庭网络内的旁路网关上,并使用了点对网的子网代理,整体使用官方所提供的一键安装脚本。同时为了进行中继通信和在与
NAT44
网络内设备建立连接情况下,我通过Docker Compose方式将EasyTier也部署在了CoalCloud的VPS上。在旁路网关部署未使用Docker Compose的原因在于我需要使用点对网的子网代理,即通过旁路网关作为跳板,实现对局域网内其他设备的访问与管理,如果通过Docker实现,可能会增加网络的复杂性,所以只使用了脚本安装。EasyTier不区分服务端与客户端,所以的节点所使用的程序都是一样的,所以在了解以下基于Debian的节点安装及配置之后,可以举一反三,在其他设备进行配置。如果使用OpenWRT,可以尝试在软件仓库中搜索,大部分软件仓库均已收录EasyTier。
EasyTier 一键安装脚本
首先确保你的系统以及安装了
wget
和unzip
这两个必须的依赖,如果没有安装可通过如下命令安装(Debian、Ubuntu等使用apt进行软件包管理的系统):然后通过如下命令进行EasyTier的脚本一键安装:
默认脚本下载位置位于
/tmp
临时文件夹下,安装完成后可进行删除。EasyTier 基础配置
EasyTier安装后,默认的配置文件位于
/opt/easytier/config/default.conf
,下面列出我的配置文件宫参考,你也可以通过config_generator生成自己的配置文件:各项参数意义如下:
instance_name
: 实例名称instance_id
: 实例的uuid,可以使用config_generator生成ipv4
:当前设备的虚拟局域网IPv4地址,如果你需要手动为设备指定虚拟局域网的IPv4地址,则需要此项,否则可删除。dhcp
: 如果你需要手动为当前设备指定虚拟局域网IPv4地址,并已经包含了ipv4的参数项,则此项填写为false
,如果你希望自动为当前设备分配虚拟局域网IPv4地址,则填写true
.listeners
: 一般情况下无需改动。如果你希望使用不同的端口,则自行修改端口并对端口进行防火墙放行。rpc_portal
: 默认端口为0,在官方文档中表示默认会尝试使用15888
,但实际并没有使用,EasyTier启动后无法通过easytier-cli进行数据获取,报错信息如下所示。所以建议修改监听端口为15888
network_name
:虚拟局域网的名称。EasyTier是通过network_name
和network_secret
进行网络的识别与连接确认,所以需要客户端的network_name
和network_secret
完全一致。建议使用复杂一些的网络名称network_secret
:虚拟局域网的网络密钥。uri
:节点地址,可使用官方提供的节点(tcp://public.easytier.cn:11010
),如果你自建了VPS节点,也可填写tcp://IP:PORT
,默认端口为11010。也可以查看EasyTier 公共服务器列表,选择最适合自己网络环境的公共服务器节点。enable_kcp_proxy
:是否开启KCP代理,将TCP流量转换为KCP流量,提升传输速度与降低延迟。建议开启。latency_first
: 延迟优先,建议开启。enable_exit_node
:是否设置当前节点为出口节点。目前建议关闭,由于EasyTier无法进行DNS劫持,所以暂时无法像Tailscale或者Zerotier使用出口节点进行翻墙等科学上网操作。dev_name
: 设置tun网卡名称,如果你的设备具有多个程序在使用tun设备,那么建议修改一下名称,避免产生冲突。proxy_forward_by_system
: 使用系统转发替代EasyTier内置转发。相对来说性能会有所提高,但是你需要对防火墙有一定的了解,或者你的节点部署在局域网环境内,没有开启防火墙。
bind_device
: 没有在配置项中列出的部分。即是否绑定物理设备,如果你的机器使用了很多的虚拟网络设备,建议删除该项,使其绑定物理网卡,避免产生无法连接问题
use_smoltcp
: 是否使用用户态协议栈,避免操作系统防火墙导致的无法子网代理 / KCP 代理。个人目前是删除了该项,因为暂时没有发现因防火墙导致的无法子网代理问题,同时在开启用户态时,性能损耗较为严重。
relay_all_peer_rpc
: 转发所有对等节点的RPC数据包,帮助非当前虚拟局域网的其他节点建立连接。为了安全以及流量考虑,建议关闭或删除。
enable_encryption
: 是否禁用加密。false
为开启加密,true
为禁用加密,默认为false
。防火墙放行EasyTier端口
EasyTier默认监听端口为
11010
,如果你使用系统防火墙,需要对端口进行放行。同时如果部署在家庭网络内,需要在路由器的防火墙对11010
端口也需要进行放行操作(Forward)。EasyTier 运行命令
启动EasyTier
其中@default即使用defalt.conf配置文件,以下皆同。控制命令基于Systemd。
重启EasyTier
停止EasyTier
查看EasyTier运行状态
EasyTier-CLI命令
查看EasyTier已连接的节点
返回结果类似于如下,即已经建立连接的节点和目前的基本情况,包括是否使用P2P、延迟、丢包、NAT类型等:
查看EasyTier当前节点信息
返回结果大概与下面的信息相似,包括当前的虚拟局域网IPv4地址,子网代理范围,节点ID、公网IPv4地址、公网IPv6地址等。
EasyTier 子网代理
子网代理即点对网的组网方案,可通过一台跳板机进行局域网内其他设备的访问,且无需为局域网内其他设备配置EasyTier。例如你的EasyTier部署在主路由上,但在外面时候想访问家里的NAS,那么就需要点对网的组网方案。
EasyTier的点对网组网非常简单,在配置文件中增加如下部分:
cidr即你需要实现点对网组网的网段,例如我家里的局域网网段为
10.0.0.0/24
,那么即填写这个网段,如果你的是192.168.1.1
类似的局域网地址,那么对应的cidr为192.168.1.0/24
。🤗 总结归纳
目前在测试过程中还存在如下问题或未测试项:
- 出口节点目前不能代理DNS流量,即EasyTier无法对设备的DNS进行劫持,所以无法实现通过节点进行科学上网。目前也不支持Magic DNS功能。
- 完全NAT44且不具有IPv6公网地址情况下的内网穿透表现还未进行测试
- WireGuard目前还未进行测试,因为我基本上不用WireGuard。这几天看看抽空研究一下。
📎 参考文章
有关Easytier安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!