fix(outbounds): support proxyProtocol on freedom outbound

Xray's freedom outbound accepts a numeric proxyProtocol (0 disabled,
1 or 2 for the PROXY protocol version), but the panel had no field for
it and the typed form adapter dropped the key on save — so a value set
via the JSON editor disappeared the moment the outbound was saved.

Model proxyProtocol through the freedom wire schema, the form schema,
and both adapter directions (clamped to 0/1/2, omitted from the wire
when 0), and add a Select (none / v1 / v2) to the freedom section of
the outbound form. Add round-trip test coverage and the proxyProtocol
label across all locales.

Closes #4486
This commit is contained in:
MHSanaei
2026-05-29 17:18:21 +02:00
parent 5d0081a3b9
commit 62c293e034
18 changed files with 39 additions and 0 deletions
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "الواجهة",
"ipv6Only": "IPv6 فقط",
"acceptProxyProtocol": "قبول proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (ثانية)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Interface",
"ipv6Only": "IPv6 only",
"acceptProxyProtocol": "Accept proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Interfaz",
"ipv6Only": "Solo IPv6",
"acceptProxyProtocol": "Aceptar proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "رابط",
"ipv6Only": "فقط IPv6",
"acceptProxyProtocol": "پذیرش Proxy Protocol",
"proxyProtocol": "Proxy Protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Interface",
"ipv6Only": "Hanya IPv6",
"acceptProxyProtocol": "Terima proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (d)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "インターフェース",
"ipv6Only": "IPv6 のみ",
"acceptProxyProtocol": "proxy protocol を受け入れる",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (秒)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Interface",
"ipv6Only": "Apenas IPv6",
"acceptProxyProtocol": "Aceitar proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Интерфейс",
"ipv6Only": "Только IPv6",
"acceptProxyProtocol": "Принимать proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (мс)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (с)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Arabirim",
"ipv6Only": "Yalnızca IPv6",
"acceptProxyProtocol": "Proxy protocol kabul et",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Інтерфейс",
"ipv6Only": "Лише IPv6",
"acceptProxyProtocol": "Приймати proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (мс)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (с)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "Giao diện",
"ipv6Only": "Chỉ IPv6",
"acceptProxyProtocol": "Chấp nhận proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "接口",
"ipv6Only": "仅 IPv6",
"acceptProxyProtocol": "接受 proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},
+1
View File
@@ -1209,6 +1209,7 @@
"interface": "介面",
"ipv6Only": "僅 IPv6",
"acceptProxyProtocol": "接受 proxy protocol",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (s)"
},