diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/default.yaml b/package/ctcgfw/luci-app-openclash/files/etc/openclash/default.yaml index ac099d80ae..cd3d32aa3e 100644 --- a/package/ctcgfw/luci-app-openclash/files/etc/openclash/default.yaml +++ b/package/ctcgfw/luci-app-openclash/files/etc/openclash/default.yaml @@ -169,6 +169,19 @@ Proxy: # 节点设置,此部分与proxy-provider两者不能同时删除 # mode: http # or tls # host: bing.com +# trojan +- name: "trojan" + type: trojan + server: server + port: 443 + password: yourpsk + # udp: true + # sni: example.com # aka server name + # alpn: + # - h2 + # - http/1.1 + # skip-cert-verify: true + # Openclash 不会对下方策略组设置进行任何更改,请确保设置正确 Proxy Group: # 此参数必须保留,不能删除 diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua index 190d8cf5e5..086732938f 100644 --- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua +++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua @@ -80,6 +80,7 @@ end o = s:option(ListValue, "type", translate("Server Node Type")) o:value("ss", translate("Shadowsocks")) o:value("vmess", translate("Vmess")) +o:value("trojan", translate("trojan")) o:value("snell", translate("Snell")) o:value("socks5", translate("Socks5")) o:value("http", translate("HTTP(S)")) @@ -100,6 +101,7 @@ o = s:option(Value, "password", translate("Password")) o.password = true o.rmempty = false o:depends("type", "ss") +o:depends("type", "trojan") o = s:option(Value, "psk", translate("Psk")) o.rmempty = false @@ -121,6 +123,9 @@ o.default = "false" o:value("true") o:value("false") o:depends("type", "ss") +o:depends("type", "vmess") +o:depends("type", "socks5") +o:depends("type", "trojan") o = s:option(ListValue, "obfs", translate("obfs-mode")) o.rmempty = true @@ -201,6 +206,20 @@ o:value("true") o:value("false") o:depends("obfs", "websocket") +-- [[ sni ]]-- +o = s:option(Value, "sni", translate("sni")) +o.datatype = "host" +o.placeholder = translate("example.com") +o.rmempty = true +o:depends("type", "trojan") + +-- [[ alpn ]]-- +o = s:option(DynamicList, "alpn", translate("alpn")) +o.rmempty = true +o:value("h2") +o:value("http/1.1") +o:depends("type", "trojan") + -- [[ skip-cert-verify ]]-- o = s:option(ListValue, "skip_cert_verify", translate("Skip-Cert-Verify")) o.rmempty = true @@ -212,6 +231,7 @@ o:depends("obfs_vmess", "none") o:depends("obfs_vmess", "websocket") o:depends("type", "socks5") o:depends("type", "http") +o:depends("type", "trojan") -- [[ TLS ]]-- o = s:option(ListValue, "tls", translate("TLS")) diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_get.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_get.sh index fef001d72d..8df2bd51a7 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_get.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_get.sh @@ -66,8 +66,8 @@ servers_if_update=$(uci get openclash.config.servers_if_update 2>/dev/null) new_servers_group=$(uci get openclash.config.new_servers_group 2>/dev/null) #proxy -line=$(sed -n '/^ \{0,\}-/=' $server_file 2>/dev/null) -num=$(grep -c "^ \{0,\}-" $server_file 2>/dev/null) +line=$(sed -n '/^ \{0,\}- name:/=' $server_file 2>/dev/null) +num=$(grep -c "^ \{0,\}- name:" $server_file 2>/dev/null) count=1 #provider @@ -83,6 +83,11 @@ cfg_get() echo "$(grep "$1" "$2" 2>/dev/null |awk -v tag=$1 'BEGIN{FS=tag} {print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/\}.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null)" } +cfg_get_alpn() +{ + echo "$(grep "$1" "$2" 2>/dev/null |grep -v "^ \{0,\}- name:" |awk -v tag=$1 'BEGIN{FS=tag} {print $2}' 2>/dev/null |sed 's/,.*//' 2>/dev/null |sed 's/\}.*//' 2>/dev/null |sed 's/^ \{0,\}//g' 2>/dev/null |sed 's/ \{0,\}$//g' 2>/dev/null)" +} + echo "开始更新【$CONFIG_NAME】的代理集配置..." >$START_LOG [ "$servers_update" -eq "1" ] && { @@ -474,10 +479,14 @@ do uuid="$(cfg_get "uuid:" "$single_server")" #alterId: alterId="$(cfg_get "alterId:" "$single_server")" - #network + #network: network="$(cfg_get "network:" "$single_server")" - #username + #username: username="$(cfg_get "username:" "$single_server")" + #sni: + sni="$(cfg_get "sni:" "$single_server")" + #alpn: + alpns="$(cfg_get_alpn "-" "$single_server")" echo "正在读取【$CONFIG_NAME】-【$server_type】-【$server_name】服务器节点配置..." >$START_LOG @@ -525,6 +534,14 @@ do else ${uci_set}password="$password" fi + + if [ "$server_type" = "trojan" ]; then + #trojan + ${uci_set}sni="$sni" + for alpn in $alpns; do + ${uci_add}alpn="$alpn" >/dev/null 2>&1 + done + fi else #添加新节点 name=openclash @@ -584,6 +601,14 @@ do else ${uci_set}password="$password" fi + + if [ "$server_type" = "trojan" ]; then + #trojan + ${uci_set}sni="$sni" + for alpn in $alpns; do + ${uci_add}alpn="$alpn" >/dev/null 2>&1 + done + fi #加入策略组 if [ "$servers_if_update" = "1" ] && [ ! -z "$new_servers_group" ] && [ ! -z "$(grep "config groups" "$CFG_FILE")" ]; then diff --git a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh index 402c06334d..82bbf64da7 100755 --- a/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh +++ b/package/ctcgfw/luci-app-openclash/files/usr/share/openclash/yml_proxys_set.sh @@ -97,6 +97,16 @@ EOF } +set_alpn() +{ + if [ -z "$1" ]; then + return + fi +cat >> "$SERVER_FILE" <<-EOF + - "$1" +EOF +} + #写入服务器节点到配置文件 yml_servers_set() { @@ -126,6 +136,8 @@ yml_servers_set() config_get "auth_pass" "$section" "auth_pass" "" config_get "psk" "$section" "psk" "" config_get "obfs_snell" "$section" "obfs_snell" "" + config_get "sni" "$section" "sni" "" + config_get "alpn" "$section" "alpn" "" if [ ! -z "$if_game_proxy" ] && [ "$if_game_proxy" != "$name" ] && [ "$if_game_proxy_type" = "proxy" ]; then return @@ -155,8 +167,10 @@ yml_servers_set() return fi - if [ -z "$password" ] && [ "$type" = "ss" ]; then - return + if [ -z "$password" ]; then + if [ "$type" = "ss" ] || [ "$type" = "trojan" ]; then + return + fi fi echo "正在写入【$type】-【$name】节点到配置文件【$CONFIG_NAME】..." >$START_LOG @@ -271,6 +285,37 @@ EOF echo "- { name: \"$name\", type: $type, server: $server, port: $port, username: $auth_name, password: $auth_pass$skip_cert_verify$tls }" >>$SERVER_FILE fi + if [ "$type" = "trojan" ]; then +cat >> "$SERVER_FILE" <<-EOF +- name: "$name" + type: $type + server: $server + port: $port + password: "$password" +EOF + if [ ! -z "$udp" ]; then +cat >> "$SERVER_FILE" <<-EOF + udp: $udp +EOF + fi + if [ ! -z "$sni" ]; then +cat >> "$SERVER_FILE" <<-EOF + sni: $sni +EOF + fi + if [ ! -z "$alpn" ]; then +cat >> "$SERVER_FILE" <<-EOF + alpn: +EOF + config_list_foreach "$section" "alpn" set_alpn + fi + if [ ! -z "$skip_cert_verify" ]; then +cat >> "$SERVER_FILE" <<-EOF + $skip_cert_verify +EOF + fi + fi + if [ "$type" = "snell" ]; then cat >> "$SERVER_FILE" <<-EOF - name: "$name" diff --git a/package/ctcgfw/luci-app-openclash/i18n/zh_Hans/openclash.zh-cn.po b/package/ctcgfw/luci-app-openclash/i18n/zh_Hans/openclash.zh-cn.po index 59eed88e40..f7a421e406 100644 --- a/package/ctcgfw/luci-app-openclash/i18n/zh_Hans/openclash.zh-cn.po +++ b/package/ctcgfw/luci-app-openclash/i18n/zh_Hans/openclash.zh-cn.po @@ -6,7 +6,7 @@ msgid "OpenClash" msgstr "OpenClash" msgid "A Clash Client For OpenWrt" -msgstr "一个运行在OpenWrt上的Clash客户端,兼容Shadowsocks、Vmess、Snell等协议,根据灵活的规则配置实现策略代理" +msgstr "一个运行在OpenWrt上的Clash客户端,兼容Shadowsocks、Vmess、trojan、Snell等协议,根据灵活的规则配置实现策略代理" msgid "Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)" msgstr "全局设置(将按照本页设置自动修改配置文件和获取订阅)"