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 {