mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2025-04-19 21:42:24 +00:00
new - (Sockopt) tcpMptcp , tcpNoDelay
https://xtls.github.io/en/config/transport.html#sockoptobject
This commit is contained in:
parent
e7c59adc59
commit
275370e32c
9 changed files with 29 additions and 10 deletions
|
@ -211,7 +211,7 @@ func (s *SubJsonService) streamData(stream string) map[string]interface{} {
|
||||||
delete(streamSettings, "sockopt")
|
delete(streamSettings, "sockopt")
|
||||||
|
|
||||||
if s.fragment != "" {
|
if s.fragment != "" {
|
||||||
streamSettings["sockopt"] = json_util.RawMessage(`{"dialerProxy": "fragment", "tcpKeepAliveIdle": 100, "tcpNoDelay": true}`)
|
streamSettings["sockopt"] = json_util.RawMessage(`{"dialerProxy": "fragment", "tcpKeepAliveIdle": 100, "tcpMptcp": true, "tcpNoDelay": true}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove proxy protocol
|
// remove proxy protocol
|
||||||
|
|
|
@ -361,11 +361,12 @@ class RealityStreamSettings extends CommonClass {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
class SockoptStreamSettings extends CommonClass {
|
class SockoptStreamSettings extends CommonClass {
|
||||||
constructor(dialerProxy = "", tcpFastOpen = false, tcpKeepAliveInterval = 0, tcpNoDelay = false) {
|
constructor(dialerProxy = "", tcpFastOpen = false, tcpKeepAliveInterval = 0, tcpMptcp = false, tcpNoDelay = false) {
|
||||||
super();
|
super();
|
||||||
this.dialerProxy = dialerProxy;
|
this.dialerProxy = dialerProxy;
|
||||||
this.tcpFastOpen = tcpFastOpen;
|
this.tcpFastOpen = tcpFastOpen;
|
||||||
this.tcpKeepAliveInterval = tcpKeepAliveInterval;
|
this.tcpKeepAliveInterval = tcpKeepAliveInterval;
|
||||||
|
this.tcpMptcp = tcpMptcp;
|
||||||
this.tcpNoDelay = tcpNoDelay;
|
this.tcpNoDelay = tcpNoDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -375,6 +376,7 @@ class SockoptStreamSettings extends CommonClass {
|
||||||
json.dialerProxy,
|
json.dialerProxy,
|
||||||
json.tcpFastOpen,
|
json.tcpFastOpen,
|
||||||
json.tcpKeepAliveInterval,
|
json.tcpKeepAliveInterval,
|
||||||
|
json.tcpMptcp,
|
||||||
json.tcpNoDelay,
|
json.tcpNoDelay,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -384,6 +386,7 @@ class SockoptStreamSettings extends CommonClass {
|
||||||
dialerProxy: this.dialerProxy,
|
dialerProxy: this.dialerProxy,
|
||||||
tcpFastOpen: this.tcpFastOpen,
|
tcpFastOpen: this.tcpFastOpen,
|
||||||
tcpKeepAliveInterval: this.tcpKeepAliveInterval,
|
tcpKeepAliveInterval: this.tcpKeepAliveInterval,
|
||||||
|
tcpMptcp: this.tcpMptcp,
|
||||||
tcpNoDelay: this.tcpNoDelay,
|
tcpNoDelay: this.tcpNoDelay,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -881,12 +881,14 @@ RealityStreamSettings.Settings = class extends XrayCommonClass {
|
||||||
};
|
};
|
||||||
|
|
||||||
class SockoptStreamSettings extends XrayCommonClass {
|
class SockoptStreamSettings extends XrayCommonClass {
|
||||||
constructor(acceptProxyProtocol = false, tcpFastOpen = false, mark = 0, tproxy="off") {
|
constructor(acceptProxyProtocol = false, tcpFastOpen = false, mark = 0, tproxy="off", tcpMptcp = false, tcpNoDelay = false) {
|
||||||
super();
|
super();
|
||||||
this.acceptProxyProtocol = acceptProxyProtocol;
|
this.acceptProxyProtocol = acceptProxyProtocol;
|
||||||
this.tcpFastOpen = tcpFastOpen;
|
this.tcpFastOpen = tcpFastOpen;
|
||||||
this.mark = mark;
|
this.mark = mark;
|
||||||
this.tproxy = tproxy;
|
this.tproxy = tproxy;
|
||||||
|
this.tcpMptcp = tcpMptcp;
|
||||||
|
this.tcpNoDelay = tcpNoDelay;
|
||||||
}
|
}
|
||||||
|
|
||||||
static fromJson(json = {}) {
|
static fromJson(json = {}) {
|
||||||
|
@ -896,6 +898,8 @@ class SockoptStreamSettings extends XrayCommonClass {
|
||||||
json.tcpFastOpen,
|
json.tcpFastOpen,
|
||||||
json.mark,
|
json.mark,
|
||||||
json.tproxy,
|
json.tproxy,
|
||||||
|
json.tcpMptcp,
|
||||||
|
json.tcpNoDelay,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -905,6 +909,8 @@ class SockoptStreamSettings extends XrayCommonClass {
|
||||||
tcpFastOpen: this.tcpFastOpen,
|
tcpFastOpen: this.tcpFastOpen,
|
||||||
mark: this.mark,
|
mark: this.mark,
|
||||||
tproxy: this.tproxy,
|
tproxy: this.tproxy,
|
||||||
|
tcpMptcp: this.tcpMptcp,
|
||||||
|
tcpNoDelay: this.tcpNoDelay,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -402,6 +402,9 @@
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="Keep Alive Interval">
|
<a-form-item label="Keep Alive Interval">
|
||||||
<a-input-number v-model="outbound.stream.sockopt.tcpKeepAliveInterval" :min="0"></a-input-number>
|
<a-input-number v-model="outbound.stream.sockopt.tcpKeepAliveInterval" :min="0"></a-input-number>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="Multipath TCP">
|
||||||
|
<a-switch v-model.trim="outbound.stream.sockopt.tcpMptcp"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="TCP No-Delay">
|
<a-form-item label="TCP No-Delay">
|
||||||
<a-switch v-model="outbound.stream.sockopt.tcpNoDelay"></a-switch>
|
<a-switch v-model="outbound.stream.sockopt.tcpNoDelay"></a-switch>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{{define "form/streamHTTPUpgrade"}}
|
{{define "form/streamHTTPUpgrade"}}
|
||||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||||
<a-form-item label="PROXY Protocol">
|
<a-form-item label="Proxy Protocol">
|
||||||
<a-switch v-model="inbound.stream.httpupgrade.acceptProxyProtocol"></a-switch>
|
<a-switch v-model="inbound.stream.httpupgrade.acceptProxyProtocol"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='{{ i18n "host" }}'>
|
<a-form-item label='{{ i18n "host" }}'>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{{define "form/streamSockopt"}}
|
{{define "form/streamSockopt"}}
|
||||||
<a-divider style="margin:5px 0 0;"></a-divider>
|
<a-divider style="margin:5px 0 0;"></a-divider>
|
||||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||||
<a-form-item label="TPROXY">
|
<a-form-item label="Sockopt">
|
||||||
<a-switch v-model="inbound.stream.sockoptSwitch"></a-switch>
|
<a-switch v-model="inbound.stream.sockoptSwitch"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<template v-if="inbound.stream.sockoptSwitch">
|
<template v-if="inbound.stream.sockoptSwitch">
|
||||||
<a-form-item label="PROXY Protocol">
|
<a-form-item label="Proxy Protocol">
|
||||||
<a-switch v-model="inbound.stream.sockopt.acceptProxyProtocol"></a-switch>
|
<a-switch v-model="inbound.stream.sockopt.acceptProxyProtocol"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="TCP Fast Open">
|
<a-form-item label="TCP Fast Open">
|
||||||
|
@ -14,13 +14,19 @@
|
||||||
<a-form-item label="Route Mark">
|
<a-form-item label="Route Mark">
|
||||||
<a-input-number v-model="inbound.stream.sockopt.mark" :min="0"></a-input-number>
|
<a-input-number v-model="inbound.stream.sockopt.mark" :min="0"></a-input-number>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="TPROXY">
|
<a-form-item label="TProxy">
|
||||||
<a-select v-model="inbound.stream.sockopt.tproxy" :dropdown-class-name="themeSwitcher.currentTheme">
|
<a-select v-model="inbound.stream.sockopt.tproxy" :dropdown-class-name="themeSwitcher.currentTheme">
|
||||||
<a-select-option value="off">Off</a-select-option>
|
<a-select-option value="off">Off</a-select-option>
|
||||||
<a-select-option value="redirect">Redirect</a-select-option>
|
<a-select-option value="redirect">Redirect</a-select-option>
|
||||||
<a-select-option value="tproxy">TPROXY</a-select-option>
|
<a-select-option value="tproxy">TProxy</a-select-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
<a-form-item label="Multipath TCP">
|
||||||
|
<a-switch v-model.trim="inbound.stream.sockopt.tcpMptcp"></a-switch>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="TCP No-Delay">
|
||||||
|
<a-switch v-model.trim="inbound.stream.sockopt.tcpNoDelay"></a-switch>
|
||||||
|
</a-form-item>
|
||||||
</template>
|
</template>
|
||||||
</a-form>
|
</a-form>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{{define "form/streamTCP"}}
|
{{define "form/streamTCP"}}
|
||||||
<!-- tcp type -->
|
<!-- tcp type -->
|
||||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||||
<a-form-item label="PROXY Protocol" v-if="inbound.canEnableTls()">
|
<a-form-item label="Proxy Protocol" v-if="inbound.canEnableTls()">
|
||||||
<a-switch v-model="inbound.stream.tcp.acceptProxyProtocol"></a-switch>
|
<a-switch v-model="inbound.stream.tcp.acceptProxyProtocol"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='HTTP {{ i18n "camouflage" }}'>
|
<a-form-item label='HTTP {{ i18n "camouflage" }}'>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{{define "form/streamWS"}}
|
{{define "form/streamWS"}}
|
||||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
||||||
<a-form-item label="PROXY Protocol">
|
<a-form-item label="Proxy Protocol">
|
||||||
<a-switch v-model="inbound.stream.ws.acceptProxyProtocol"></a-switch>
|
<a-switch v-model="inbound.stream.ws.acceptProxyProtocol"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='{{ i18n "host" }}'>
|
<a-form-item label='{{ i18n "host" }}'>
|
||||||
|
|
|
@ -407,6 +407,7 @@
|
||||||
streamSettings: {
|
streamSettings: {
|
||||||
sockopt: {
|
sockopt: {
|
||||||
tcpKeepAliveIdle: 100,
|
tcpKeepAliveIdle: 100,
|
||||||
|
tcpMptcp: true,
|
||||||
tcpNoDelay: true
|
tcpNoDelay: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue