记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

内网组网工具-EasyTier

内网组网工具-EasyTier
一个简单、安全、去中心化的内网穿透 VPN 组网方案,使用 Rust 语言和 Tokio 框架实现。
官网:https://www.easytier.top
Github:https://github.com/EasyTier/EasyTier
下载:https://github.com/EasyTier/EasyTier/releases
Openwrt:https://github.com/EasyTier/luci-app-easytier
详细教程:https://www.easytier.top/guide/introduction.html
特点:
XML/HTML代码
  1. 去中心化:无需依赖中心化服务,节点平等且独立。
  2. 安全:支持利用 WireGuard 加密通信,也支持 AES-GCM 加密保护中转流量。
  3. 高性能:全链路零拷贝,性能与主流组网软件相当。
  4. 跨平台:支持 MacOS/Linux/Windows,未来将支持 IOS 和 Android。可执行文件静态链接,部署简单。
  5. 无公网 IP 组网:支持利用共享的公网节点组网,可参考 配置指南
  6. NAT 穿透:支持基于 UDP 的 NAT 穿透,即使在复杂的网络环境下也能建立稳定的连接。
  7. 子网代理(点对网):节点可以将可访问的网段作为代理暴露给 VPN 子网,允许其他节点通过该节点访问这些子网。
  8. 智能路由:根据流量智能选择链路,减少延迟,提高吞吐量。
  9. TCP 支持:在 UDP 受限的情况下,通过并发 TCP 链接提供可靠的数据传输,优化性能。
  10. 高可用性:支持多路径和在检测到高丢包率或网络错误时切换到健康路径。
  11. IPV6 支持:支持利用 IPV6 组网。
安装:
1、下载预编译的二进制文件 访问 GitHub Release 页面 下载适用于您操作系统的二进制文件。Release 压缩包中同时包含命令行程序和图形界面程序。
2、通过 crates.io 安装
XML/HTML代码
  1. cargo install easytier
3、通过源码安装
XML/HTML代码
  1. cargo install --git https://github.com/EasyTier/EasyTier.git
4、通过Docker Compose安装
docker-compose.yml
XML/HTML代码
  1. version: "3.8"  
  2. services:  
  3.    watchtower: #用于自动更新easytier镜像,若不需要请删除这部分  
  4.          command: --interval 3600 --cleanup --label-enable  
  5.          container_name: watchtower  
  6.          environment:  
  7.                - TZ=Asia/Shanghai  
  8.                - WATCHTOWER_NO_STARTUP_MESSAGE  
  9.          image: containrrr/watchtower  
  10.          restart: always  
  11.          volumes:  
  12.                - /var/run/docker.sock:/var/run/docker.sock  
  13.    easytier:  
  14.          restart: always  
  15.          labels:  
  16.                com.centurylinklabs.watchtower.enable: "true"          
  17.          privileged: true  
  18.          mem_limit: 0m  
  19.          container_name: easytier  
  20.          hostname: easytier  
  21.          network_mode: host  
  22.          volumes:  
  23.                - /etc/easytier:/root  
  24.          environment:  
  25.                - TZ=Asia/Shanghai  
  26.          image: easytier/easytier:latest  
  27.          command: -i <ip> --network-name <用户> --network-secret <密码> -e tcp://<服务器地址>:11010 -l <监听地址>
5、使用一键脚本安装 (仅适用于 Linux)
XML/HTML代码
  1. 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代码
  1. 节点 A  IP 22.1.1.1                   节点 B  
  2.     EasyTier        -----------     EasyTier  
  3.    10.144.144.1                    10.144.144.2  
在节点 A 上执行:
XML/HTML代码
  1. easytier-core --ipv4 10.144.144.1
命令执行成功会有如下打印。
XML/HTML代码
  1. easytier-core --ipv4 10.144.144.1  
  2. Starting easytier with config:  
  3. ############### TOML ##############  
  4.   
  5. instance_name = "default"  
  6. instance_id = "7294d13c-d119-49ae-a5f7-8c3a912538d7"  
  7. ipv4 = "10.144.144.1"  
  8. listeners = [  
  9.     "tcp://0.0.0.0:11010",  
  10.     "udp://0.0.0.0:11010",  
  11.     "wg://0.0.0.0:11011",  
  12. ]  
  13. peer = []  
  14. rpc_portal = "127.0.0.1:15888"  
  15.   
  16. [network_identity]  
  17. network_name = "default"  
  18. network_secret = ""  
  19.   
  20. [flags]  
  21. default_protocol = "tcp"  
  22. enable_encryption = true  
  23. enable_ipv6 = true  
  24.   
  25. -----------------------------------  
  26. xxxx-xx-xx xx:xx:xx: tun device ready. dev: tun0  
  27. xxxx-xx-xx xx:xx:xx: new listener added. listener: tcp://0.0.0.0:11010  
  28. xxxx-xx-xx xx:xx:xx: new listener added. listener: udp://0.0.0.0:11010  
在节点 B 执行
XML/HTML代码
  1. easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
测试联通性
两个节点应成功连接并能够在虚拟子网内通信
ping 10.144.144.2
使用 easytier-cli 查看子网中的节点信息
XML/HTML代码
  1. easytier-cli peer
  2. easytier-cli route
多节点组网
基于刚才的双节点组网例子,如果有更多的节点需要加入虚拟网络,可以使用如下命令。
XML/HTML代码
  1. easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
其中 --peers  参数可以填写任意一个已经在虚拟网络中的节点的监听地址。
子网代理(点对网)配置
假设网络拓扑如下,节点 B 想将其可访问的子网 10.1.1.0/24 共享给其他节点。
XML/HTML代码
  1. 节点 A IP 22.1.1.1          节点 B  
  2.     EasyTier      -------  EasyTier  ----- 10.1.1.0/24  
  3.   10.144.144.1           10.144.144.2  
