未验证 提交 288a31b2 编写于 作者: C coolsnowwolf 提交者: GitHub

Merge pull request #1218 from AmberisMyShiba/tuic-features

TUIC features
......@@ -10,6 +10,7 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Xray \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Tuic-Client \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy \
......@@ -26,7 +27,7 @@ PKG_CONFIG_DEPENDS:= \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Libev_Server \
CONFIG_PACKAGE_$(PKG_NAME)_INCLUDE_Trojan
LUCI_TITLE:=SS/SSR/V2Ray/Trojan/NaiveProxy/Socks5/Tun LuCI interface
LUCI_TITLE:=SS/SSR/V2Ray/Trojan/NaiveProxy/TUIC/Hysteria/Socks5/Tun LuCI interface
LUCI_PKGARCH:=all
LUCI_DEPENDS:= \
@(PACKAGE_libustream-mbedtls||PACKAGE_libustream-openssl||PACKAGE_libustream-wolfssl) \
......@@ -39,6 +40,7 @@ LUCI_DEPENDS:= \
+PACKAGE_$(PKG_NAME)_INCLUDE_Xray:xray-core \
+PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG:chinadns-ng \
+PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria:hysteria \
+PACKAGE_$(PKG_NAME)_INCLUDE_TUIC-Client:tuic-client \
+PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks:ipt2socks \
+PACKAGE_$(PKG_NAME)_INCLUDE_Kcptun:kcptun-client \
+PACKAGE_$(PKG_NAME)_INCLUDE_NaiveProxy:naiveproxy \
......@@ -114,6 +116,15 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG
config PACKAGE_$(PKG_NAME)_INCLUDE_Hysteria
bool "Include Hysteria"
select PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG
default n
config PACKAGE_$(PKG_NAME)_INCLUDE_TUIC-Client
bool "Include tuic-client"
select PACKAGE_$(PKG_NAME)_INCLUDE_ChinaDNS_NG
select PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks
depends on aarch64||i686||x86_64
depends on !(TARGET_x86_geode||TARGET_x86_legacy)
default n
config PACKAGE_$(PKG_NAME)_INCLUDE_IPT2Socks
......
......@@ -225,7 +225,6 @@ o:depends({type = "v2ray", v2ray_protocol = "socks"})
o = s:option(Value, "username", translate("Username"))
o.rmempty = true
o:depends("type", "naiveproxy")
--o:depends("type", "tuic")
o:depends({type = "socks5", auth_enable = true})
o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true})
o:depends({type = "v2ray", v2ray_protocol = "socks", auth_enable = true})
......@@ -237,7 +236,6 @@ o:depends("type", "ssr")
o:depends("type", "ss")
o:depends("type", "trojan")
o:depends("type", "naiveproxy")
o:depends("type", "tuic")
o:depends({type = "socks5", auth_enable = true})
o:depends({type = "v2ray", v2ray_protocol = "http", auth_enable = true})
o:depends({type = "v2ray", v2ray_protocol = "socks", socks_ver = "5", auth_enable = true})
......@@ -351,15 +349,29 @@ o.default = "0"
-- [[ TUIC ]]
-- TuicNameId
o = s:option(Value, "tuic_uuid", translate("TUIC user UUID"))
o = s:option(Value, "tuic_uuid", translate("TUIC User UUID"))
o.rmempty = true
o.default = uuid
o:depends("type", "tuic")
--Tuic IP
o = s:option(Value, "tuic_ip", translate("TUIC Server IP Address"))
o.rmempty = true
o.datatype = "ip4addr"
o.default = ""
o:depends("type", "tuic")
-- Tuic Password
o = s:option(Value, "tuic_passwd", translate("TUIC User Password"))
o.rmempty = true
o.default = ""
o:depends("type", "tuic")
o = s:option(ListValue, "udp_relay_mode", translate("UDP relay mode"))
o:depends("type", "tuic")
o:value("native", translate("native"))
o:value("quic", translate("QUIC"))
o:value("native", translate("native UDP characteristics")
o:value("quic", translate("lossless UDP relay using QUIC streams")
o.default = "native"
o.rmempty = true
......@@ -371,34 +383,64 @@ o:value("new_reno", translate("New Reno"))
o.default = "cubic"
o.rmempty = true
o = s:option(Value, "heartbeat", translate("Heartbeat interval"))
o = s:option(Value, "heartbeat", translate("Heartbeat interval(second)"))
o:depends("type", "tuic")
--o.datatype = "uinteger"
o.default = "3s"
o.datatype = "uinteger"
o.default = "3"
o.rmempty = true
o = s:option(Flag, "disable_sni", translate("Disable SNI"))
o = s:option(Value, "timeout", translate("Timeout for establishing a connection to server(second)"))
o:depends("type", "tuic")
o.default = 0
o.datatype = "uinteger"
o.default = "8"
o.rmempty = true
o = s:option(Flag, "zero_rtt_handshake", translate("Enable 0-RTT QUIC handshake"))
o = s:option(Value, "gc_interval", translate("Garbage collection interval(second)"))
o:depends("type", "tuic")
o.default = 0
o.rmempty = false
o.datatype = "uinteger"
o.default = "3"
o.rmempty = true
o = s:option(Value, "send_window", translate("TUIC send window"))
o = s:option(Value, "gc_lifetime", translate("Garbage collection lifetime(second)"))
o:depends("type", "tuic")
o.datatype = "uinteger"
o.default = "15"
o.rmempty = true
o = s:option(Value, "send_window", translate("TUIC send window"))
o:depends("type", "tuic")
o.datatype = "uinteger"
o.default = 16777216
o.rmempty = true
o = s:option(Value, "receive_window", translate("TUIC receive window"))
o.datatype = "uinteger"
o:depends("type", "tuic")
o.datatype = "uinteger"
o.default = 8388608
o.rmempty = true
o = s:option(Flag, "disable_sni", translate("Disable SNI"))
o:depends("type", "tuic")
o.default = 0
o.rmempty = true
o = s:option(Flag, "zero_rtt_handshake", translate("Enable 0-RTT QUIC handshake"))
o:depends("type", "tuic")
o.default = 0
o.rmempty = true
--Tuic settings for the local inbound socks5 server
o = s:option(Flag, "tuic_dual_stack", translate("Set if the listening socket should be dual-stack"))
o:depends("type", "tuic")
o.default = 0
o.rmempty = true
o = s:option(Value, "tuic_max_package_size", translate("Maximum packet size the socks5 server can receive from external"))
o:depends("type", "tuic")
o.datatype = "uinteger"
o.default = 1500
o.rmempty = true
-- VmessId
o = s:option(Value, "vmess_id", translate("Vmess/VLESS ID (UUID)"))
o.rmempty = true
......@@ -848,4 +890,4 @@ if is_finded("kcptun-client") then
o:depends("type", "ss")
end
return m
return m
\ No newline at end of file
......@@ -853,17 +853,38 @@ msgstr "应用"
msgid "Enable Netflix Mode"
msgstr "启用 Netflix 分流模式"
msgid "TUIC user UUID"
msgid "TUIC User UUID"
msgstr "TUIC用户uuid"
msgid "TUIC Server IP Address"
msgstr "TUIC 服务器IP地址"
msgid "TUIC User Password"
msgstr "TUIC用户密钥"
msgid "UDP relay mode"
msgstr "tuic UDP中继模式"
msgstr "UDP中继模式"
msgid "native UDP characteristics"
msgstr "原生UDP特性"
msgid "lossless UDP relay using QUIC streams"
msgstr "使用 QUIC 流的无损 UDP 中继"
msgid "Congestion control algorithm"
msgstr "拥塞控制算法"
msgid "Heartbeat interval"
msgstr "连接保活间隔"
msgid "Heartbeat interval(second)"
msgstr "保活心跳包发送间隔(单位:秒)"
msgid "Timeout for establishing a connection to server(second)"
msgstr "连接超时时间(单位:秒)"
msgid "Garbage collection interval(second)"
msgstr "UDP数据包片残片清理间隔(单位:秒)"
msgid "Garbage collection lifetime(second)"
msgstr "UDP数据包残片在服务器的保留时间(单位:秒)"
msgid "Disable SNI"
msgstr "关闭SNI服务器名称指示"
......@@ -872,8 +893,13 @@ msgid "Enable 0-RTT QUIC handshake"
msgstr "客户端启用 0-RTT QUIC 连接握手"
msgid "TUIC send window"
msgstr "发送窗口(无需确认即可发送的最大字节数)"
msgstr "发送窗口(无需确认即可发送的最大字节数:默认8Mb*2)"
msgid "TUIC receive window"
msgstr "接收窗口(无需确认即可接收的最大字节数)"
msgstr "接收窗口(无需确认即可接收的最大字节数:默认8Mb)"
msgid "Set if the listening socket should be dual-stack"
msgstr "设置监听套接字为双栈"
msgid "Maximum packet size the socks5 server can receive from external"
msgstr "socks5服务器可以从外部接收的最大数据包大小(单位:字节)"
......@@ -306,23 +306,29 @@ local hysteria = {
lazy_start = (server.lazy_start == "1") and true or false
}
local tuic = {
relay = {
server = server.server .. ":" .. server.server_port,
uuid = server.tuic_uuid,
password = server.password,
certificates = server.certificate and { server.certpath } or nil,
udp_relay_mode = server.udp_relay_mode,
congestion_control = server.congestion_control,
heartbeat = server.heartbeat_interval,
alpn = server.tls_alpn,
disable_sni = (server.disable_sni == "1"),
zero_rtt_handshake = (server.zero_rtt_handshake == "1"),
send_window = tonumber(server.send_window),
receive_window = tonumber(server.receive_window)
},
["local"] = {
server = "0.0.0.0:" .. tonumber(local_port)
}
relay = {
server = server.server .. ":" .. server.server_port,
ip = server.tuic_ip,
uuid = server.tuic_uuid,
password = server.tuic_passwd,
certificates = server.certificate and { server.certpath } or nil,
udp_relay_mode = server.udp_relay_mode,
congestion_control = server.congestion_control,
heartbeat = server.heartbeat .. "s",
timeout = server.timeout .. "s",
gc_interval = server.gc_interval .. "s",
gc_lifetime = server.gc_lifetime .. "s",
alpn = server.tls_alpn,
disable_sni = (server.disable_sni == "1"),
zero_rtt_handshake = (server.zero_rtt_handshake == "1"),
send_window = tonumber(server.send_window),
receive_window = tonumber(server.receive_window)
},
["local"] = {
server = "[::]:" .. tonumber(local_port),
dual_stack = dual_stack = (server.tuic_dual_stack == "1") and true or false,
max_packet_size = server.tuic_max_package_size
}
}
local config = {}
function config:new(o)
......
# SPDX-License-Identifier: GPL-2.0-only
#
# Copyright (C) 2017-2020 Yousong Zhou <yszhou4tech@gmail.com>
# Copyright (C) 2021 ImmortalWrt.org
include $(TOPDIR)/rules.mk
PKG_NAME:=tuic-client
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
include $(INCLUDE_DIR)/package.mk
TUIC_TYPE:=tuic-client-$(PKG_VERSION)
TUIC_FOOT:=unknown-linux-musl
ifeq ($(ARCH),aarch64)
TUIC_ARCH:=$(TUIC_TYPE)-aarch64-$(TUIC_FOOT)
PKG_HASH:=c29eaaf3bc05115acc7453ac26bacf9aff65211b1e8ca7f771b818248bec8601
else ifeq ($ARCH),arm64)
ARM_CPU_FEATURES:=$(word 2,$(subst +,$(space),$(call qstrip,$(CONFIG_CPU_TYPE))))
ifeq ($(ARM_CPU_FEATURES),)
TUIC_ARCH:=$(TUIC_TYPE)-armv7-$(TUIC_FOOT)eabi
PKG_HASH:=33a83ab05dc1a598552bf1f27114502b12c94b6e5333c6ac2def3739c00a4daf
else
TUIC_ARCH:=$(TUIC_TYPE)-armv7-$(TUIC_FOOT)eabihf
PKG_HASH:=e2cc1d81ac376ff2a94976e78c861f5cd21ad809ff5b587ae967e2a63e4c35e4
endif
else ifeq ($(ARCH),i686)
TUIC_ARCH:=$(TUIC_TYPE)-i686-$(TUIC_FOOT)
PKG_HASH:=67d930b4381a8848bf98acbccb538c73b72ca9dde0aed3705f73e62a9922f758
else ifeq ($(ARCH),x86_64)
TUIC_ARCH:=$(TUIC_TYPE)-x86_64-$(TUIC_FOOT)
PKG_HASH:=180c562691247a7feddf553706bc8fd5b5b9de3027154f94a767ea907a45e2de
endif
define Download/tuic-client
URL:=https://github.com/EAimTY/tuic/releases/download/$(TUIC_TYPE)/
URL_FILE:=$(TUIC_ARCH)
FILE:=$(TUIC_ARCH)
HASH:=$(PKG_HASH)
endef
define Package/tuic-client
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=Delicately-TUICed 0-RTT proxy protocol
URL:=https://github.com/EAimTY/tuic/
DEPENDS:=@USE_MUSL @(aarch64||arm64||i686||x86_64) @!(TARGET_x86_geode||TARGET_x86_legacy)
#PKGARCH:=all aarch64 arm i686 x86_64
endef
define Build/Prepare
$(call Build/Prepare/Default)
ifneq ($(CONFIG_PACKAGE_tuic-client),)
$(call Download,tuic-client)
endif
endef
define Build/Compile
endef
define Package/tuic-client/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(DL_DIR)/$(TUIC_ARCH) $(1)/usr/bin/tuic-client
chmod +x $(1)/usr/bin/tuic-client
endef
$(eval $(call BuildPackage,tuic-client))
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册