feat: support Caddy fallback routing for VLESS-REALITY on port 443
Main / build (push) Waiting to run
Main / build (push) Waiting to run
This commit is contained in:
+40
-4
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user