diff --git a/easytier-web/frontend-lib/src/components/Config.vue b/easytier-web/frontend-lib/src/components/Config.vue index a367003..2112a81 100644 --- a/easytier-web/frontend-lib/src/components/Config.vue +++ b/easytier-web/frontend-lib/src/components/Config.vue @@ -310,6 +310,18 @@ const bool_flags: BoolFlag[] = [ +
+
+
+ + +
+ +
+
+
@@ -376,6 +388,18 @@ const bool_flags: BoolFlag[] = [
+
+
+
+ + +
+ +
+
+
diff --git a/easytier-web/frontend-lib/src/locales/cn.yaml b/easytier-web/frontend-lib/src/locales/cn.yaml index 1ac76a3..4255cac 100644 --- a/easytier-web/frontend-lib/src/locales/cn.yaml +++ b/easytier-web/frontend-lib/src/locales/cn.yaml @@ -128,6 +128,16 @@ socks5_help: | exit_nodes: 出口节点列表 exit_nodes_help: 转发所有流量的出口节点,虚拟IPv4地址,优先级由列表顺序决定 +mtu: MTU +mtu_help: | + TUN设备的MTU,默认为非加密时为1380,加密时为1360。范围:400-1380 +mtu_placeholder: 留空为默认值1380 + +mapped_listeners: 监听映射 +mapped_listeners_help: | + 手动指定监听器的公网地址,其他节点可以使用该地址连接到本节点。 + 例如:tcp://123.123.123.123:11223,可以指定多个。 + status: version: 内核版本 local: 本机 diff --git a/easytier-web/frontend-lib/src/locales/en.yaml b/easytier-web/frontend-lib/src/locales/en.yaml index af86d96..26e11d9 100644 --- a/easytier-web/frontend-lib/src/locales/en.yaml +++ b/easytier-web/frontend-lib/src/locales/en.yaml @@ -128,6 +128,16 @@ socks5_help: | exit_nodes: Exit Nodes exit_nodes_help: Exit nodes to forward all traffic to, a virtual ipv4 address, priority is determined by the order of the list +mtu: MTU +mtu_help: | + MTU of the TUN device, default is 1380 for non-encryption, 1360 for encryption. Range:400-1380 +mtu_placeholder: Leave blank as default value 1380 + +mapped_listeners: Map Listeners +mapped_listeners_help: | + Manually specify the public address of the listener, other nodes can use this address to connect to this node. + e.g.: tcp://123.123.123.123:11223, can specify multiple. + status: version: Version local: Local diff --git a/easytier-web/frontend-lib/src/types/network.ts b/easytier-web/frontend-lib/src/types/network.ts index 0b7be35..3de4890 100644 --- a/easytier-web/frontend-lib/src/types/network.ts +++ b/easytier-web/frontend-lib/src/types/network.ts @@ -59,6 +59,9 @@ export interface NetworkConfig { enable_socks5?: boolean socks5_port: number + + mtu: number | null + mapped_listeners: string[] } export function DEFAULT_NETWORK_CONFIG(): NetworkConfig { @@ -113,6 +116,8 @@ export function DEFAULT_NETWORK_CONFIG(): NetworkConfig { exit_nodes: [], enable_socks5: false, socks5_port: 1080, + mtu: null, + mapped_listeners: [], } } diff --git a/easytier/src/launcher.rs b/easytier/src/launcher.rs index baf8fe2..e0f0d07 100644 --- a/easytier/src/launcher.rs +++ b/easytier/src/launcher.rs @@ -550,6 +550,25 @@ impl NetworkConfig { } } + if self.mapped_listeners.len() > 0 { + cfg.set_mapped_listeners(Some( + self.mapped_listeners + .iter() + .map(|s| { + s.parse() + .with_context(|| format!("mapped listener is not a valid url: {}", s)) + .unwrap() + }) + .map(|s: url::Url| { + if s.port().is_none() { + panic!("mapped listener port is missing: {}", s); + } + s + }) + .collect(), + )); + } + let mut flags = gen_default_flags(); if let Some(latency_first) = self.latency_first { flags.latency_first = latency_first; @@ -605,17 +624,20 @@ impl NetworkConfig { if self.enable_relay_network_whitelist.unwrap_or_default() { if self.relay_network_whitelist.len() > 0 { - flags.relay_network_whitelist = self.relay_network_whitelist.join(" ") + flags.relay_network_whitelist = self.relay_network_whitelist.join(" "); } else { - flags.relay_network_whitelist = "".to_string() + flags.relay_network_whitelist = "".to_string(); } - } if let Some(disable_udp_hole_punching) = self.disable_udp_hole_punching { flags.disable_udp_hole_punching = disable_udp_hole_punching; } + if let Some(mtu) = self.mtu { + flags.mtu = mtu as u32; + } + cfg.set_flags(flags); Ok(cfg) } diff --git a/easytier/src/proto/web.proto b/easytier/src/proto/web.proto index 27632c9..f6c999f 100644 --- a/easytier/src/proto/web.proto +++ b/easytier/src/proto/web.proto @@ -61,6 +61,8 @@ message NetworkConfig { optional bool enable_socks5 = 37; optional int32 socks5_port = 38; optional bool disable_udp_hole_punching = 39; + optional int32 mtu = 40; + repeated string mapped_listeners = 41; } message MyNodeInfo {