feat: support Caddy fallback routing for VLESS-REALITY on port 443
Main / build (push) Waiting to run

This commit is contained in:
2026-07-08 00:46:24 +08:00
parent 2347e16958
commit 7549097b3f
+40 -4
View File
@@ -281,6 +281,17 @@ ask() {
continue
}
if [[ $(is_test port_used $REPLY) && $is_ask_set != 'door_port' ]]; then
if [[ $REPLY == 443 && $is_caddy && $is_lower =~ "reality" ]]; then
msg "\n检测到 443 端口已被 Caddy 占用。"
msg "你可以选择启用 REALITY 回落分流功能,将非科学上网流量转发给本地 Caddy (4443 端口)。"
msg "这需要你后续手动将 Caddyfile 中的默认 https 端口修改为 4443 并重启 Caddy。"
ask string is_enable_fallback "是否启用 Caddy 回落分流?(y/n):"
if [[ $is_enable_fallback =~ ^[Yy]$ ]]; then
is_reality_fallback=1
export $is_ask_set=$REPLY
break
fi
fi
msg "$is_err 无法使用 ($REPLY) 端口."
continue
fi
@@ -926,7 +937,16 @@ add() {
err "($is_use_port) 不是一个有效的端口. $is_err_tips"
}
[[ $(is_test port_used $is_use_port) && ! $is_gen ]] && {
err "无法使用 ($is_use_port) 端口. $is_err_tips"
if [[ $is_use_port == 443 && $is_caddy && $is_lower =~ "reality" ]]; then
msg "\n检测到 443 端口已被 Caddy 占用。"
msg "你可以选择启用 REALITY 回落分流功能,将非科学上网流量转发给本地 Caddy (4443 端口)。"
msg "这需要你后续手动将 Caddyfile 中的默认 https 端口修改为 4443 并重启 Caddy。"
ask string is_enable_fallback "是否启用 Caddy 回落分流?(y/n):"
if [[ $is_enable_fallback =~ ^[Yy]$ ]]; then
is_reality_fallback=1
fi
fi
[[ ! $is_reality_fallback ]] && err "无法使用 ($is_use_port) 端口. $is_err_tips"
}
port=$is_use_port
fi
@@ -1100,9 +1120,9 @@ get() {
get file $2
if [[ $is_config_file ]]; then
is_json_str=$(cat $is_conf_dir/"$is_config_file" | sed s#//.*##)
is_json_data=$(jq '(.inbounds[0]|.type,.listen_port,(.users[0]|.uuid,.password,.username),.method,.password,.override_port,.override_address,(.transport|.type,.path,.headers.host),(.tls|.server_name,.reality.private_key)),(.outbounds[1].tag)' <<<$is_json_str)
is_json_data=$(jq '(.inbounds[0]|.type,.listen_port,(.users[0]|.uuid,.password,.username),.method,.password,.override_port,.override_address,(.transport|.type,.path,.headers.host),(.tls|.server_name,.reality.private_key,.reality.handshake.server_port)),(.outbounds[1].tag)' <<<$is_json_str)
[[ $? != 0 ]] && err "无法读取此文件: $is_config_file"
is_up_var_set=(null is_protocol port uuid password username ss_method ss_password door_port door_addr net_type path host is_servername is_private_key is_public_key)
is_up_var_set=(null is_protocol port uuid password username ss_method ss_password door_port door_addr net_type path host is_servername is_private_key is_reality_fallback_port is_public_key)
[[ $is_debug ]] && msg "\n------------- debug: $is_config_file -------------"
i=0
for v in $(sed 's/""/null/g;s/"//g' <<<"$is_json_data"); do
@@ -1118,6 +1138,7 @@ get() {
is_reality=1
net_type+=reality
is_public_key=${is_public_key/public_key_/}
[[ $is_reality_fallback_port == '4443' ]] && is_reality_fallback=1
fi
is_socks_user=$username
is_socks_pass=$password
@@ -1238,7 +1259,13 @@ get() {
net=reality
[[ ! $is_servername ]] && is_servername=$is_random_servername
[[ ! $is_private_key ]] && get_pbk
is_json_add="tls:{enabled:true,server_name:\"$is_servername\",reality:{enabled:true,handshake:{server:\"$is_servername\",server_port:443},private_key:\"$is_private_key\",short_id:[\"\"]}}"
local handshake_server=$is_servername
local handshake_port=443
[[ $is_reality_fallback ]] && {
handshake_server="127.0.0.1"
handshake_port=4443
}
is_json_add="tls:{enabled:true,server_name:\"$is_servername\",reality:{enabled:true,handshake:{server:\"$handshake_server\",server_port:$handshake_port},private_key:\"$is_private_key\",short_id:[\"\"]}}"
[[ $is_lower =~ "http" ]] && {
is_json_add="$is_json_add,transport:{type:\"http\"}"
} || {
@@ -1490,6 +1517,15 @@ info() {
msg "端口(port): $port"
msg "路径(path): $path"
fi
if [[ $is_reality_fallback ]]; then
msg "------------- REALITY Fallback NOTICE -------------"
warn "由于启用了 Caddy 回落分流,你必须手动配置 Caddy 才能使整体网络生效:"
msg "1. 请将你的 ${yellow}/etc/caddy/Caddyfile${none} 中的默认 https 端口修改为 ${green}4443${none}"
msg " 例如,在全局配置块中添加: ${cyan}https_port 4443${none},或者将 site 域名改为 ${cyan}yourdomain.com:4443${none}"
msg "2. 修改后,请运行命令重启 Caddy ➔ ${green}systemctl restart caddy${none}"
msg "3. 如果 sing-box 启动失败,请检查 Caddy 是否已成功释放了 443 端口。"
msg "---------------------------------------------------"
fi
footer_msg
}