内网组网工具-EasyTier
一个简单、安全、去中心化的内网穿透 VPN 组网方案,使用 Rust 语言和 Tokio 框架实现。
特点:
XML/HTML代码
- 去中心化:无需依赖中心化服务,节点平等且独立。
- 安全:支持利用 WireGuard 加密通信,也支持 AES-GCM 加密保护中转流量。
- 高性能:全链路零拷贝,性能与主流组网软件相当。
- 跨平台:支持 MacOS/Linux/Windows,未来将支持 IOS 和 Android。可执行文件静态链接,部署简单。
- 无公网 IP 组网:支持利用共享的公网节点组网,可参考 配置指南
- NAT 穿透:支持基于 UDP 的 NAT 穿透,即使在复杂的网络环境下也能建立稳定的连接。
- 子网代理(点对网):节点可以将可访问的网段作为代理暴露给 VPN 子网,允许其他节点通过该节点访问这些子网。
- 智能路由:根据流量智能选择链路,减少延迟,提高吞吐量。
- TCP 支持:在 UDP 受限的情况下,通过并发 TCP 链接提供可靠的数据传输,优化性能。
- 高可用性:支持多路径和在检测到高丢包率或网络错误时切换到健康路径。
- IPV6 支持:支持利用 IPV6 组网。
安装:
1、下载预编译的二进制文件 访问 GitHub Release 页面 下载适用于您操作系统的二进制文件。Release 压缩包中同时包含命令行程序和图形界面程序。
2、通过 crates.io 安装
XML/HTML代码
- cargo install easytier
3、通过源码安装
XML/HTML代码
- cargo install --git https://github.com/EasyTier/EasyTier.git
4、通过Docker Compose安装
docker-compose.yml
XML/HTML代码
- version: "3.8"
- services:
- watchtower: #用于自动更新easytier镜像,若不需要请删除这部分
- command: --interval 3600 --cleanup --label-enable
- container_name: watchtower
- environment:
- - TZ=Asia/Shanghai
- - WATCHTOWER_NO_STARTUP_MESSAGE
- image: containrrr/watchtower
- restart: always
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
- easytier:
- restart: always
- labels:
- com.centurylinklabs.watchtower.enable: "true"
- privileged: true
- mem_limit: 0m
- container_name: easytier
- hostname: easytier
- network_mode: host
- volumes:
- - /etc/easytier:/root
- environment:
- - TZ=Asia/Shanghai
- image: easytier/easytier:latest
- command: -i <ip> --network-name <用户> --network-secret <密码> -e tcp://<服务器地址>:11010 -l <监听地址>
5、使用一键脚本安装 (仅适用于 Linux)
XML/HTML代码
- wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/easytier.sh" && bash /tmp/easytier.sh install
使用本脚本安装的 Easytier 可以使用脚本的 uninstall/update 对其卸载/升级
快速开始:
下文仅描述命令行工具的使用,图形界面程序可参考下述概念自行配置。
确保已按照 安装指南 安装 EasyTier,并且 easytier-core 和 easytier-cli 两个命令都已经可用。
双节点组网
假设双节点的网络拓扑如下
XML/HTML代码
- 节点 A IP 22.1.1.1 节点 B
- EasyTier ----------- EasyTier
- 10.144.144.1 10.144.144.2
在节点 A 上执行:
XML/HTML代码
- easytier-core --ipv4 10.144.144.1
XML/HTML代码
- easytier-core --ipv4 10.144.144.1
- Starting easytier with config:
- ############### TOML ##############
- instance_name = "default"
- instance_id = "7294d13c-d119-49ae-a5f7-8c3a912538d7"
- ipv4 = "10.144.144.1"
- listeners = [
- "tcp://0.0.0.0:11010",
- "udp://0.0.0.0:11010",
- "wg://0.0.0.0:11011",
- ]
- peer = []
- rpc_portal = "127.0.0.1:15888"
- [network_identity]
- network_name = "default"
- network_secret = ""
- [flags]
- default_protocol = "tcp"
- enable_encryption = true
- enable_ipv6 = true
- -----------------------------------
- xxxx-xx-xx xx:xx:xx: tun device ready. dev: tun0
- xxxx-xx-xx xx:xx:xx: new listener added. listener: tcp://0.0.0.0:11010
- xxxx-xx-xx xx:xx:xx: new listener added. listener: udp://0.0.0.0:11010
在节点 B 执行
XML/HTML代码
- easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
测试联通性
两个节点应成功连接并能够在虚拟子网内通信
ping 10.144.144.2
使用 easytier-cli 查看子网中的节点信息
XML/HTML代码
- easytier-cli peer
- easytier-cli route
多节点组网
基于刚才的双节点组网例子,如果有更多的节点需要加入虚拟网络,可以使用如下命令。
XML/HTML代码
- easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
其中 --peers 参数可以填写任意一个已经在虚拟网络中的节点的监听地址。
子网代理(点对网)配置
假设网络拓扑如下,节点 B 想将其可访问的子网 10.1.1.0/24 共享给其他节点。
XML/HTML代码
- 节点 A IP 22.1.1.1 节点 B
- EasyTier ------- EasyTier ----- 10.1.1.0/24
- 10.144.144.1 10.144.144.2
则节点 B 的 easytier 启动参数为(新增 -n 参数)
XML/HTML代码
- easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
检查路由信息是否已经同步,proxy_cidrs 列展示了被代理的子网。
XML/HTML代码
- easytier-cli route
测试节点 A 是否可访问被代理子网下的节点
ping 10.1.1.2
无公网IP组网
EasyTier 支持共享公网节点进行组网。目前已部署共享的公网节点 tcp://easytier.public.kkrainbow.top:11010。
使用共享节点时,需要每个入网节点提供相同的 --network-name 和 --network-secret 参数,作为网络的唯一标识。
以双节点为例,节点 A 执行:
XML/HTML代码
- easytier-core -i 10.144.144.1 --network-name abc --network-secret abc -e tcp://easytier.public.kkrainbow.top:11010
节点 B 执行
XML/HTML代码
- easytier-core --ipv4 10.144.144.2 --network-name abc --network-secret abc -e tcp://easytier.public.kkrainbow.top:11010
使用 WireGuard 客户端接入
EasyTier 可以用作 WireGuard 服务端,让任意安装了 WireGuard 客户端的设备访问 EasyTier 网络。对于目前 EasyTier 不支持的平台 (如 iOS、Android 等),可以使用这种方式接入 EasyTier 网络。
假设网络拓扑如下:
XML/HTML代码
- Phone安装 节点 A IP 22.1.1.1 节点 B
- WireGuard ----- EasyTier ------- EasyTier----10.1.1.0/24
- 10.144.144.1 10.144.144.2
我们需要 Phone 通过节点 A 访问 EasyTier 网络,则可进行如下配置:
在节点 A 的 easytier-core 命令中,加入 --vpn-portal 参数,指定 WireGuard 服务监听的端口,以及 WireGuard 网络使用的网段。
XML/HTML代码
- # 以下参数的含义为: 监听 0.0.0.0:11013 端口,WireGuard 使用 10.14.14.0/24 网段
- sudo easytier-core --ipv4 10.144.144.1 --vpn-portal wg://0.0.0.0:11013/10.14.14.0/24
easytier-core 启动成功后,使用 easytier-cli 获取 WireGuard Client 的配置。
XML/HTML代码
- $> easytier-cli vpn-portal
- portal_name: wireguard
- ############### client_config_start ###############
- [Interface]
- PrivateKey = 9VDvlaIC9XHUvRuE06hD2CEDrtGF+0lDthgr9SZfIho=
- Address = 10.14.14.0/32 # should assign an ip from this cidr manually
- [Peer]
- PublicKey = zhrZQg4QdPZs8CajT3r4fmzcNsWpBL9ImQCUsnlXyGM=
- AllowedIPs = 10.144.144.0/24,10.14.14.0/24
- Endpoint = 0.0.0.0:11013 # should be the public ip(or domain) of the vpn server
- PersistentKeepalive = 25
- ############### client_config_end ###############
- connected_clients:
- []
使用 Client Config 前,需要将 Interface Address 和 Peer Endpoint 分别修改为客户端的 IP 和 EasyTier 节点的 IP。将配置文件导入 WireGuard 客户端,即可访问 EasyTier 网络。
自建公共中转服务器
每个节点都可作为其他用户网络的中转节点。不带任何参数直接启动 EasyTier 即可。
其他配置
可使用 easytier-core --help 查看全部配置项
经验总结:
注意:软件依靠tun虚拟网卡才可以实现组网功能,无tun虚拟网卡只能实现端口转发,全功能必须开启tun,以下为linux系统开启命令。
XML/HTML代码
- # 启用tun功能
- modprobe tun
- echo "tun" >>/etc/modules
- # 检查内核是否支持tun/tap
- modinfo tun
- # 检查是否生效
- lsmod | grep tun
1、Openwrt安装可以fork项目到自己账号,使用Actions云编译ipk直接上传到Openwrt安装,然后在 VPN--EasyTier--上传程序 上传从网站下载的对应版本的压缩包,程序会自动安装,然后在配置界面配置好就可以使用。
2、Linux一键安装命令仅支持 Debian/Ubuntu Redhat/Centos 系统。
3、组网可以使用官方提供的服务器,如果有公网IP可以自建服务器,速度会更快。
4、多网段互通,比如一个局域网中有 192.168.0.0/24 和 10.10.10.0/24 两个网段,都需要可以访问,可以使用 -n 参数 有几个网段添加几个 -n 即可。
5、Linux版本自动安装脚本的使用技巧,通过修改 /opt/easytier/run.sh 在 /opt/easytier/easytier-core 后面添加启动参数,就可以实现自定义启动程序。
6、Docker使用官方教程无法正常启动,因为没有加载默认的tun虚拟网卡。如果需要容器启动,除了需要宿主机开启tun虚拟网卡,还需要修改 docker-compose.yml 文件,添加 tun 虚拟网卡。
网络部分修改如下:
XML/HTML代码
- network_mode: host
- cap_add:
- - NET_ADMIN
- devices:
- - /dev/net/tun
XML/HTML代码
- version: "3.8"
- services:
- easytier:
- restart: always
- privileged: true
- mem_limit: 0m
- container_name: easytier
- hostname: easytier
- network_mode: host
- cap_add:
- - NET_ADMIN
- devices:
- - /dev/net/tun
- volumes:
- - /etc/easytier:/root
- environment:
- - TZ=Asia/Shanghai
- image: easytier/easytier:latest
- command: -i 10.11.12.169 --network-name mynet --network-secret mypass -e tcp://easytier.public.kkrainbow.top:11010
附送一个最小的docker镜像的docker-compose文件,拿busybox镜像挂载一下放两个二进制文件的目录到/usr/local/bin,然后再使用docker启动应用就行了。
XML/HTML代码
- services:
- easytier:
- hostname: easytier
- restart: always
- image: busybox:latest
- network_mode: host
- cap_add:
- - NET_ADMIN
- devices:
- - /dev/net/tun
- volumes:
- - ./bind/app:/usr/local/bin #这里的宿主机上的./bind/app目录放两个可执行文件,在release页面下载解压就行,!!注意bind用的相对路径。
- command: ["easytier-core","--ipv4","10.103.0.1","--network-name","自定义名字","--network-secret","密码"]
- logging:
- options:
- max-size: 200k
再简化下一键命令:
XML/HTML代码
- docker run --net host --restart always --privileged --name easytier -h easytier --cap-add NET_ADMIN --device /dev/net/tun -v /opt/easytier:/root -e TZ=Asia/Shanghai -m 0m easytier/easytier:latest -i 10.11.12.169 --network-name mynet --network-secret mypass -e tcp://easytier.public.kkrainbow.top:11010
也可以在爱快的Docker上,通过前面讲过的破解爱快Docker,用s6容器使用上面命令创建容器,无需端口映射直接可以使用,使用Portainer修改参数。
7、easytier-core 命令不加参数既可以作为公共服务器,任何客户端都可以链接,每个客户端使用网络名称和密码不一样就可以组件自己的独立网络,服务器看不到客户端情况,只要节点参数一致就可以,安全可靠。
8、win系统如果使用命令启动出错,提示tun网卡权限,可以终端切换到管理员权限运行即可。
内网穿透是无公网IP的设备可以外网访问,主要是通过中转映射端口 ,如 frp nps 或者ssh的隧道转发,通过中转服务器,实现端口的转发,客户可以无需客户端直接访问。
内网组网则是通过程序将几个网络组建成一个局域网,必须客户端,但是可以实现局域网一样的任意IP和任意端口的访问,一般通过tun虚拟网卡实现。
EasyTier优点:全平台,可以不依赖服务器,自己建立服务器,不受制于人,任何人都可以自建服务器,配置简单。
内网穿透类似端口映射,用于个别服务的发布,内网组网相当于在这个服务器的局域网,内网访问,这就是本质区别。
类似项目:
ZeroTier: 一个全球虚拟网络,用于连接设备。
TailScale: 一个旨在简化网络配置的 VPN 解决方案。
vpncloud: 一个 P2P Mesh VPN
Candy: 可靠、低延迟、抗审查的虚拟专用网络
其他镜像:lmq8267
注:无 TUN 模式 (免 Root 权限)
由于创建 TUN 设备需要 ROOT 权限,对于一些无法获取 Root 权限的环境,EasyTier 也提供了不依赖 TUN 的使用方法。只需在启动 EasyTier 时,增加 --no-tun 参数即可。使用无 TUN 模式组网时,节点可以通过虚拟 IP 被访问(TCP、UDP 和 ICMP 都支持),也可以做子网代理(使用 -n 参数)。但是无法主动发起对其他节点的访问。为了在无 TUN 模式下主动访问其他节点,可使用 EasyTier 的 SOCKS5 服务器功能。