domain_strategy is merged to domain_resolver in sing-box 1.12.0; Clash support TCP Brutal.

This commit is contained in:
fscarmen
2025-03-25 12:52:30 +00:00
parent d6ab0a626d
commit bd3e1777b7
2 changed files with 51 additions and 59 deletions
+26 -30
View File
@@ -11,8 +11,7 @@ info() { echo -e "\033[32m\033[01m$*\033[0m"; } # 绿色
hint() { echo -e "\033[33m\033[01m$*\033[0m"; } # 黄色 hint() { echo -e "\033[33m\033[01m$*\033[0m"; } # 黄色
# 判断系统架构,以下载相应的应用 # 判断系统架构,以下载相应的应用
check_arch() { case "$ARCH" in
case "$ARCH" in
arm64 ) arm64 )
SING_BOX_ARCH=arm64; JQ_ARCH=arm64; QRENCODE_ARCH=arm64; ARGO_ARCH=arm64 SING_BOX_ARCH=arm64; JQ_ARCH=arm64; QRENCODE_ARCH=arm64; ARGO_ARCH=arm64
;; ;;
@@ -23,8 +22,7 @@ check_arch() {
armv7 ) armv7 )
SING_BOX_ARCH=armv7; JQ_ARCH=armhf; QRENCODE_ARCH=arm; ARGO_ARCH=arm SING_BOX_ARCH=armv7; JQ_ARCH=armhf; QRENCODE_ARCH=arm; ARGO_ARCH=arm
;; ;;
esac esac
}
# 检查 sing-box 最新版本 # 检查 sing-box 最新版本
check_latest_sing-box() { check_latest_sing-box() {
@@ -60,11 +58,15 @@ install() {
echo "正在下载 cloudflared ..." echo "正在下载 cloudflared ..."
wget -O ${WORK_DIR}/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-$ARGO_ARCH && chmod +x ${WORK_DIR}/cloudflared wget -O ${WORK_DIR}/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-$ARGO_ARCH && chmod +x ${WORK_DIR}/cloudflared
# 检查系统是否已经安装 tcp-brutal
IS_BRUTAL=false && [ -x "$(type -p lsmod)" ] && lsmod | grep -q brutal && IS_BRUTAL=true
[ "$IS_BRUTAL" = 'false' ] && [ -x "$(type -p modprobe)" ] && modprobe brutal 2>/dev/null && IS_BRUTAL=true
# 生成 sing-box 配置文件 # 生成 sing-box 配置文件
if [[ "$SERVER_IP" =~ : ]]; then if [[ "$SERVER_IP" =~ : ]]; then
local DOMAIN_STRATEG=prefer_ipv6 local STRATEGY=prefer_ipv6
else else
local DOMAIN_STRATEG=prefer_ipv4 local STRATEGY=prefer_ipv4
fi fi
local REALITY_KEYPAIR=$(${WORK_DIR}/sing-box generate reality-keypair) && REALITY_PRIVATE=$(awk '/PrivateKey/{print $NF}' <<< "$REALITY_KEYPAIR") && REALITY_PUBLIC=$(awk '/PublicKey/{print $NF}' <<< "$REALITY_KEYPAIR") local REALITY_KEYPAIR=$(${WORK_DIR}/sing-box generate reality-keypair) && REALITY_PRIVATE=$(awk '/PrivateKey/{print $NF}' <<< "$REALITY_KEYPAIR") && REALITY_PUBLIC=$(awk '/PublicKey/{print $NF}' <<< "$REALITY_KEYPAIR")
@@ -110,8 +112,7 @@ EOF
"outbounds":[ "outbounds":[
{ {
"type":"direct", "type":"direct",
"tag":"direct", "tag":"direct"
"domain_strategy":"$DOMAIN_STRATEG"
} }
] ]
} }
@@ -215,7 +216,8 @@ EOF
{ {
"type":"local" "type":"local"
} }
] ],
"strategy": "${STRATEGY}"
} }
} }
EOF EOF
@@ -267,7 +269,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -371,7 +373,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -396,7 +398,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -429,7 +431,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -467,7 +469,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -505,7 +507,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -552,7 +554,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -602,7 +604,7 @@ EOF
"enabled":true, "enabled":true,
"padding":true, "padding":true,
"brutal":{ "brutal":{
"enabled":true, "enabled":${IS_BRUTAL},
"up_mbps":1000, "up_mbps":1000,
"down_mbps":1000 "down_mbps":1000
} }
@@ -822,7 +824,7 @@ stdout_logfile=/dev/null
# 生成 Clash proxy providers 订阅文件 # 生成 Clash proxy providers 订阅文件
local CLASH_SUBSCRIBE='proxies:' local CLASH_SUBSCRIBE='proxies:'
[ "${XTLS_REALITY}" = 'true' ] && local CLASH_XTLS_REALITY="- {name: \"${NODE_NAME} xtls-reality\", type: vless, server: ${SERVER_IP}, port: ${PORT_XTLS_REALITY}, uuid: ${UUID}, network: tcp, udp: true, tls: true, servername: addons.mozilla.org, client-fingerprint: chrome, reality-opts: {public-key: ${REALITY_PUBLIC}, short-id: \"\"}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ "${XTLS_REALITY}" = 'true' ] && local CLASH_XTLS_REALITY="- {name: \"${NODE_NAME} xtls-reality\", type: vless, server: ${SERVER_IP}, port: ${PORT_XTLS_REALITY}, uuid: ${UUID}, network: tcp, udp: true, tls: true, servername: addons.mozilla.org, client-fingerprint: chrome, reality-opts: {public-key: ${REALITY_PUBLIC}, short-id: \"\"}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_XTLS_REALITY $CLASH_XTLS_REALITY
" "
@@ -834,30 +836,30 @@ stdout_logfile=/dev/null
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_TUIC $CLASH_TUIC
" "
[ "${SHADOWTLS}" = 'true' ] && local CLASH_SHADOWTLS="- {name: \"${NODE_NAME} ShadowTLS\", type: ss, server: ${SERVER_IP}, port: ${PORT_SHADOWTLS}, cipher: 2022-blake3-aes-128-gcm, password: ${SHADOWTLS_PASSWORD}, plugin: shadow-tls, client-fingerprint: chrome, plugin-opts: {host: addons.mozilla.org, password: \"${UUID}\", version: 3}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ "${SHADOWTLS}" = 'true' ] && local CLASH_SHADOWTLS="- {name: \"${NODE_NAME} ShadowTLS\", type: ss, server: ${SERVER_IP}, port: ${PORT_SHADOWTLS}, cipher: 2022-blake3-aes-128-gcm, password: ${SHADOWTLS_PASSWORD}, plugin: shadow-tls, client-fingerprint: chrome, plugin-opts: {host: addons.mozilla.org, password: \"${UUID}\", version: 3}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_SHADOWTLS $CLASH_SHADOWTLS
" "
[ "${SHADOWSOCKS}" = 'true' ] && local CLASH_SHADOWSOCKS="- {name: \"${NODE_NAME} shadowsocks\", type: ss, server: ${SERVER_IP}, port: $PORT_SHADOWSOCKS, cipher: aes-128-gcm, password: ${UUID}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ "${SHADOWSOCKS}" = 'true' ] && local CLASH_SHADOWSOCKS="- {name: \"${NODE_NAME} shadowsocks\", type: ss, server: ${SERVER_IP}, port: $PORT_SHADOWSOCKS, cipher: aes-128-gcm, password: ${UUID}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_SHADOWSOCKS $CLASH_SHADOWSOCKS
" "
[ "${TROJAN}" = 'true' ] && local CLASH_TROJAN="- {name: \"${NODE_NAME} trojan\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: ${UUID}, client-fingerprint: random, skip-cert-verify: true, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ "${TROJAN}" = 'true' ] && local CLASH_TROJAN="- {name: \"${NODE_NAME} trojan\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: ${UUID}, client-fingerprint: random, skip-cert-verify: true, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_TROJAN $CLASH_TROJAN
" "
[ "${VMESS_WS}" = 'true' ] && local CLASH_VMESS_WS="- {name: \"${NODE_NAME} vmess-ws\", type: vmess, server: ${CDN}, port: 80, uuid: ${UUID}, udp: true, tls: false, alterId: 0, cipher: auto, skip-cert-verify: true, network: ws, ws-opts: { path: \"/${UUID}-vmess\", headers: {Host: ${ARGO_DOMAIN}} }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ "${VMESS_WS}" = 'true' ] && local CLASH_VMESS_WS="- {name: \"${NODE_NAME} vmess-ws\", type: vmess, server: ${CDN}, port: 80, uuid: ${UUID}, udp: true, tls: false, alterId: 0, cipher: auto, skip-cert-verify: true, network: ws, ws-opts: { path: \"/${UUID}-vmess\", headers: {Host: ${ARGO_DOMAIN}} }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_VMESS_WS $CLASH_VMESS_WS
" "
[ "${VLESS_WS}" = 'true' ] && local CLASH_VLESS_WS="- {name: \"${NODE_NAME} vless-ws-tls\", type: vless, server: ${CDN}, port: 443, uuid: ${UUID}, udp: true, tls: true, servername: ${ARGO_DOMAIN}, network: ws, skip-cert-verify: true, ws-opts: { path: \"/${UUID}-vless\", headers: {Host: ${ARGO_DOMAIN}}, max-early-data: 2048, early-data-header-name: Sec-WebSocket-Protocol }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ "${VLESS_WS}" = 'true' ] && local CLASH_VLESS_WS="- {name: \"${NODE_NAME} vless-ws-tls\", type: vless, server: ${CDN}, port: 443, uuid: ${UUID}, udp: true, tls: true, servername: ${ARGO_DOMAIN}, network: ws, skip-cert-verify: true, ws-opts: { path: \"/${UUID}-vless\", headers: {Host: ${ARGO_DOMAIN}}, max-early-data: 2048, early-data-header-name: Sec-WebSocket-Protocol }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_VLESS_WS $CLASH_VLESS_WS
" "
# Clash 的 H2 传输层未实现多路复用功能,在 Clash.Meta 中更建议使用 gRPC 协议,故不输出相关配置。 https://wiki.metacubex.one/config/proxies/vless/ # Clash 的 H2 传输层未实现多路复用功能,在 Clash.Meta 中更建议使用 gRPC 协议,故不输出相关配置。 https://wiki.metacubex.one/config/proxies/vless/
[ "${H2_REALITY}" = 'true' ] [ "${H2_REALITY}" = 'true' ]
[ "${GRPC_REALITY}" = 'true' ] && local CLASH_GRPC_REALITY="- {name: \"${NODE_NAME} grpc-reality\", type: vless, server: ${SERVER_IP}, port: ${PORT_GRPC_REALITY}, uuid: ${UUID}, network: grpc, tls: true, udp: true, flow:, client-fingerprint: chrome, servername: addons.mozilla.org, grpc-opts: { grpc-service-name: \"grpc\" }, reality-opts: { public-key: ${REALITY_PUBLIC}, short-id: \"\" }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ "${GRPC_REALITY}" = 'true' ] && local CLASH_GRPC_REALITY="- {name: \"${NODE_NAME} grpc-reality\", type: vless, server: ${SERVER_IP}, port: ${PORT_GRPC_REALITY}, uuid: ${UUID}, network: grpc, tls: true, udp: true, flow:, client-fingerprint: chrome, servername: addons.mozilla.org, grpc-opts: { grpc-service-name: \"grpc\" }, reality-opts: { public-key: ${REALITY_PUBLIC}, short-id: \"\" }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_GRPC_REALITY $CLASH_GRPC_REALITY
" "
@@ -933,7 +935,6 @@ tuic://${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&congestion_control=bb
}, },
\"inbounds\":[ \"inbounds\":[
{ {
\"domain_strategy\":\"\",
\"listen\":\"127.0.0.1\", \"listen\":\"127.0.0.1\",
\"listen_port\":${PORT_SHADOWTLS}, \"listen_port\":${PORT_SHADOWTLS},
\"sniff\":true, \"sniff\":true,
@@ -945,7 +946,6 @@ tuic://${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&congestion_control=bb
\"outbounds\":[ \"outbounds\":[
{ {
\"detour\":\"shadowtls-out\", \"detour\":\"shadowtls-out\",
\"domain_strategy\":\"\",
\"method\":\"2022-blake3-aes-128-gcm\", \"method\":\"2022-blake3-aes-128-gcm\",
\"password\":\"${SHADOWTLS_PASSWORD}\", \"password\":\"${SHADOWTLS_PASSWORD}\",
\"type\":\"shadowsocks\", \"type\":\"shadowsocks\",
@@ -959,7 +959,6 @@ tuic://${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&congestion_control=bb
} }
}, },
{ {
\"domain_strategy\":\"\",
\"password\":\"${UUID}\", \"password\":\"${UUID}\",
\"server\":\"${SERVER_IP}\", \"server\":\"${SERVER_IP}\",
\"server_port\":${PORT_SHADOWTLS}, \"server_port\":${PORT_SHADOWTLS},
@@ -1015,7 +1014,6 @@ vless://${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?encryption=none&security=rea
}, },
\"inbounds\":[ \"inbounds\":[
{ {
\"domain_strategy\":\"\",
\"listen\":\"127.0.0.1\", \"listen\":\"127.0.0.1\",
\"listen_port\":${PORT_ANYTLS}, \"listen_port\":${PORT_ANYTLS},
\"sniff\":true, \"sniff\":true,
@@ -1286,8 +1284,6 @@ while getopts ":Vv" OPTNAME; do
done done
# 主流程 # 主流程
check_arch
case "$ACTION" in case "$ACTION" in
update ) update )
update_sing-box update_sing-box
+15 -19
View File
@@ -865,14 +865,14 @@ sing-box_variables() {
# 根据服务 IP,使用不同的 warp 配置 # 根据服务 IP,使用不同的 warp 配置
if [[ "$SERVER_IP" =~ : ]]; then if [[ "$SERVER_IP" =~ : ]]; then
DOMAIN_STRATEG=prefer_ipv6 STRATEGY=prefer_ipv6
else else
DOMAIN_STRATEG=prefer_ipv4 STRATEGY=prefer_ipv4
fi fi
# 检测是否解锁 chatGPT # 检测是否解锁 chatGPT
CHATGPT_OUT=warp-ep; CHATGPT_OUT=warp-ep;
[ "$(check_chatgpt ${DOMAIN_STRATEG: -1})" = 'unlock' ] && CHATGPT_OUT=direct [ "$(check_chatgpt ${STRATEGY: -1})" = 'unlock' ] && CHATGPT_OUT=direct
# 如选择有 c. hysteria2 时,选择是否使用端口跳跃 # 如选择有 c. hysteria2 时,选择是否使用端口跳跃
[[ "${INSTALL_PROTOCOLS[@]}" =~ 'c' ]] && input_hopping_port [[ "${INSTALL_PROTOCOLS[@]}" =~ 'c' ]] && input_hopping_port
@@ -1193,8 +1193,7 @@ EOF
"outbounds":[ "outbounds":[
{ {
"type":"direct", "type":"direct",
"tag":"direct", "tag":"direct"
"domain_strategy":"${DOMAIN_STRATEG}"
} }
] ]
} }
@@ -1298,7 +1297,8 @@ EOF
{ {
"type":"local" "type":"local"
} }
] ],
"strategy": "${STRATEGY}"
} }
} }
EOF EOF
@@ -1998,7 +1998,7 @@ export_list() {
# 生成 Clash proxy providers 订阅文件 # 生成 Clash proxy providers 订阅文件
local CLASH_SUBSCRIBE='proxies:' local CLASH_SUBSCRIBE='proxies:'
[ -n "$PORT_XTLS_REALITY" ] && local CLASH_XTLS_REALITY="- {name: \"${NODE_NAME[11]} ${NODE_TAG[0]}\", type: vless, server: ${SERVER_IP}, port: ${PORT_XTLS_REALITY}, uuid: ${UUID[11]}, network: tcp, udp: true, tls: true, servername: ${TLS_SERVER[11]}, client-fingerprint: chrome, reality-opts: {public-key: ${REALITY_PUBLIC[11]}, short-id: \"\"}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ -n "$PORT_XTLS_REALITY" ] && local CLASH_XTLS_REALITY="- {name: \"${NODE_NAME[11]} ${NODE_TAG[0]}\", type: vless, server: ${SERVER_IP}, port: ${PORT_XTLS_REALITY}, uuid: ${UUID[11]}, network: tcp, udp: true, tls: true, servername: ${TLS_SERVER[11]}, client-fingerprint: chrome, reality-opts: {public-key: ${REALITY_PUBLIC[11]}, short-id: \"\"}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_XTLS_REALITY $CLASH_XTLS_REALITY
" "
@@ -2014,22 +2014,22 @@ export_list() {
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_TUIC $CLASH_TUIC
" "
[ -n "$PORT_SHADOWTLS" ] && local CLASH_SHADOWTLS="- {name: \"${NODE_NAME[14]} ${NODE_TAG[3]}\", type: ss, server: ${SERVER_IP}, port: ${PORT_SHADOWTLS}, cipher: $SHADOWTLS_METHOD, password: $SHADOWTLS_PASSWORD, plugin: shadow-tls, client-fingerprint: chrome, plugin-opts: {host: ${TLS_SERVER[14]}, password: \"${UUID[14]}\", version: 3}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ -n "$PORT_SHADOWTLS" ] && local CLASH_SHADOWTLS="- {name: \"${NODE_NAME[14]} ${NODE_TAG[3]}\", type: ss, server: ${SERVER_IP}, port: ${PORT_SHADOWTLS}, cipher: $SHADOWTLS_METHOD, password: $SHADOWTLS_PASSWORD, plugin: shadow-tls, client-fingerprint: chrome, plugin-opts: {host: ${TLS_SERVER[14]}, password: \"${UUID[14]}\", version: 3}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_SHADOWTLS $CLASH_SHADOWTLS
" "
[ -n "$PORT_SHADOWSOCKS" ] && local CLASH_SHADOWSOCKS="- {name: \"${NODE_NAME[15]} ${NODE_TAG[4]}\", type: ss, server: ${SERVER_IP}, port: $PORT_SHADOWSOCKS, cipher: ${SHADOWSOCKS_METHOD}, password: ${UUID[15]}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ -n "$PORT_SHADOWSOCKS" ] && local CLASH_SHADOWSOCKS="- {name: \"${NODE_NAME[15]} ${NODE_TAG[4]}\", type: ss, server: ${SERVER_IP}, port: $PORT_SHADOWSOCKS, cipher: ${SHADOWSOCKS_METHOD}, password: ${UUID[15]}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_SHADOWSOCKS $CLASH_SHADOWSOCKS
" "
[ -n "$PORT_TROJAN" ] && local CLASH_TROJAN="- {name: \"${NODE_NAME[16]} ${NODE_TAG[5]}\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: $TROJAN_PASSWORD, client-fingerprint: random, skip-cert-verify: true, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ -n "$PORT_TROJAN" ] && local CLASH_TROJAN="- {name: \"${NODE_NAME[16]} ${NODE_TAG[5]}\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: $TROJAN_PASSWORD, client-fingerprint: random, skip-cert-verify: true, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_TROJAN $CLASH_TROJAN
" "
if [ -n "$PORT_VMESS_WS" ]; then if [ -n "$PORT_VMESS_WS" ]; then
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
local CLASH_VMESS_WS="- {name: \"${NODE_NAME[17]} ${NODE_TAG[6]}\", type: vmess, server: ${CDN[17]}, port: 80, uuid: ${UUID[17]}, udp: true, tls: false, alterId: 0, cipher: auto, skip-cert-verify: true, network: ws, ws-opts: { path: \"/$VMESS_WS_PATH\", headers: {Host: $ARGO_DOMAIN} }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && local CLASH_VMESS_WS="- {name: \"${NODE_NAME[17]} ${NODE_TAG[6]}\", type: vmess, server: ${CDN[17]}, port: 80, uuid: ${UUID[17]}, udp: true, tls: false, alterId: 0, cipher: auto, skip-cert-verify: true, network: ws, ws-opts: { path: \"/$VMESS_WS_PATH\", headers: {Host: $ARGO_DOMAIN} }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_VMESS_WS $CLASH_VMESS_WS
" "
@@ -2037,7 +2037,7 @@ export_list() {
# $(text 94) # $(text 94)
" "
else else
local CLASH_VMESS_WS="- {name: \"${NODE_NAME[17]} ${NODE_TAG[6]}\", type: vmess, server: ${CDN[17]}, port: 80, uuid: ${UUID[17]}, udp: true, tls: false, alterId: 0, cipher: auto, skip-cert-verify: true, network: ws, ws-opts: { path: \"/$VMESS_WS_PATH\", headers: {Host: $VMESS_HOST_DOMAIN} }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && local CLASH_VMESS_WS="- {name: \"${NODE_NAME[17]} ${NODE_TAG[6]}\", type: vmess, server: ${CDN[17]}, port: 80, uuid: ${UUID[17]}, udp: true, tls: false, alterId: 0, cipher: auto, skip-cert-verify: true, network: ws, ws-opts: { path: \"/$VMESS_WS_PATH\", headers: {Host: $VMESS_HOST_DOMAIN} }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local WS_SERVER_IP_SHOW=${WS_SERVER_IP[17]} && local TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN && local TYPE_PORT_WS=$PORT_VMESS_WS && local WS_SERVER_IP_SHOW=${WS_SERVER_IP[17]} && local TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN && local TYPE_PORT_WS=$PORT_VMESS_WS &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_VMESS_WS $CLASH_VMESS_WS
@@ -2049,7 +2049,7 @@ export_list() {
if [ -n "$PORT_VLESS_WS" ]; then if [ -n "$PORT_VLESS_WS" ]; then
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
local CLASH_VLESS_WS="- {name: \"${NODE_NAME[18]} ${NODE_TAG[7]}\", type: vless, server: ${CDN[18]}, port: 443, uuid: ${UUID[18]}, udp: true, tls: true, servername: $ARGO_DOMAIN, network: ws, skip-cert-verify: true, ws-opts: { path: \"/$VLESS_WS_PATH\", headers: {Host: $ARGO_DOMAIN}, max-early-data: 2048, early-data-header-name: Sec-WebSocket-Protocol }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && local CLASH_VLESS_WS="- {name: \"${NODE_NAME[18]} ${NODE_TAG[7]}\", type: vless, server: ${CDN[18]}, port: 443, uuid: ${UUID[18]}, udp: true, tls: true, servername: $ARGO_DOMAIN, network: ws, skip-cert-verify: true, ws-opts: { path: \"/$VLESS_WS_PATH\", headers: {Host: $ARGO_DOMAIN}, max-early-data: 2048, early-data-header-name: Sec-WebSocket-Protocol }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_VLESS_WS $CLASH_VLESS_WS
" "
@@ -2057,7 +2057,7 @@ export_list() {
# $(text 94) # $(text 94)
" "
else else
local CLASH_VLESS_WS="- {name: \"${NODE_NAME[18]} ${NODE_TAG[7]}\", type: vless, server: ${CDN[18]}, port: 443, uuid: ${UUID[18]}, udp: true, tls: true, servername: $VLESS_HOST_DOMAIN, network: ws, skip-cert-verify: true, ws-opts: { path: \"/$VLESS_WS_PATH\", headers: {Host: $VLESS_HOST_DOMAIN}, max-early-data: 2048, early-data-header-name: Sec-WebSocket-Protocol }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && local CLASH_VLESS_WS="- {name: \"${NODE_NAME[18]} ${NODE_TAG[7]}\", type: vless, server: ${CDN[18]}, port: 443, uuid: ${UUID[18]}, udp: true, tls: true, servername: $VLESS_HOST_DOMAIN, network: ws, skip-cert-verify: true, ws-opts: { path: \"/$VLESS_WS_PATH\", headers: {Host: $VLESS_HOST_DOMAIN}, max-early-data: 2048, early-data-header-name: Sec-WebSocket-Protocol }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local WS_SERVER_IP_SHOW=${WS_SERVER_IP[18]} && local TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN && local TYPE_PORT_WS=$PORT_VLESS_WS && local WS_SERVER_IP_SHOW=${WS_SERVER_IP[18]} && local TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN && local TYPE_PORT_WS=$PORT_VLESS_WS &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_VLESS_WS $CLASH_VLESS_WS
@@ -2070,7 +2070,7 @@ export_list() {
# Clash 的 H2 传输层未实现多路复用功能,在 Clash.Meta 中更建议使用 gRPC 协议,故不输出相关配置。 https://wiki.metacubex.one/config/proxies/vless/ # Clash 的 H2 传输层未实现多路复用功能,在 Clash.Meta 中更建议使用 gRPC 协议,故不输出相关配置。 https://wiki.metacubex.one/config/proxies/vless/
[ -n "$PORT_H2_REALITY" ] [ -n "$PORT_H2_REALITY" ]
[ -n "$PORT_GRPC_REALITY" ] && local CLASH_GRPC_REALITY="- {name: \"${NODE_NAME[20]} ${NODE_TAG[9]}\", type: vless, server: ${SERVER_IP}, port: ${PORT_GRPC_REALITY}, uuid: ${UUID[20]}, network: grpc, tls: true, udp: true, flow:, client-fingerprint: chrome, servername: ${TLS_SERVER[20]}, grpc-opts: { grpc-service-name: \"grpc\" }, reality-opts: { public-key: ${REALITY_PUBLIC[20]}, short-id: \"\" }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false } }" && [ -n "$PORT_GRPC_REALITY" ] && local CLASH_GRPC_REALITY="- {name: \"${NODE_NAME[20]} ${NODE_TAG[9]}\", type: vless, server: ${SERVER_IP}, port: ${PORT_GRPC_REALITY}, uuid: ${UUID[20]}, network: grpc, tls: true, udp: true, flow:, client-fingerprint: chrome, servername: ${TLS_SERVER[20]}, grpc-opts: { grpc-service-name: \"grpc\" }, reality-opts: { public-key: ${REALITY_PUBLIC[20]}, short-id: \"\" }, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
local CLASH_SUBSCRIBE+=" local CLASH_SUBSCRIBE+="
$CLASH_GRPC_REALITY $CLASH_GRPC_REALITY
" "
@@ -2193,7 +2193,6 @@ tuic://${UUID[13]}:${TUIC_PASSWORD}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&congesti
}, },
\"inbounds\":[ \"inbounds\":[
{ {
\"domain_strategy\":\"\",
\"listen\":\"127.0.0.1\", \"listen\":\"127.0.0.1\",
\"listen_port\":${PORT_SHADOWTLS}, \"listen_port\":${PORT_SHADOWTLS},
\"sniff\":true, \"sniff\":true,
@@ -2205,7 +2204,6 @@ tuic://${UUID[13]}:${TUIC_PASSWORD}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&congesti
\"outbounds\":[ \"outbounds\":[
{ {
\"detour\":\"shadowtls-out\", \"detour\":\"shadowtls-out\",
\"domain_strategy\":\"\",
\"method\":\"$SHADOWTLS_METHOD\", \"method\":\"$SHADOWTLS_METHOD\",
\"password\":\"$SHADOWTLS_PASSWORD\", \"password\":\"$SHADOWTLS_PASSWORD\",
\"type\":\"shadowsocks\", \"type\":\"shadowsocks\",
@@ -2219,7 +2217,6 @@ tuic://${UUID[13]}:${TUIC_PASSWORD}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&congesti
} }
}, },
{ {
\"domain_strategy\":\"\",
\"password\":\"${UUID[14]}\", \"password\":\"${UUID[14]}\",
\"server\":\"${SERVER_IP}\", \"server\":\"${SERVER_IP}\",
\"server_port\":${PORT_SHADOWTLS}, \"server_port\":${PORT_SHADOWTLS},
@@ -2301,7 +2298,6 @@ vless://${UUID[20]}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?encryption=none&security
}, },
\"inbounds\":[ \"inbounds\":[
{ {
\"domain_strategy\":\"\",
\"listen\":\"127.0.0.1\", \"listen\":\"127.0.0.1\",
\"listen_port\":${PORT_ANYTLS}, \"listen_port\":${PORT_ANYTLS},
\"sniff\":true, \"sniff\":true,