From 852d1c9e142b8351c37eaa535c65224933fd5f30 Mon Sep 17 00:00:00 2001 From: KKRainbow <443152178@qq.com> Date: Fri, 1 May 2026 13:45:19 +0800 Subject: [PATCH] feat(gui): add UPnP and public IPv6 advanced options (#2194) Expose disable-upnp and ipv6_public_addr_auto in the shared web/GUI config editor bump release metadata to 2.6.3. --- .github/workflows/docker.yml | 2 +- .github/workflows/release.yml | 2 +- Cargo.lock | 6 +++--- easytier-contrib/easytier-magisk/module.prop | 2 +- easytier-gui/package.json | 2 +- easytier-gui/src-tauri/Cargo.toml | 2 +- easytier-gui/src-tauri/tauri.conf.json | 2 +- easytier-web/Cargo.toml | 2 +- easytier-web/frontend-lib/src/components/Config.vue | 2 ++ easytier-web/frontend-lib/src/locales/cn.yaml | 6 ++++++ easytier-web/frontend-lib/src/locales/en.yaml | 6 ++++++ easytier-web/frontend-lib/src/types/network.ts | 4 ++++ easytier/Cargo.toml | 2 +- 13 files changed, 29 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index e23a2bd7..b39dc05e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -11,7 +11,7 @@ on: image_tag: description: 'Tag for this image build' type: string - default: 'v2.6.2' + default: 'v2.6.3' required: true mark_latest: description: 'Mark this image as latest' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 039a27c7..405d7dea 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ on: version: description: 'Version for this release' type: string - default: 'v2.6.2' + default: 'v2.6.3' required: true make_latest: description: 'Mark this release as latest' diff --git a/Cargo.lock b/Cargo.lock index 06b919f5..7049216b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2229,7 +2229,7 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "easytier" -version = "2.6.2" +version = "2.6.3" dependencies = [ "aes-gcm", "anyhow", @@ -2405,7 +2405,7 @@ dependencies = [ [[package]] name = "easytier-gui" -version = "2.6.2" +version = "2.6.3" dependencies = [ "anyhow", "async-trait", @@ -2486,7 +2486,7 @@ dependencies = [ [[package]] name = "easytier-web" -version = "2.6.2" +version = "2.6.3" dependencies = [ "anyhow", "async-trait", diff --git a/easytier-contrib/easytier-magisk/module.prop b/easytier-contrib/easytier-magisk/module.prop index 086597ca..1b489081 100644 --- a/easytier-contrib/easytier-magisk/module.prop +++ b/easytier-contrib/easytier-magisk/module.prop @@ -1,6 +1,6 @@ id=easytier_magisk name=EasyTier_Magisk -version=v2.6.2 +version=v2.6.3 versionCode=1 author=EasyTier description=easytier magisk module @EasyTier(https://github.com/EasyTier/EasyTier) diff --git a/easytier-gui/package.json b/easytier-gui/package.json index bf1ff7bc..79d5f3d8 100644 --- a/easytier-gui/package.json +++ b/easytier-gui/package.json @@ -1,7 +1,7 @@ { "name": "easytier-gui", "type": "module", - "version": "2.6.2", + "version": "2.6.3", "private": true, "packageManager": "pnpm@9.12.1+sha512.e5a7e52a4183a02d5931057f7a0dbff9d5e9ce3161e33fa68ae392125b79282a8a8a470a51dfc8a0ed86221442eb2fb57019b0990ed24fab519bf0e1bc5ccfc4", "scripts": { diff --git a/easytier-gui/src-tauri/Cargo.toml b/easytier-gui/src-tauri/Cargo.toml index f629ad1e..e1b3d71d 100644 --- a/easytier-gui/src-tauri/Cargo.toml +++ b/easytier-gui/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "easytier-gui" -version = "2.6.2" +version = "2.6.3" description = "EasyTier GUI" authors = ["you"] edition.workspace = true diff --git a/easytier-gui/src-tauri/tauri.conf.json b/easytier-gui/src-tauri/tauri.conf.json index b13b4806..e9ebd403 100644 --- a/easytier-gui/src-tauri/tauri.conf.json +++ b/easytier-gui/src-tauri/tauri.conf.json @@ -17,7 +17,7 @@ "createUpdaterArtifacts": false }, "productName": "easytier-gui", - "version": "2.6.2", + "version": "2.6.3", "identifier": "com.kkrainbow.easytier", "plugins": { "shell": { diff --git a/easytier-web/Cargo.toml b/easytier-web/Cargo.toml index d86e3181..66ca7c1b 100644 --- a/easytier-web/Cargo.toml +++ b/easytier-web/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "easytier-web" -version = "2.6.2" +version = "2.6.3" edition.workspace = true description = "Config server for easytier. easytier-core gets config from this and web frontend use it as restful api server." diff --git a/easytier-web/frontend-lib/src/components/Config.vue b/easytier-web/frontend-lib/src/components/Config.vue index 745724ee..a51417e0 100644 --- a/easytier-web/frontend-lib/src/components/Config.vue +++ b/easytier-web/frontend-lib/src/components/Config.vue @@ -81,6 +81,7 @@ const bool_flags: BoolFlag[] = [ { field: 'latency_first', help: 'latency_first_help' }, { field: 'use_smoltcp', help: 'use_smoltcp_help' }, { field: 'disable_ipv6', help: 'disable_ipv6_help' }, + { field: 'ipv6_public_addr_auto', help: 'ipv6_public_addr_auto_help' }, { field: 'enable_kcp_proxy', help: 'enable_kcp_proxy_help' }, { field: 'disable_kcp_input', help: 'disable_kcp_input_help' }, { field: 'enable_quic_proxy', help: 'enable_quic_proxy_help' }, @@ -98,6 +99,7 @@ const bool_flags: BoolFlag[] = [ { field: 'disable_encryption', help: 'disable_encryption_help' }, { field: 'disable_tcp_hole_punching', help: 'disable_tcp_hole_punching_help' }, { field: 'disable_udp_hole_punching', help: 'disable_udp_hole_punching_help' }, + { field: 'disable_upnp', help: 'disable_upnp_help' }, { field: 'disable_sym_hole_punching', help: 'disable_sym_hole_punching_help' }, { field: 'enable_magic_dns', help: 'enable_magic_dns_help' }, { field: 'enable_private_mode', help: 'enable_private_mode_help' }, diff --git a/easytier-web/frontend-lib/src/locales/cn.yaml b/easytier-web/frontend-lib/src/locales/cn.yaml index ef341c50..db2524c6 100644 --- a/easytier-web/frontend-lib/src/locales/cn.yaml +++ b/easytier-web/frontend-lib/src/locales/cn.yaml @@ -104,6 +104,9 @@ use_smoltcp_help: 使用用户态 TCP/IP 协议栈,避免操作系统防火墙 disable_ipv6: 禁用IPv6 disable_ipv6_help: 禁用此节点的IPv6功能,仅使用IPv4进行网络通信。 +ipv6_public_addr_auto: 自动获取公网 IPv6 +ipv6_public_addr_auto_help: 自动从共享了 IPv6 子网的对等节点获取一个公网 IPv6 地址。 + enable_kcp_proxy: 启用 KCP 代理 enable_kcp_proxy_help: 将 TCP 流量转为 KCP 流量,降低传输延迟,提升传输速度。 @@ -157,6 +160,9 @@ disable_tcp_hole_punching_help: 禁用TCP打洞功能 disable_udp_hole_punching: 禁用UDP打洞 disable_udp_hole_punching_help: 禁用UDP打洞功能 +disable_upnp: 禁用 UPnP +disable_upnp_help: 禁用符合条件监听器的运行时 UPnP/NAT-PMP 端口映射;自动端口映射默认开启。 + disable_sym_hole_punching: 禁用对称NAT打洞 disable_sym_hole_punching_help: 禁用对称NAT的打洞(生日攻击),将对称NAT视为锥形NAT处理 diff --git a/easytier-web/frontend-lib/src/locales/en.yaml b/easytier-web/frontend-lib/src/locales/en.yaml index 3d8c847a..82a5e6d4 100644 --- a/easytier-web/frontend-lib/src/locales/en.yaml +++ b/easytier-web/frontend-lib/src/locales/en.yaml @@ -103,6 +103,9 @@ use_smoltcp_help: Use a user-space TCP/IP stack to avoid issues with operating s disable_ipv6: Disable IPv6 disable_ipv6_help: Disable IPv6 functionality for this node, only use IPv4 for network communication. +ipv6_public_addr_auto: Auto Public IPv6 +ipv6_public_addr_auto_help: Auto-obtain a public IPv6 address from a peer that shares its IPv6 subnet. + enable_kcp_proxy: Enable KCP Proxy enable_kcp_proxy_help: Convert TCP traffic to KCP traffic to reduce latency and boost transmission speed. @@ -156,6 +159,9 @@ disable_tcp_hole_punching_help: Disable tcp hole punching disable_udp_hole_punching: Disable UDP Hole Punching disable_udp_hole_punching_help: Disable udp hole punching +disable_upnp: Disable UPnP +disable_upnp_help: Disable runtime UPnP/NAT-PMP port mapping for eligible listeners; automatic port mapping is enabled by default. + disable_sym_hole_punching: Disable Symmetric NAT Hole Punching disable_sym_hole_punching_help: Disable special hole punching handling for symmetric NAT (based on birthday attack), treat symmetric NAT as cone NAT diff --git a/easytier-web/frontend-lib/src/types/network.ts b/easytier-web/frontend-lib/src/types/network.ts index 45247c3e..2971dd86 100644 --- a/easytier-web/frontend-lib/src/types/network.ts +++ b/easytier-web/frontend-lib/src/types/network.ts @@ -115,6 +115,7 @@ export interface NetworkConfig { use_smoltcp?: boolean disable_ipv6?: boolean + ipv6_public_addr_auto?: boolean enable_kcp_proxy?: boolean disable_kcp_input?: boolean enable_quic_proxy?: boolean @@ -132,6 +133,7 @@ export interface NetworkConfig { disable_encryption?: boolean disable_tcp_hole_punching?: boolean disable_udp_hole_punching?: boolean + disable_upnp?: boolean disable_sym_hole_punching?: boolean enable_relay_network_whitelist?: boolean @@ -190,6 +192,7 @@ export function DEFAULT_NETWORK_CONFIG(): NetworkConfig { use_smoltcp: false, disable_ipv6: false, + ipv6_public_addr_auto: false, enable_kcp_proxy: false, disable_kcp_input: false, enable_quic_proxy: false, @@ -207,6 +210,7 @@ export function DEFAULT_NETWORK_CONFIG(): NetworkConfig { disable_encryption: false, disable_tcp_hole_punching: false, disable_udp_hole_punching: false, + disable_upnp: false, disable_sym_hole_punching: false, enable_relay_network_whitelist: false, relay_network_whitelist: [], diff --git a/easytier/Cargo.toml b/easytier/Cargo.toml index cd6d876c..618b6613 100644 --- a/easytier/Cargo.toml +++ b/easytier/Cargo.toml @@ -3,7 +3,7 @@ name = "easytier" description = "A full meshed p2p VPN, connecting all your devices in one network with one command." homepage = "https://github.com/EasyTier/EasyTier" repository = "https://github.com/EasyTier/EasyTier" -version = "2.6.2" +version = "2.6.3" edition.workspace = true rust-version.workspace = true authors = ["kkrainbow"]