diff --git a/apps/easytier/2.0.2-config/.env.sample b/apps/easytier/2.0.2-config/.env.sample new file mode 100644 index 00000000..fbe0f91d --- /dev/null +++ b/apps/easytier/2.0.2-config/.env.sample @@ -0,0 +1,8 @@ +COMMAND="-c /root/config.toml" +CONFIG_FILE_PATH="./data/config.toml" +CONFIG_FILE_PATH_INTERNAL="/root/config.toml" +CONTAINER_NAME="easytier" +DATA_PATH="./data/data" +HOSTNAME="easytier" +PRIVILEGED_MODE="true" +TIME_ZONE="Asia/Shanghai" diff --git a/apps/easytier/2.0.2-config/data.yml b/apps/easytier/2.0.2-config/data.yml new file mode 100644 index 00000000..f644b3e8 --- /dev/null +++ b/apps/easytier/2.0.2-config/data.yml @@ -0,0 +1,51 @@ +additionalProperties: + formFields: + - default: "./data/data" + edit: true + envKey: DATA_PATH + labelEn: Data Path + labelZh: 数据路径 + required: true + type: text + - default: "./data/config.toml" + disabled: true + envKey: CONFIG_FILE_PATH + labelEn: Configuration file path + labelZh: 配置文件路径 + required: true + type: text + - default: "/root/config.toml" + disabled: true + envKey: CONFIG_FILE_PATH_INTERNAL + labelEn: Configuration file path(inside container) + labelZh: 配置文件路径 (容器内部) + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TIME_ZONE + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: "true" + disabled: true + envKey: PRIVILEGED_MODE + labelEn: Privilege mode switch + labelZh: 特权模式开关 + required: true + type: text + - default: "easytier" + edit: true + envKey: HOSTNAME + labelEn: Hostname + labelZh: 主机名 + required: true + type: text + - default: "-c /root/config.toml" + disabled: true + envKey: COMMAND + labelEn: Command + labelZh: 命令 + required: true + type: text \ No newline at end of file diff --git a/apps/easytier/2.0.2-config/data/config-example.toml b/apps/easytier/2.0.2-config/data/config-example.toml new file mode 100644 index 00000000..389dbfeb --- /dev/null +++ b/apps/easytier/2.0.2-config/data/config-example.toml @@ -0,0 +1,68 @@ +# 实例名称,用于在同一台机器上标识此 VPN 节点 +instance_name = "" +# 主机名,用于标识此设备的主机名 +hostname = "" +# 实例 ID,一般为 UUID,在同一个 VPN 网络中唯一 +instance_id = "" +# 此 VPN 节点的 IPv4 地址,如果为空,则此节点将仅转发数据包,不会创建 TUN 设备 +ipv4 = "" +# 由 Easytier 自动确定并设置IP地址,默认从10.0.0.1开始。警告:在使用 DHCP 时,如果网络中出现 IP 冲突,IP 将自动更改 +dhcp = false + +# 监听器列表,用于接受连接 +listeners = [ +"tcp://0.0.0.0:11010", +"udp://0.0.0.0:11010", +"wg://0.0.0.0:11011", +"ws://0.0.0.0:11011/", +"wss://0.0.0.0:11012/", +] + +# 退出节点列表 +exit_nodes = [ +] + +# 用于管理的 RPC 门户地址 +rpc_portal = "127.0.0.1:15888" + +[network_identity] +# 网络名称,用于标识 VPN 网络 +network_name = "" +# 网络密钥,用于验证此节点属于 VPN 网络 +network_secret = "" + +# 这里是对等连接节点配置,可以多段配置 +[[peer]] +uri = "" + +[[peer]] +uri = "" + +# 这里是子网代理节点配置,可以有多段配置 +[[proxy_network]] +cidr = "10.0.1.0/24" + +[[proxy_network]] +cidr = "10.0.2.0/24" + +[flags] +# 连接到对等节点使用的默认协议 +default_protocol = "tcp" +# TUN 设备名称,如果为空,则使用默认名称 +dev_name = "" +# 是否启用加密 +enable_encryption = true +# 是否启用 IPv6 支持 +enable_ipv6 = true +# TUN 设备的 MTU +mtu = 1380 +# 延迟优先模式,将尝试使用最低延迟路径转发流量,默认使用最短路径 +latency_first = false +# 将本节点配置为退出节点 +enable_exit_node = false +# 禁用 TUN 设备 +no_tun = false +# 为子网代理启用 smoltcp 堆栈 +use_smoltcp = false +# 仅转发白名单网络的流量,支持通配符字符串。多个网络名称间可以使用英文空格间隔。如果该参数为空,则禁用转发。默认允许所有网络。例如:'*'(所有网络),'def*'(以def为前缀的网络),'net1 net2'(只允许net1和net2) +foreign_network_whitelist = "*" \ No newline at end of file diff --git a/apps/easytier/2.0.2-config/data/config.toml b/apps/easytier/2.0.2-config/data/config.toml new file mode 100644 index 00000000..ed8de6dd --- /dev/null +++ b/apps/easytier/2.0.2-config/data/config.toml @@ -0,0 +1,17 @@ +instance_name = "default" +instance_id = "3d3db819-ad54-4d86-bf9a-faac864478ab" +dhcp = false +listeners = [ + "tcp://0.0.0.0:11010", + "udp://0.0.0.0:11010", + "wg://0.0.0.0:11011", + "ws://0.0.0.0:11011/", + "wss://0.0.0.0:11012/", +] +exit_nodes = [] +peer = [] +rpc_portal = "0.0.0.0:15889" + +[network_identity] +network_name = "default" +network_secret = "" diff --git a/apps/easytier/2.0.2-config/docker-compose.yml b/apps/easytier/2.0.2-config/docker-compose.yml new file mode 100644 index 00000000..86c23762 --- /dev/null +++ b/apps/easytier/2.0.2-config/docker-compose.yml @@ -0,0 +1,20 @@ +services: + easytier: + image: "easytier/easytier:v2.0.2" + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + privileged: ${PRIVILEGED_MODE} + hostname: ${HOSTNAME} + environment: + - TZ=${TIME_ZONE} + volumes: + - ${DATA_PATH}:/root + - ${CONFIG_FILE_PATH}:${CONFIG_FILE_PATH_INTERNAL} + command: ${COMMAND} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/easytier/2.0.2/.env.sample b/apps/easytier/2.0.2/.env.sample new file mode 100644 index 00000000..2ad05e7c --- /dev/null +++ b/apps/easytier/2.0.2/.env.sample @@ -0,0 +1,6 @@ +COMMAND="-i 10.144.144.1 --network-name abc --network-secret abc -p tcp://public.easytier.top:11010" +CONTAINER_NAME="easytier" +DATA_PATH="./data/data" +HOSTNAME="easytier" +PRIVILEGED_MODE="true" +TIME_ZONE="Asia/Shanghai" diff --git a/apps/easytier/2.0.2/data.yml b/apps/easytier/2.0.2/data.yml new file mode 100644 index 00000000..5564b2d6 --- /dev/null +++ b/apps/easytier/2.0.2/data.yml @@ -0,0 +1,37 @@ +additionalProperties: + formFields: + - default: "./data" + edit: true + envKey: DATA_PATH + labelEn: Data Path + labelZh: 数据路径 + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TIME_ZONE + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: "true" + disabled: true + envKey: PRIVILEGED_MODE + labelEn: Privilege mode switch + labelZh: 特权模式开关 + required: true + type: text + - default: "easytier" + edit: true + envKey: HOSTNAME + labelEn: Hostname + labelZh: 主机名 + required: true + type: text + - default: "-i --network-name <用户> --network-secret <密码> -e tcp://<服务器地址>:11010 -l <监听地址>" + edit: true + envKey: COMMAND + labelEn: Command (modified as required) + labelZh: 命令 (按需修改) + required: true + type: text \ No newline at end of file diff --git a/apps/easytier/2.0.2/docker-compose.yml b/apps/easytier/2.0.2/docker-compose.yml new file mode 100644 index 00000000..276872f1 --- /dev/null +++ b/apps/easytier/2.0.2/docker-compose.yml @@ -0,0 +1,15 @@ +services: + easytier: + image: "easytier/easytier:v2.0.2" + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + privileged: ${PRIVILEGED_MODE} + hostname: ${HOSTNAME} + environment: + - TZ=${TIME_ZONE} + volumes: + - ${DATA_PATH}:/root + command: ${COMMAND} + labels: + createdBy: "Apps" diff --git a/apps/easytier/README.md b/apps/easytier/README.md new file mode 100644 index 00000000..2143b1ca --- /dev/null +++ b/apps/easytier/README.md @@ -0,0 +1,27 @@ +# EasyTier + +## 使用说明 + +相关信息可通过容器日志与配置文件获取,注意参考官方文档来使用。 +*** +[简体中文](https://github.com/EasyTier/EasyTier/blob/main/README_CN.md) | [English](https://github.com/EasyTier/EasyTier/blob/main/README.md) + +**请访问 [EasyTier 官网](https://www.easytier.top/) 以查看完整的文档。** + +一个简单、安全、去中心化的内网穿透 VPN 组网方案,使用 Rust 语言和 Tokio 框架实现。 + + +## 特点 + +- **去中心化**:无需依赖中心化服务,节点平等且独立。 +- **安全**:支持利用 WireGuard 加密通信,也支持 AES-GCM 加密保护中转流量。 +- **高性能**:全链路零拷贝,性能与主流组网软件相当。 +- **跨平台**:支持 MacOS/Linux/Windows/Android,未来将支持 IOS。可执行文件静态链接,部署简单。 +- **无公网 IP 组网**:支持利用共享的公网节点组网,可参考 [配置指南](https://github.com/EasyTier/EasyTier/blob/main/README_CN.md#%E6%97%A0%E5%85%AC%E7%BD%91IP%E7%BB%84%E7%BD%91) +- **NAT 穿透**:支持基于 UDP 的 NAT 穿透,即使在复杂的网络环境下也能建立稳定的连接。 +- **子网代理(点对网)**:节点可以将可访问的网段作为代理暴露给 VPN 子网,允许其他节点通过该节点访问这些子网。 +- **智能路由**:根据流量智能选择链路,减少延迟,提高吞吐量。 +- **TCP 支持**:在 UDP 受限的情况下,通过并发 TCP 链接提供可靠的数据传输,优化性能。 +- **高可用性**:支持多路径和在检测到高丢包率或网络错误时切换到健康路径。 +- **IPV6 支持**:支持利用 IPV6 组网。 +- **多协议类型**: 支持使用 WebSocket、QUIC 等协议进行节点间通信。 diff --git a/apps/easytier/config-latest/.env.sample b/apps/easytier/config-latest/.env.sample new file mode 100644 index 00000000..fbe0f91d --- /dev/null +++ b/apps/easytier/config-latest/.env.sample @@ -0,0 +1,8 @@ +COMMAND="-c /root/config.toml" +CONFIG_FILE_PATH="./data/config.toml" +CONFIG_FILE_PATH_INTERNAL="/root/config.toml" +CONTAINER_NAME="easytier" +DATA_PATH="./data/data" +HOSTNAME="easytier" +PRIVILEGED_MODE="true" +TIME_ZONE="Asia/Shanghai" diff --git a/apps/easytier/config-latest/data.yml b/apps/easytier/config-latest/data.yml new file mode 100644 index 00000000..f644b3e8 --- /dev/null +++ b/apps/easytier/config-latest/data.yml @@ -0,0 +1,51 @@ +additionalProperties: + formFields: + - default: "./data/data" + edit: true + envKey: DATA_PATH + labelEn: Data Path + labelZh: 数据路径 + required: true + type: text + - default: "./data/config.toml" + disabled: true + envKey: CONFIG_FILE_PATH + labelEn: Configuration file path + labelZh: 配置文件路径 + required: true + type: text + - default: "/root/config.toml" + disabled: true + envKey: CONFIG_FILE_PATH_INTERNAL + labelEn: Configuration file path(inside container) + labelZh: 配置文件路径 (容器内部) + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TIME_ZONE + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: "true" + disabled: true + envKey: PRIVILEGED_MODE + labelEn: Privilege mode switch + labelZh: 特权模式开关 + required: true + type: text + - default: "easytier" + edit: true + envKey: HOSTNAME + labelEn: Hostname + labelZh: 主机名 + required: true + type: text + - default: "-c /root/config.toml" + disabled: true + envKey: COMMAND + labelEn: Command + labelZh: 命令 + required: true + type: text \ No newline at end of file diff --git a/apps/easytier/config-latest/data/config-example.toml b/apps/easytier/config-latest/data/config-example.toml new file mode 100644 index 00000000..389dbfeb --- /dev/null +++ b/apps/easytier/config-latest/data/config-example.toml @@ -0,0 +1,68 @@ +# 实例名称,用于在同一台机器上标识此 VPN 节点 +instance_name = "" +# 主机名,用于标识此设备的主机名 +hostname = "" +# 实例 ID,一般为 UUID,在同一个 VPN 网络中唯一 +instance_id = "" +# 此 VPN 节点的 IPv4 地址,如果为空,则此节点将仅转发数据包,不会创建 TUN 设备 +ipv4 = "" +# 由 Easytier 自动确定并设置IP地址,默认从10.0.0.1开始。警告:在使用 DHCP 时,如果网络中出现 IP 冲突,IP 将自动更改 +dhcp = false + +# 监听器列表,用于接受连接 +listeners = [ +"tcp://0.0.0.0:11010", +"udp://0.0.0.0:11010", +"wg://0.0.0.0:11011", +"ws://0.0.0.0:11011/", +"wss://0.0.0.0:11012/", +] + +# 退出节点列表 +exit_nodes = [ +] + +# 用于管理的 RPC 门户地址 +rpc_portal = "127.0.0.1:15888" + +[network_identity] +# 网络名称,用于标识 VPN 网络 +network_name = "" +# 网络密钥,用于验证此节点属于 VPN 网络 +network_secret = "" + +# 这里是对等连接节点配置,可以多段配置 +[[peer]] +uri = "" + +[[peer]] +uri = "" + +# 这里是子网代理节点配置,可以有多段配置 +[[proxy_network]] +cidr = "10.0.1.0/24" + +[[proxy_network]] +cidr = "10.0.2.0/24" + +[flags] +# 连接到对等节点使用的默认协议 +default_protocol = "tcp" +# TUN 设备名称,如果为空,则使用默认名称 +dev_name = "" +# 是否启用加密 +enable_encryption = true +# 是否启用 IPv6 支持 +enable_ipv6 = true +# TUN 设备的 MTU +mtu = 1380 +# 延迟优先模式,将尝试使用最低延迟路径转发流量,默认使用最短路径 +latency_first = false +# 将本节点配置为退出节点 +enable_exit_node = false +# 禁用 TUN 设备 +no_tun = false +# 为子网代理启用 smoltcp 堆栈 +use_smoltcp = false +# 仅转发白名单网络的流量,支持通配符字符串。多个网络名称间可以使用英文空格间隔。如果该参数为空,则禁用转发。默认允许所有网络。例如:'*'(所有网络),'def*'(以def为前缀的网络),'net1 net2'(只允许net1和net2) +foreign_network_whitelist = "*" \ No newline at end of file diff --git a/apps/easytier/config-latest/data/config.toml b/apps/easytier/config-latest/data/config.toml new file mode 100644 index 00000000..ed8de6dd --- /dev/null +++ b/apps/easytier/config-latest/data/config.toml @@ -0,0 +1,17 @@ +instance_name = "default" +instance_id = "3d3db819-ad54-4d86-bf9a-faac864478ab" +dhcp = false +listeners = [ + "tcp://0.0.0.0:11010", + "udp://0.0.0.0:11010", + "wg://0.0.0.0:11011", + "ws://0.0.0.0:11011/", + "wss://0.0.0.0:11012/", +] +exit_nodes = [] +peer = [] +rpc_portal = "0.0.0.0:15889" + +[network_identity] +network_name = "default" +network_secret = "" diff --git a/apps/easytier/config-latest/docker-compose.yml b/apps/easytier/config-latest/docker-compose.yml new file mode 100644 index 00000000..acfb4cb5 --- /dev/null +++ b/apps/easytier/config-latest/docker-compose.yml @@ -0,0 +1,20 @@ +services: + easytier: + image: "easytier/easytier:latest" + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + privileged: ${PRIVILEGED_MODE} + hostname: ${HOSTNAME} + environment: + - TZ=${TIME_ZONE} + volumes: + - ${DATA_PATH}:/root + - ${CONFIG_FILE_PATH}:${CONFIG_FILE_PATH_INTERNAL} + command: ${COMMAND} + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/easytier/data.yml b/apps/easytier/data.yml new file mode 100644 index 00000000..0bcb71c0 --- /dev/null +++ b/apps/easytier/data.yml @@ -0,0 +1,19 @@ +name: EasyTier +tags: + - 实用工具 +title: 一个简单、安全、去中心化的内网穿透 VPN 组网方案 +description: 一个简单、安全、去中心化的内网穿透 VPN 组网方案 +additionalProperties: + key: easytier + name: EasyTier + tags: + - Tool + shortDescZh: 一个简单、安全、去中心化的内网穿透 VPN 组网方案 + shortDescEn: A simple, safe and decentralized VPN networking solution + type: tool + crossVersionUpdate: true + limit: 1 + recommend: 0 + website: https://www.easytier.top + github: https://github.com/EasyTier/EasyTier + document: https://www.easytier.top diff --git a/apps/easytier/latest/.env.sample b/apps/easytier/latest/.env.sample new file mode 100644 index 00000000..2ad05e7c --- /dev/null +++ b/apps/easytier/latest/.env.sample @@ -0,0 +1,6 @@ +COMMAND="-i 10.144.144.1 --network-name abc --network-secret abc -p tcp://public.easytier.top:11010" +CONTAINER_NAME="easytier" +DATA_PATH="./data/data" +HOSTNAME="easytier" +PRIVILEGED_MODE="true" +TIME_ZONE="Asia/Shanghai" diff --git a/apps/easytier/latest/data.yml b/apps/easytier/latest/data.yml new file mode 100644 index 00000000..5564b2d6 --- /dev/null +++ b/apps/easytier/latest/data.yml @@ -0,0 +1,37 @@ +additionalProperties: + formFields: + - default: "./data" + edit: true + envKey: DATA_PATH + labelEn: Data Path + labelZh: 数据路径 + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TIME_ZONE + labelEn: Time Zone + labelZh: 时区 + required: true + type: text + - default: "true" + disabled: true + envKey: PRIVILEGED_MODE + labelEn: Privilege mode switch + labelZh: 特权模式开关 + required: true + type: text + - default: "easytier" + edit: true + envKey: HOSTNAME + labelEn: Hostname + labelZh: 主机名 + required: true + type: text + - default: "-i --network-name <用户> --network-secret <密码> -e tcp://<服务器地址>:11010 -l <监听地址>" + edit: true + envKey: COMMAND + labelEn: Command (modified as required) + labelZh: 命令 (按需修改) + required: true + type: text \ No newline at end of file diff --git a/apps/easytier/latest/docker-compose.yml b/apps/easytier/latest/docker-compose.yml new file mode 100644 index 00000000..92c52d2d --- /dev/null +++ b/apps/easytier/latest/docker-compose.yml @@ -0,0 +1,15 @@ +services: + easytier: + image: "easytier/easytier:latest" + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + privileged: ${PRIVILEGED_MODE} + hostname: ${HOSTNAME} + environment: + - TZ=${TIME_ZONE} + volumes: + - ${DATA_PATH}:/root + command: ${COMMAND} + labels: + createdBy: "Apps" diff --git a/apps/easytier/logo.png b/apps/easytier/logo.png new file mode 100644 index 00000000..9cec3e62 Binary files /dev/null and b/apps/easytier/logo.png differ