下载预编译的二进制文件
访问 GitHub Release 页面 下载适用于您操作系统的二进制文件。Release 压缩包中同时包含命令行程序和图形界面程序。
通过 crates.io 安装
cargo install easytier
通过源码安装
cargo install --git https://github.com/EasyTier/EasyTier.git easytier
通过Docker Compose安装
请访问 EasyTier 官网 以查看完整的文档。
使用一键脚本安装 (仅适用于 Linux)
wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh" && bash /tmp/easytier.sh install
使用本脚本安装的 Easytier 可以使用脚本的 uninstall/update 对其卸载/升级
使用 Homebrew 安装 (仅适用于 MacOS)
brew tap brewforge/chinese
brew install --cask easytier
下文仅描述命令行工具的使用,图形界面程序可参考下述概念自行配置。
确保已按照 安装指南 安装 EasyTier,并且 easytier-core 和 easytier-cli 两个命令都已经可用。
假设双节点的网络拓扑如下
flowchart LR
subgraph 节点 A IP 22.1.1.1
nodea[EasyTier\n10.144.144.1]
end
subgraph 节点 B
nodeb[EasyTier\n10.144.144.2]
end
nodea <-----> nodeb
在节点 A 上执行:
sudo easytier-core --ipv4 10.144.144.1
命令执行成功会有如下打印。
在节点 B 执行
sudo easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
测试联通性
两个节点应成功连接并能够在虚拟子网内通信
ping 10.144.144.2
使用 easytier-cli 查看子网中的节点信息
easytier-cli peer
easytier-cli route
easytier-cli node
基于刚才的双节点组网例子,如果有更多的节点需要加入虚拟网络,可以使用如下命令。
sudo easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
其中 --peers
参数可以填写任意一个已经在虚拟网络中的节点的监听地址。
假设网络拓扑如下,节点 B 想将其可访问的子网 10.1.1.0/24 共享给其他节点。
flowchart LR
subgraph 节点 A IP 22.1.1.1
nodea[EasyTier\n10.144.144.1]
end
subgraph 节点 B
nodeb[EasyTier\n10.144.144.2]
end
id1[[10.1.1.0/24]]
nodea <--> nodeb <-.-> id1
则节点 B 的 easytier 启动参数为(新增 -n 参数)
sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24
子网代理信息会自动同步到虚拟网络的每个节点,各个节点会自动配置相应的路由,节点 A 可以通过如下命令检查子网代理是否生效。
检查路由信息是否已经同步,proxy_cidrs 列展示了被代理的子网。
easytier-cli route
测试节点 A 是否可访问被代理子网下的节点
ping 10.1.1.2
EasyTier 支持共享公网节点进行组网。目前已部署共享的公网节点 tcp://public.easytier.top:11010
。
使用共享节点时,需要每个入网节点提供相同的 --network-name
和 --network-secret
参数,作为网络的唯一标识。
以双节点为例,节点 A 执行:
sudo easytier-core -i 10.144.144.1 --network-name abc --network-secret abc -e tcp://public.easytier.top:11010
节点 B 执行
sudo easytier-core --ipv4 10.144.144.2 --network-name abc --network-secret abc -e tcp://public.easytier.top:11010
命令执行成功后,节点 A 即可通过虚拟 IP 10.144.144.2 访问节点 B。
EasyTier 可以用作 WireGuard 服务端,让任意安装了 WireGuard 客户端的设备访问 EasyTier 网络。对于目前 EasyTier 不支持的平台 (如 iOS、Android 等),可以使用这种方式接入 EasyTier 网络。
假设网络拓扑如下:
flowchart LR
ios[[iPhone \n 安装 WireGuard]]
subgraph 节点 A IP 22.1.1.1
nodea[EasyTier\n10.144.144.1]
end
subgraph 节点 B
nodeb[EasyTier\n10.144.144.2]
end
id1[[10.1.1.0/24]]
ios <-.-> nodea <--> nodeb <-.-> id1
我们需要 iPhone 通过节点 A 访问 EasyTier 网络,则可进行如下配置:
在节点 A 的 easytier-core 命令中,加入 --vpn-portal 参数,指定 WireGuard 服务监听的端口,以及 WireGuard 网络使用的网段。
# 以下参数的含义为: 监听 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 的配置。
$> 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 网络。
每个虚拟网络(通过相同的网络名称和密钥建链)都可以充当公共服务器集群。其他网络的节点可以连接到公共服务器集群中的任意节点,无需公共 IP 即可发现彼此。
运行自建的公共服务器集群与运行虚拟网络完全相同,不过可以跳过配置 ipv4 地址。
也可以使用以下命令加入官方公共服务器集群,后续将实现公共服务器集群的节点间负载均衡:
sudo easytier-core --network-name easytier --network-secret easytier -p tcp://public.easytier.top:11010
可使用 easytier-core --help
查看全部配置项
我们欢迎并鼓励社区贡献!如果你想参与进来,请提交 GitHub PR。详细的贡献指南可以在 CONTRIBUTING.md 中找到。
EasyTier 根据 Apache License 2.0 许可证发布。
Star
easytier-core -h
A full meshed p2p VPN, connecting all your devices in one network with one
command.
Usage: easytier-core [OPTIONS]
Options:
-w, --config-server <CONFIG_SERVER>
配置服务器地址。允许格式:
完整URL:--config-server udp://127.0.0.1:22020/admin
仅用户名:--config-server admin,将使用官方的服务器
-c, --config-file <CONFIG_FILE>
配置文件路径,注意:如果设置了这个选项,其他所有选项都将被忽略
--network-name <NETWORK_NAME>
用于标识此VPN网络的网络名称 [default: default]
--network-secret <NETWORK_SECRET>
网络密钥,用于验证此节点属于VPN网络 [default: ]
-i, --ipv4 <IPV4>
此VPN节点的IPv4地址,如果为空,则此节点将仅转发数据包,不会创建TUN设备
-d, --dhcp
由Easytier自动确定并设置IP地址,默认从10.0.0.1开始。警告:在使用DHCP时,如果网络中出现IP冲突,IP将自动更改。
-p, --peers [<PEERS>...]
最初要连接的对等节点
-e, --external-node <EXTERNAL_NODE>
使用公共共享节点来发现对等节点
-n, --proxy-networks <PROXY_NETWORKS>
将本地网络导出到VPN中的其他对等节点
-r, --rpc-portal <RPC_PORTAL>
用于管理的RPC门户地址。0表示随机端口,12345表示在localhost的12345上监听,0.0.0.0:12345表示在所有接口的12345上监听。默认是0,首先尝试15888
[default: 0]
-l, --listeners [<LISTENERS>...]
监听器用于接受连接,允许以下格式:
端口号:<11010>,意味着tcp/udp将在11010端口监听,ws/wss将在11010和11011端口监听,wg将在11011端口监听。
url:<tcp://0.0.0.0:11010>,其中tcp可以是tcp、udp、ring、wg、ws、wss协议。
协议和端口对:<proto:port>,例如wg:11011,表示使用WireGuard协议在11011端口监听。URL 和
协议端口对 可以多次出现。
[default: 11010]
--mapped-listeners [<MAPPED_LISTENERS>...]
手动指定监听器的公网地址,其他节点可以使用该地址连接到本节点。例如:tcp://123.123.123.123:11223,可以指定多个。
--no-listener
不监听任何端口,只连接到对等节点
--console-log-level <CONSOLE_LOG_LEVEL>
控制台日志级别
--file-log-level <FILE_LOG_LEVEL>
文件日志级别
--file-log-dir <FILE_LOG_DIR>
存储日志文件的目录
--hostname <HOSTNAME>
用于标识此设备的主机名
-m, --instance-name <INSTANCE_NAME>
实例名称,用于在同一台机器上标识此VPN节点 [default: default]
--vpn-portal <VPN_PORTAL>
定义VPN门户的URL,允许其他VPN客户端连接。示例:wg://0.0.0.0:11010/10.14.14.0/24,表示VPN门户是监听在vpn.example.com:11010的wireguard服务器,VPN客户端在10.14.14.0/24网络中
--default-protocol <DEFAULT_PROTOCOL>
连接到对等节点时使用的默认协议
-u, --disable-encryption
禁用对等节点通信的加密,默认为false,必须与对等节点相同
--multi-thread
使用多线程运行时,默认为单线程
--disable-ipv6
不使用IPv6
--dev-name <DEV_NAME>
可选的TUN接口名称
--mtu <MTU>
TUN设备的MTU,默认为非加密时为1380,加密时为1360
--latency-first
延迟优先模式,将尝试使用最低延迟路径转发流量,默认使用最短路径
--exit-nodes [<EXIT_NODES>...]
转发所有流量的出口节点,虚拟IPv4地址,优先级由列表顺序决定
--enable-exit-node
允许此节点成为出口节点
--no-tun
不创建TUN设备,可以使用子网代理访问节点
--use-smoltcp
为子网代理启用smoltcp堆栈
--manual-routes [<MANUAL_ROUTES>...]
手动分配路由CIDR,将禁用子网代理和从对等节点传播的wireguard路由。例如:192.168.0.0/16
--relay-network-whitelist [<RELAY_NETWORK_WHITELIST>...]
仅转发白名单网络的流量,支持通配符字符串。多个网络名称间可以使用英文空格间隔。
如果本地网络(使用 network_name
分配)不在白名单中,如果没有其他路由路径可用,流量仍然可以转发。
如果该参数为空,则禁用转发。默认允许所有网络。
例如:'*'(所有网络),'def*'(以def为前缀的网络),'net1 net2'(只允许net1和net2)"
--disable-p2p
禁用P2P通信,只通过--peers指定的节点转发数据包
--disable-udp-hole-punching
禁用UDP打洞功能
--relay-all-peer-rpc
转发所有对等节点的RPC数据包,即使对等节点不在转发网络白名单中。这可以帮助白名单外网络中的对等节点建立P2P连接。
--socks5 <SOCKS5>
启用 socks5 服务器,允许 socks5 客户端访问虚拟网络. 格式: <端口>,例如:1080
--ipv6-listener <IPV6_LISTENER>
IPv6 监听器的URL,例如:tcp://[::]:11010,如果未设置,将在随机UDP端口上监听
--compression <COMPRESSION>
要使用的压缩算法,支持 none、zstd。默认为 none [default: none]
--bind-device <BIND_DEVICE>
将连接器的套接字绑定到物理设备以避免路由问题。比如子网代理网段与某节点的网段冲突,绑定物理设备后可以与该节点正常通信。
[possible values: true, false]
--enable-kcp-proxy
使用 KCP 代理 TCP 流,提高在 UDP 丢包网络上的延迟和吞吐量。
--disable-kcp-input
不允许其他节点使用 KCP 代理 TCP 流到此节点。开启 KCP 代理的节点访问此节点时,依然使用原始
TCP 连接。
-h, --help
Print help
-V, --version
Print version
easytier-cli -h
A full meshed p2p VPN, connecting all your devices in one network with one
command.
Usage: easytier-cli [OPTIONS] <COMMAND>
Commands:
peer
connector
stun
route
peer-center
vpn-portal
node
service
help Print this message or the help of the given subcommand(s)
Options:
-p, --rpc-portal <RPC_PORTAL> the instance name [default: 127.0.0.1:15888]
-v, --verbose verbose output
-h, --help Print help
-V, --version Print version