From 094ea9faaae35b452ca3bd30b4b519da95ef984d Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Mon, 20 Apr 2026 18:14:32 +0200 Subject: [PATCH] tun: dual MTU, gateway, DNS, auto routing Change TunSettings to support separate IPv4/IPv6 MTU values and add gateway, DNS, autoSystemRoutingTable and autoOutboundsInterface properties. Introduces _normalizeMtu to accept legacy single-value or array forms and provide sensible defaults. Update fromJson/toJson to handle new fields and preserve backward compatibility. Update tun form UI to expose MTU IPv4/IPv6 inputs, Gateway/DNS tag selects, Auto Routing Table and Auto Outbounds input. --- web/assets/js/model/inbound.js | 43 ++++++++++++++++++++++++++----- web/html/form/protocol/tun.html | 45 +++++++++++++++++++++++++++++++-- 2 files changed, 80 insertions(+), 8 deletions(-) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index c4416e59..c94bd8d3 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -2723,29 +2723,60 @@ Inbound.TunSettings = class extends Inbound.Settings { constructor( protocol, name = 'xray0', - mtu = 1500, - userLevel = 0 + mtu = [1500, 1280], + gateway = [], + dns = [], + userLevel = 0, + autoSystemRoutingTable = [], + autoOutboundsInterface = 'auto' ) { super(protocol); this.name = name; - this.mtu = mtu; + this.mtu = this._normalizeMtu(mtu); + this.gateway = Array.isArray(gateway) ? gateway : []; + this.dns = Array.isArray(dns) ? dns : []; this.userLevel = userLevel; + this.autoSystemRoutingTable = Array.isArray(autoSystemRoutingTable) ? autoSystemRoutingTable : []; + this.autoOutboundsInterface = autoOutboundsInterface; + } + + _normalizeMtu(mtu) { + if (!Array.isArray(mtu)) { + const single = Number(mtu) || 1500; + return [single, single]; + } + if (mtu.length === 0) { + return [1500, 1280]; + } + if (mtu.length === 1) { + const single = Number(mtu[0]) || 1500; + return [single, single]; + } + return [Number(mtu[0]) || 1500, Number(mtu[1]) || 1280]; } static fromJson(json = {}) { return new Inbound.TunSettings( Protocols.TUN, json.name ?? 'xray0', - json.mtu ?? json.MTU ?? 1500, - json.userLevel ?? 0 + json.mtu ?? json.MTU ?? [1500, 1280], + json.gateway ?? json.Gateway ?? [], + json.dns ?? json.DNS ?? [], + json.userLevel ?? 0, + json.autoSystemRoutingTable ?? [], + Object.prototype.hasOwnProperty.call(json, 'autoOutboundsInterface') ? json.autoOutboundsInterface : 'auto' ); } toJson() { return { name: this.name || 'xray0', - mtu: this.mtu || 1500, + mtu: this._normalizeMtu(this.mtu), + gateway: this.gateway, + dns: this.dns, userLevel: this.userLevel || 0, + autoSystemRoutingTable: this.autoSystemRoutingTable, + autoOutboundsInterface: this.autoOutboundsInterface, }; } }; \ No newline at end of file diff --git a/web/html/form/protocol/tun.html b/web/html/form/protocol/tun.html index 7972c742..236f65cf 100644 --- a/web/html/form/protocol/tun.html +++ b/web/html/form/protocol/tun.html @@ -22,17 +22,43 @@ - MTU + MTU IPv4 + + + + + + + + +