则节点 B 的 easytier 启动参数为(新增 -n 参数)
XML/HTML代码
  1. easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
子网代理信息会自动同步到虚拟网络的每个节点,各个节点会自动配置相应的路由,节点 A 可以通过如下命令检查子网代理是否生效。
检查路由信息是否已经同步,proxy_cidrs 列展示了被代理的子网。
XML/HTML代码
  1. easytier-cli route
测试节点 A 是否可访问被代理子网下的节点
ping 10.1.1.2
无公网IP组网
EasyTier 支持共享公网节点进行组网。目前已部署共享的公网节点 tcp://easytier.public.kkrainbow.top:11010。
使用共享节点时,需要每个入网节点提供相同的 --network-name 和 --network-secret 参数,作为网络的唯一标识。
以双节点为例,节点 A 执行:
XML/HTML代码
  1. easytier-core -i 10.144.144.1 --network-name abc --network-secret abc -e tcp://easytier.public.kkrainbow.top:11010
节点 B 执行
XML/HTML代码
  1. easytier-core --ipv4 10.144.144.2 --network-name abc --network-secret abc -e tcp://easytier.public.kkrainbow.top:11010
命令执行成功后,节点 A 即可通过虚拟 IP 10.144.144.2 访问节点 B。
使用 WireGuard 客户端接入
EasyTier 可以用作 WireGuard 服务端,让任意安装了 WireGuard 客户端的设备访问 EasyTier 网络。对于目前 EasyTier 不支持的平台 (如 iOS、Android 等),可以使用这种方式接入 EasyTier 网络。
假设网络拓扑如下:
XML/HTML代码
  1. Phone安装     节点 A IP 22.1.1.1    节点 B  
  2. WireGuard ----- EasyTier ------- EasyTier----10.1.1.0/24  
  3.               10.144.144.1      10.144.144.2  
我们需要 Phone 通过节点 A 访问 EasyTier 网络,则可进行如下配置:
在节点 A 的 easytier-core 命令中,加入 --vpn-portal 参数,指定 WireGuard 服务监听的端口,以及 WireGuard 网络使用的网段。
XML/HTML代码
  1. # 以下参数的含义为: 监听 0.0.0.0:11013 端口,WireGuard 使用 10.14.14.0/24 网段
  2. 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代码
  1. $> easytier-cli vpn-portal  
  2. portal_name: wireguard  
  3.   
  4. ############### client_config_start ###############  
  5.   
  6. [Interface]  
  7. PrivateKey = 9VDvlaIC9XHUvRuE06hD2CEDrtGF+0lDthgr9SZfIho=  
  8. Address = 10.14.14.0/32 # should assign an ip from this cidr manually  
  9.   
  10. [Peer]  
  11. PublicKey = zhrZQg4QdPZs8CajT3r4fmzcNsWpBL9ImQCUsnlXyGM=  
  12. AllowedIPs = 10.144.144.0/24,10.14.14.0/24  
  13. Endpoint = 0.0.0.0:11013 # should be the public ip(or domain) of the vpn server  
  14. PersistentKeepalive = 25  
  15.   
  16. ############### client_config_end ###############  
  17.   
  18. connected_clients:  
  19. []  
使用 Client Config 前,需要将 Interface Address 和 Peer Endpoint 分别修改为客户端的 IP 和 EasyTier 节点的 IP。将配置文件导入 WireGuard 客户端,即可访问 EasyTier 网络。
自建公共中转服务器
每个节点都可作为其他用户网络的中转节点。不带任何参数直接启动 EasyTier 即可。
其他配置
可使用 easytier-core --help 查看全部配置项
经验总结:
注意:软件依靠tun虚拟网卡才可以实现组网功能,无tun虚拟网卡只能实现端口转发,全功能必须开启tun,以下为linux系统开启命令。
XML/HTML代码
  1. # 启用tun功能  
  2. modprobe tun  
  3. echo "tun" >>/etc/modules  
  4.   
  5. # 检查内核是否支持tun/tap  
  6. modinfo tun  
  7. # 检查是否生效  
  8. 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代码
  1. network_mode: host  
  2. cap_add:  
  3. - NET_ADMIN  
  4. devices:  
  5. - /dev/net/tun  
简单的完整文件:
XML/HTML代码
  1. version: "3.8"  
  2. services:  
  3.    easytier:  
  4.          restart: always  
  5.          privileged: true  
  6.          mem_limit: 0m  
  7.          container_name: easytier  
  8.          hostname: easytier  
  9.          network_mode: host  
  10.          cap_add:  
  11.                 - NET_ADMIN  
  12.          devices:  
  13.                 - /dev/net/tun   
  14.          volumes:  
  15.                - /etc/easytier:/root  
  16.          environment:  
  17.                - TZ=Asia/Shanghai  
  18.          image: easytier/easytier:latest  
  19.          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代码
  1. services:  
  2.   easytier:  
  3.     hostname: easytier  
  4.     restart: always  
  5.     image: busybox:latest  
  6.     network_mode: host  
  7.     cap_add:  
  8.     - NET_ADMIN  
  9.     devices:  
  10.     - /dev/net/tun  
  11.     volumes:  
  12.     - ./bind/app:/usr/local/bin  #这里的宿主机上的./bind/app目录放两个可执行文件,在release页面下载解压就行,!!注意bind用的相对路径。  
  13.     command: ["easytier-core","--ipv4","10.103.0.1","--network-name","自定义名字","--network-secret","密码"]  
  14.     logging:  
  15.       options:  
  16.         max-size: 200k  
再简化下一键命令:
XML/HTML代码
  1. 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 服务器功能。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):