luci-app-frp: support QUIC protocol and Dashboard TLS
authorRoc Lai <[email protected]>
Thu, 14 Aug 2025 07:31:59 +0000 (15:31 +0800)
committerPaul Donald <[email protected]>
Fri, 10 Oct 2025 15:07:16 +0000 (17:07 +0200)
Add support for the QUIC protocol and Dashboard TLS in LuCI, new features in the latest version of frp.​ openwrt/packages#27191

Signed-off-by: Roc Lai <[email protected]>
applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js
applications/luci-app-frpc/po/zh_Hans/frpc.po
applications/luci-app-frpc/po/zh_Hant/frpc.po
applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js
applications/luci-app-frps/po/zh_Hans/frps.po
applications/luci-app-frps/po/zh_Hant/frps.po

index 76928e9e41cbcd187ce88e4e519959ca67b91af8..ab6e061e1011839f59add2c4269bdc6a43c1cf2d 100644 (file)
@@ -33,8 +33,8 @@ var commonConf = [
        [form.Flag, 'tcp_mux', _('TCP mux'), _('TcpMux toggles TCP stream multiplexing. This allows multiple requests from a client to share a single TCP connection. If this value is true, the server must have TCP multiplexing enabled as well.<br />By default, this value is true.'), {datatype: 'bool', default: 'true'}],
        [form.Value, 'user', _('User'), _('User specifies a prefix for proxy names to distinguish them from other clients. If this value is not "", proxy names will automatically be changed to "{user}.{proxy_name}".<br />By default, this value is "".')],
        [form.Flag, 'login_fail_exit', _('Exit when login fail'), _('LoginFailExit controls whether or not the client should exit after a failed login attempt. If false, the client will retry until a login attempt succeeds.<br />By default, this value is true.'), {datatype: 'bool', default: 'true'}],
-       [form.ListValue, 'protocol', _('Protocol'), _('Protocol specifies the protocol to use when interacting with the server. Valid values are "tcp", "kcp", and "websocket".<br />By default, this value is "tcp".'), {values: ['tcp', 'kcp', 'websocket']}],
-       [form.Flag, 'tls_enable', _('TLS'), _('TLSEnable specifies whether or not TLS should be used when communicating with the server.'), {datatype: 'bool'}],
+       [form.ListValue, 'protocol', _('Protocol'), _('Protocol specifies the protocol to use when interacting with the server. Valid values are "tcp", "kcp", "quic" and "websocket".<br />By default, this value is "tcp".'), {values: ['tcp', 'kcp', 'quic', 'websocket']}],
+       [form.Flag, 'tls_enable', _('TLS'), _('TLS Enable specifies whether or not TLS should be used when communicating with the server.'), {datatype: 'bool'}],
        [form.Value, 'heartbeat_interval', _('Heartbeat interval'), _('HeartBeatInterval specifies at what interval heartbeats are sent to the server, in seconds. It is not recommended to change this value.<br />By default, this value is 30.'), {datatype: 'uinteger'}],
        [form.Value, 'heartbeat_timeout', _('Heartbeat timeout'), _('HeartBeatTimeout specifies the maximum allowed heartbeat response delay before the connection is terminated, in seconds. It is not recommended to change this value.<br />By default, this value is 90.'), {datatype: 'uinteger'}],
        [form.DynamicList, '_', _('Additional settings'), _('This list can be used to specify some additional parameters which have not been included in this LuCI.'), {placeholder: 'Key-A=Value-A'}]
@@ -42,7 +42,7 @@ var commonConf = [
 
 var baseProxyConf = [
        [form.Value, 'name', _('Proxy name'), undefined, {rmempty: false, optional: false}],
-       [form.ListValue, 'type', _('Proxy type'), _('ProxyType specifies the type of this proxy. Valid values include "tcp", "udp", "http", "https", "stcp", and "xtcp".<br />By default, this value is "tcp".'), {values: ['tcp', 'udp', 'http', 'https', 'stcp', 'xtcp']}],
+       [form.ListValue, 'type', _('Proxy type'), _('ProxyType specifies the type of this proxy. Valid values include "tcp", "udp", "http", "https", "stcp" and "xtcp".<br />By default, this value is "tcp".'), {values: ['tcp', 'udp', 'http', 'https', 'stcp', 'xtcp']}],
        [form.Flag, 'use_encryption', _('Encryption'), _('UseEncryption controls whether or not communication with the server will be encrypted. Encryption is done using the tokens supplied in the server and client configuration.<br />By default, this value is false.'), {datatype: 'bool'}],
        [form.Flag, 'use_compression', _('Compression'), _('UseCompression controls whether or not communication with the server will be compressed.<br />By default, this value is false.'), {datatype: 'bool'}],
        [form.Value, 'local_ip', _('Local IP'), _('LocalIp specifies the IP address or host name to proxy to.'), {datatype: 'host'}],
index 030a0e7fc5ac0324f8161316c5ec98b82149a331..5a0e638c6d07a57e1e1249ef8e780110998cfd65 100644 (file)
@@ -296,10 +296,10 @@ msgstr "协议"
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:36
 msgid ""
 "Protocol specifies the protocol to use when interacting with the server. "
-"Valid values are \"tcp\", \"kcp\", and \"websocket\".<br />By default, this "
-"value is \"tcp\"."
+"Valid values are \"tcp\", \"kcp\", \"quic\" and \"websocket\".<br />By "
+"default, this value is \"tcp\"."
 msgstr ""
-"Protocol 指定在与服务器交互时要使用的协议。有效值为\"tcp\"、\"kcp\"和"
+"Protocol 指定在与服务器交互时要使用的协议。有效值为\"tcp\"、\"kcp\"、\"quic\"和"
 "\"websocket\"。<br />默认情况下,此值为\"tcp\"。"
 
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:210
@@ -319,8 +319,8 @@ msgstr "代理类型"
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:45
 msgid ""
 "ProxyType specifies the type of this proxy. Valid values include \"tcp\", "
-"\"udp\", \"http\", \"https\", \"stcp\", and \"xtcp\".<br />By default, this "
-"value is \"tcp\"."
+"\"udp\", \"http\", \"https\", \"stcp\" and \"xtcp\".<br />By "
+"default, this value is \"tcp\"."
 msgstr ""
 "ProxyType 指定此代理的类型。有效值包括\"tcp\"、\"udp\"、\"http\"、\"https\"、"
 "\"stcp\"和\"xtcp\"。<br />默认情况下,此值为\"tcp\"。"
@@ -407,9 +407,9 @@ msgstr "TLS"
 
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:37
 msgid ""
-"TLSEnable specifies whether or not TLS should be used when communicating "
+"TLS Enable specifies whether or not TLS should be used when communicating "
 "with the server."
-msgstr "TLSEnable 指定在与服务器通信时是否应使用 TLS。"
+msgstr "TLS Enable 指定在与服务器通信时是否应使用 TLS。"
 
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:33
 msgid ""
index 12520fd7848b22a82442f9856162eb90c7b911c4..4e6ae5e52d153a93112bc3964a234250d4cb02df 100644 (file)
@@ -295,11 +295,11 @@ msgstr "協定"
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:36
 msgid ""
 "Protocol specifies the protocol to use when interacting with the server. "
-"Valid values are \"tcp\", \"kcp\", and \"websocket\".<br />By default, this "
-"value is \"tcp\"."
+"Valid values are \"tcp\", \"kcp\", \"quic\" and \"websocket\".<br />By "
+"default, this value is \"tcp\"."
 msgstr ""
-"Protocol指定與伺服器互動時要使用的協定。有效值為“ tcp”,“ kcp”和“ "
-"websocket”。<br />預設情況下,此值為“ tcp”。"
+"Protocol指定與伺服器互動時要使用的協定。有效值為“ tcp”,“ kcp”,“ quic”和"
+"“ websocket”。<br />預設情況下,此值為“ tcp”。"
 
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:210
 msgid "Proxy Settings"
@@ -318,8 +318,8 @@ msgstr "代理類別"
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:45
 msgid ""
 "ProxyType specifies the type of this proxy. Valid values include \"tcp\", "
-"\"udp\", \"http\", \"https\", \"stcp\", and \"xtcp\".<br />By default, this "
-"value is \"tcp\"."
+"\"udp\", \"http\", \"https\", \"stcp\" and \"xtcp\".<br />By "
+"default, this value is \"tcp\"."
 msgstr ""
 "ProxyType指定此代理的類型。有效值包括“ tcp”,“ udp”,“ http”,“ https”,“ "
 "stcp”和“ xtcp”。<br />預設情況下,此值為“ tcp”。"
@@ -404,9 +404,9 @@ msgstr "TLS"
 
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:37
 msgid ""
-"TLSEnable specifies whether or not TLS should be used when communicating "
+"TLS Enable specifies whether or not TLS should be used when communicating "
 "with the server."
-msgstr "TLSEnable指定與伺服器通訊時是否應使用TLS。"
+msgstr "TLS Enable指定與伺服器通訊時是否應使用TLS。"
 
 #: applications/luci-app-frpc/htdocs/luci-static/resources/view/frpc.js:33
 msgid ""
index 1fce4d8f14a5f0dc16b1c4f46e275405d8cb9213..9367b04550efcb8cab4aa7304f0055039bed0ffe 100644 (file)
@@ -18,8 +18,9 @@ var startupConf = [
 var commonConf = [
        [form.Value, 'bind_addr', _('Bind address'), _('BindAddr specifies the address that the server binds to.<br />By default, this value is "0.0.0.0".'), {datatype: 'ipaddr'}],
        [form.Value, 'bind_port', _('Bind port'), _('BindPort specifies the port that the server listens on.<br />By default, this value is 7000.'), {datatype: 'port'}],
-       [form.Value, 'bind_udp_port', _('UDP bind port'), _('BindUdpPort specifies the UDP port that the server listens on. If this value is 0, the server will not listen for UDP connections.<br />By default, this value is 0'), {datatype: 'port'}],
+       [form.Value, 'bind_udp_port', _('UDP bind port'), _('BindUdpPort specifies the UDP port that the server listens on. If this value is 0, the server will not listen for UDP connections.<br />By default, this value is 0.'), {datatype: 'port'}],
        [form.Value, 'kcp_bind_port', _('KCP bind port'), _('BindKcpPort specifies the KCP port that the server listens on. If this value is 0, the server will not listen for KCP connections.<br />By default, this value is 0.'), {datatype: 'port'}],
+       [form.Value, 'quic_bind_port', _('QUIC bind port'), _('BindQuicPort specifies the QUIC port that the server listens on. If this value is 0, the server will not listen for QUIC connections.<br />By default, this value is 0.'), {datatype: 'port'}],
        [form.Value, 'proxy_bind_addr', _('Proxy bind address'), _('ProxyBindAddr specifies the address that the proxy binds to. This value may be the same as BindAddr.<br />By default, this value is "0.0.0.0".'), {datatype: 'ipaddr'}],
        [form.Value, 'vhost_http_port', _('Vhost HTTP port'), _('VhostHttpPort specifies the port that the server listens for HTTP Vhost requests. If this value is 0, the server will not listen for HTTP requests.<br />By default, this value is 0.'), {datatype: 'port'}],
        [form.Value, 'vhost_https_port', _('Vhost HTTPS port'), _('VhostHttpsPort specifies the port that the server listens for HTTPS Vhost requests. If this value is 0, the server will not listen for HTTPS requests.<br />By default, this value is 0.'), {datatype: 'port'}],
@@ -28,6 +29,9 @@ var commonConf = [
        [form.Value, 'dashboard_port', _('Dashboard port'), _('DashboardPort specifies the port that the dashboard listens on. If this value is 0, the dashboard will not be started.<br />By default, this value is 0.'), {datatype: 'port'}],
        [form.Value, 'dashboard_user', _('Dashboard user'), _('DashboardUser specifies the username that the dashboard will use for login.<br />By default, this value is "admin".')],
        [form.Value, 'dashboard_pwd', _('Dashboard password'), _('DashboardPwd specifies the password that the dashboard will use for login.<br />By default, this value is "admin".'), {password: true}],
+       [form.Flag, 'dashboard_tls_mode', _('Dashboard TLS mode'), _('Enable or disable TLS encryption for the dashboard. When enabled, HTTPS is used for secure communication.'), {datatype: 'bool'}],
+       [form.Value, 'dashboard_tls_cert_file', _('Dashboard TLS certificate'), _('Dashboard TLS Cert File specifies the path to the TLS certificate file for enabling HTTPS access.<br />Required if HTTPS is enabled.'), {datatype: 'filepath'}],
+    [form.Value, 'dashboard_tls_key_file', _('Dashboard TLS private key'), _('Dashboard TLS Key File specifies the path to the TLS private key file for enabling HTTPS access.<br />Required if HTTPS is enabled.'), {datatype: 'filepath'}],
        [form.Value, 'assets_dir', _('Assets dir'), _('AssetsDir specifies the local directory that the dashboard will load resources from. If this value is "", assets will be loaded from the bundled executable using statik.<br />By default, this value is "".')],
        [form.Value, 'log_file', _('Log file'), _('LogFile specifies a file where logs will be written to. This value will only be used if LogWay is set appropriately.<br />By default, this value is "console".')],
        [form.ListValue, 'log_level', _('Log level'), _('LogLevel specifies the minimum log level. Valid values are "trace", "debug", "info", "warn", and "error".<br />By default, this value is "info".'), {values: ['trace', 'debug', 'info', 'warn', 'error']}],
index 9c493cf4b5469a9839fb5c3bb036b746075adcae..a1e23ca973d4a8ecf4014e458f2f5ceaa7978db7 100644 (file)
@@ -67,6 +67,15 @@ msgstr ""
 "BindKcpPort 指定服务器侦听的 KCP 端口。如果此值为 0,则服务器将不会侦听 KCP "
 "连接。<br />默认值为 0。"
 
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:23
+msgid ""
+"BindQuicPort specifies the QUIC port that the server listens on. If this value "
+"is 0, the server will not listen for QUIC connections.<br />By default, this "
+"value is 0."
+msgstr ""
+"BindQuicPort 指定服务器侦听的 QUIC 端口。如果此值为 0,则服务器将不会侦听 QUIC "
+"连接。<br />默认值为 0。"
+
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:20
 msgid ""
 "BindPort specifies the port that the server listens on.<br />By default, "
@@ -77,10 +86,10 @@ msgstr "BindPort 指定服务器侦听的端口。<br />默认值为 7000。"
 msgid ""
 "BindUdpPort specifies the UDP port that the server listens on. If this value "
 "is 0, the server will not listen for UDP connections.<br />By default, this "
-"value is 0"
+"value is 0."
 msgstr ""
 "BindUdpPort 指定服务器侦听的 UDP 端口。如果此值为 0,则服务器将不会侦听 UDP "
-"连接。<br />默认值为 0"
+"连接。<br />默认值为 0"
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:143
 msgid "Collecting data ..."
@@ -187,6 +196,10 @@ msgstr "心跳包超时"
 msgid "KCP bind port"
 msgstr "KCP 绑定端口"
 
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:23
+msgid "QUIC bind port"
+msgstr "QUIC 绑定端口"
+
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:32
 msgid "Log file"
 msgstr "日志文件"
@@ -345,7 +358,7 @@ msgstr "UDP 绑定端口"
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:24
 msgid "Vhost HTTP port"
-msgstr "Vhost HTTP端口"
+msgstr "Vhost HTTP 端口"
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:26
 msgid "Vhost HTTP timeout"
@@ -379,7 +392,44 @@ msgid ""
 "<br />By default, this value is 0."
 msgstr ""
 "VhostHttpsPort指定服务器侦听HTTPS Vhost请求的端口。如果该值为0,服务器将不侦"
-"听HTTPS请求。.<br />该值默认为 0。"
+"听HTTPS请求。<br />该值默认为 0。"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:32
+msgid "Dashboard TLS mode"
+msgstr "仪表板 TLS 模式"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:33
+msgid "Dashboard TLS certificate"
+msgstr "​仪表板 TLS 证书​"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:34
+msgid "Dashboard TLS private key"
+msgstr "仪表板 TLS 私钥​"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:32
+msgid ""
+"Enable or disable TLS encryption for the dashboard. When enabled, HTTPS "
+"is used for secure communication."
+msgstr ""
+"启用或禁用仪表板的 TLS 加密功能。启用后,仪表板将通过 HTTPS 协议进行安全通信。​"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:33
+msgid ""
+"Dashboard TLS Cert File specifies the path to the TLS certificate file for "
+"enabling HTTPS access."
+"<br />Required if HTTPS is enabled."
+msgstr ""
+"Dashboard TLS Cert File 用于指定启用 HTTPS 访问所需的 TLS 证书文件路径,若启"
+"用 HTTPS 则必须配置此文件。"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:34
+msgid ""
+"Dashboard TLS Key File specifies the path to the TLS private key file for "
+"enabling HTTPS access."
+"<br />Required if HTTPS is enabled."
+msgstr ""
+"Dashboard TLS Key File 用于指定启用 HTTPS 访问所需的 TLS 私钥文件路径,若启"
+"用 HTTPS 则必须配置此文件。"
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:116
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:118
index 77cab8df91435b98ea0def6b152dc12551da3971..0d63191a41903cd0bcc0ae8143c45d4d8b3b0d89 100644 (file)
@@ -64,7 +64,16 @@ msgid ""
 "is 0, the server will not listen for KCP connections.<br />By default, this "
 "value is 0."
 msgstr ""
-"indKcpPort指定伺服器監聽的KCP埠號. 如果此值為0, 則伺服器將不會監聽KCP連線。"
+"BindKcpPort指定伺服器監聽的KCP埠號. 如果此值為0, 則伺服器將不會監聽KCP連線。"
+"<br />預設情況下, 此值為0."
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:23
+msgid ""
+"BindQuicPort specifies the QUIC port that the server listens on. If this value "
+"is 0, the server will not listen for QUIC connections.<br />By default, this "
+"value is 0."
+msgstr ""
+"BindQuicPort指定伺服器監聽的QUIC埠號. 如果此值為0, 則伺服器將不會監聽QUIC連線。"
 "<br />預設情況下, 此值為0."
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:20
@@ -77,9 +86,9 @@ msgstr "BindPort指定伺服器監聽的埠號. <br />預設情況下, 此值為
 msgid ""
 "BindUdpPort specifies the UDP port that the server listens on. If this value "
 "is 0, the server will not listen for UDP connections.<br />By default, this "
-"value is 0"
+"value is 0."
 msgstr "BindUdpPort指定伺服器監聽的UDP連接埠。如果此值為0,伺服器將不會監聽UDP連線。 "
-"<br />預設值為0"
+"<br />預設值為0."
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:143
 msgid "Collecting data ..."
@@ -186,7 +195,11 @@ msgstr "心跳逾時"
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:22
 msgid "KCP bind port"
-msgstr "KCP榜定埠號"
+msgstr "KCP綁定埠號"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:23
+msgid "QUIC bind port"
+msgstr "QUIC綁定埠號"
 
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:32
 msgid "Log file"
@@ -382,6 +395,43 @@ msgstr ""
 "VhostHttpsPort指定伺服器監聽虛擬主機HTTPS請求的埠號, 如果此值為0, 則伺服器將"
 "不監聽HTTPS請求. <br />預設情況下, 此值為0."
 
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:32
+msgid "Dashboard TLS mode"
+msgstr "​​儀表板TLS模式​​"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:33
+msgid "Dashboard TLS certificate"
+msgstr "​​儀表板TLS證書​​"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:34
+msgid "Dashboard TLS private key"
+msgstr "儀表板TLS私鑰​​"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:32
+msgid ""
+"Enable or disable TLS encryption for the dashboard. When enabled, HTTPS "
+"is used for secure communication."
+msgstr ""
+"​​啟用或停用儀表板的 TLS 加密功能。啟用後,儀表板將透過 HTTPS 協定進行安全通訊。​"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:33
+msgid ""
+"Dashboard TLS Cert File specifies the path to the TLS certificate file for "
+"enabling HTTPS access."
+"<br />Required if HTTPS is enabled."
+msgstr ""
+"Dashboard TLS Cert File 用於指定啟用 HTTPS 存取所需的 TLS 憑證文件路徑,若啟"
+"用 HTTPS 則必須配置此文件。"
+
+#: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:34
+msgid ""
+"Dashboard TLS Key File specifies the path to the TLS private key file for "
+"enabling HTTPS access."
+"<br />Required if HTTPS is enabled."
+msgstr ""
+"​​Dashboard TLS Key File 用於指定啟用 HTTPS 存取所需的 TLS 私鑰文件路徑,若啟​"
+"用 HTTPS 則必須配置此文件。"
+
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:116
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:118
 #: applications/luci-app-frps/htdocs/luci-static/resources/view/frps.js:128