#vpn #p2p #networking #client-ip

bin+lib easytier

一个全 meshed 的 p2p VPN,一键连接所有设备到同一个网络

8 个版本 (5 个稳定版)

1.2.2 2024 年 8 月 12 日
1.2.1 2024 年 8 月 8 日
1.1.0 2024 年 6 月 5 日
1.0.0 2024 年 5 月 2 日
0.1.1 2024 年 3 月 24 日

#1317网络编程

Download history 181/week @ 2024-04-29 4/week @ 2024-05-06 2/week @ 2024-05-13 14/week @ 2024-05-20 14/week @ 2024-05-27 146/week @ 2024-06-03 18/week @ 2024-06-10 4/week @ 2024-06-24 21/week @ 2024-07-01 96/week @ 2024-07-08 42/week @ 2024-07-15 25/week @ 2024-07-22 151/week @ 2024-07-29 161/week @ 2024-08-05 136/week @ 2024-08-12

每月 474 次下载

自定义许可证

2.5MB
22K SLoC

包含 (Windows DLL, 430KB) third_party/wintun.dll,(Windows DLL, 220KB) third_party/Packet.dll,(静态库, 9KB) third_party/Packet.lib

EasyTier

GitHub GitHub last commit GitHub issues GitHub Core Actions GitHub GUI Actions

简体中文 | English

请访问 EasyTier 官方网站 以查看完整文档。

EasyTier 是一个使用 Rust 语言和 Tokio 框架实现的简单、安全且去中心化的 VPN 网络解决方案。

特性

  • 去中心化:无需依赖中心化服务,节点平等且独立。
  • 安全:使用 WireGuard 协议加密数据。
  • 高性能:全链路零拷贝,性能与主流网络软件相当。
  • 跨平台:支持 MacOS/Linux/Windows,未来将支持 IOS 和 Android。可执行文件为静态链接,部署简单。
  • 无需公共 IP 的网络:支持使用共享公共节点进行网络,请参阅 配置指南
  • NAT穿越:支持基于 UDP 的 NAT 穿越功能,即使在复杂的网络环境中也能建立稳定的连接。
  • 子网代理(点对网络):节点可以将可访问的网络段作为代理暴露给 VPN 子网,允许其他节点通过节点访问这些子网。
  • 智能路由:根据流量选择链路,以减少延迟并增加吞吐量。
  • 支持 TCP:当 UDP 受限时,通过并发 TCP 链路提供可靠的数据传输,优化性能。
  • 高可用性:检测到高数据包丢失或网络错误时,支持多路径并切换到健康路径。
  • 支持 IPv6:支持使用 IPv6 进行网络。
  • 多种协议类型:支持节点之间使用 WebSocket 和 QUIC 等协议进行通信。

安装

  1. 下载预编译的二进制文件

    访问 GitHub 发布页面 下载适合您操作系统的二进制文件。发布包含压缩包中的命令行程序和 GUI 程序。

  2. 通过 crates.io 安装

    cargo install easytier
    
  3. 从源代码安装

    cargo install --git https://github.com/EasyTier/EasyTier.git
    
  4. 通过 Docker Compose 安装

    请访问 EasyTier 官方网站 以查看完整文档。

  5. 通过脚本安装(仅适用于Linux)

    wget -O /tmp/easytier.sh "https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/easytier.sh" && bash /tmp/easytier.sh install
    

    您也可以通过此脚本的“uninstall”或“update”命令卸载或更新Easytier

快速入门

以下文本仅描述命令行工具的使用;GUI程序可以通过参考以下概念进行配置。

请确保根据安装指南安装了EasyTier,并且easytier-core和easytier-cli命令均可用。

双节点网络

假设两个节点的网络拓扑如下

flowchart LR

subgraph Node A IP 22.1.1.1
nodea[EasyTier\n10.144.144.1]
end

subgraph Node B
nodeb[EasyTier\n10.144.144.2]
end

nodea <-----> nodeb

  1. 在节点A上执行

    sudo easytier-core --ipv4 10.144.144.1
    

    命令成功执行将打印以下内容。

    alt text

  2. 在节点B上执行

    sudo easytier-core --ipv4 10.144.144.2 --peers udp://22.1.1.1:11010
    
  3. 测试连通性

    两个节点应该成功连接,并能够在虚拟子网内通信

    ping 10.144.144.2
    

    使用easytier-cli查看子网中的节点信息

    easytier-cli peer
    

    alt text

    easytier-cli route
    

    alt text


多节点网络

基于刚才的双节点网络示例,如果需要更多节点加入虚拟网络,可以使用以下命令。

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 Node A IP 22.1.1.1
nodea[EasyTier\n10.144.144.1]
end

subgraph Node B
nodeb[EasyTier\n10.144.144.2]
end

id1[[10.1.1.0/24]]

nodea <--> nodeb <-.-> id1

那么节点B的easytier的启动参数为(new -n参数)

sudo easytier-core --ipv4 10.144.144.2 -n 10.1.1.0/24

子网代理信息将自动同步到虚拟网络中的每个节点,每个节点将自动配置相应的路由。节点A可以通过以下命令检查子网代理是否有效。

  1. 检查路由信息是否已同步,proxy_cidrs列显示了代理的子网。

    easytier-cli route
    

    alt text

  2. 测试节点A是否可以访问代理子网下的节点

    ping 10.1.1.2
    

无公网IP的联网

EasyTier支持使用共享公网节点进行联网。目前部署的共享公网节点是tcp://easytier.public.kkrainbow.top:11010

使用共享节点时,每个进入网络的节点需要提供与网络唯一标识符相同的--network-name--network-secret参数。

以两个节点为例,节点A执行

sudo easytier-core -i 10.144.144.1 --network-name abc --network-secret abc -e tcp://easytier.public.kkrainbow.top:11010

节点B执行

sudo 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结合使用

EasyTier可以用作WireGuard服务器,允许任何安装了WireGuard客户端的设备访问EasyTier网络。对于目前EasyTier不支持的平台(如iOS、Android等),可以使用此方法连接到EasyTier网络。

假设网络拓扑如下

flowchart LR

ios[[iPhone \n WireGuard Installed]]

subgraph Node A IP 22.1.1.1
nodea[EasyTier\n10.144.144.1]
end

subgraph Node 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网络使用的子网。

# The following parameters mean: listen on port 0.0.0.0:11013, and use the 10.14.14.0/24 subnet for WireGuard
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客户端配置。

$> 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:
[]

在将客户端配置文件导入WireGuard客户端以访问EasyTier网络之前,需要将接口地址和Peer端点分别修改为客户端的IP和EasyTier节点的IP。导入配置文件。

自托管公网服务器

每个节点都可以作为其他用户网络的中继节点。只需无参数启动EasyTier。

配置

您可以使用easytier-core --help查看所有配置项

路线图

  • 改进文档和用户指南。
  • 支持加密、TCP打洞等功能。
  • 支持Android、IOS和其他移动平台。
  • 支持Web配置管理。

社区和贡献

我们欢迎并鼓励社区贡献!如果您想参与其中,请提交一个GitHub PR。详细的贡献指南可以在CONTRIBUTING.md中找到。

相关项目和资源

  • ZeroTier:一个全球虚拟网络,用于连接设备。
  • TailScale:一个旨在简化网络配置的VPN解决方案。
  • vpncloud:一个P2P网状VPN。
  • Candy:一个可靠、低延迟且反审查的虚拟私人网络。

许可

EasyTier遵循Apache License 2.0发布。

联系

赞助

依赖项

~31–70MB
~1M SLoC