mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-10 13:36:52 +03:00
feat: Add Hysteria2 outbound support
This commit is contained in:
@@ -64,7 +64,8 @@ sing_box_cf_add_proxy_outbound() {
|
|||||||
url=$(url_decode "$url")
|
url=$(url_decode "$url")
|
||||||
url=$(url_strip_fragment "$url")
|
url=$(url_strip_fragment "$url")
|
||||||
|
|
||||||
local scheme="${url%%://*}"
|
local scheme
|
||||||
|
scheme="$(url_get_scheme "$url")"
|
||||||
case "$scheme" in
|
case "$scheme" in
|
||||||
socks4 | socks4a | socks5)
|
socks4 | socks4a | socks5)
|
||||||
local tag host port version userinfo username password udp_over_tcp
|
local tag host port version userinfo username password udp_over_tcp
|
||||||
@@ -146,6 +147,21 @@ sing_box_cf_add_proxy_outbound() {
|
|||||||
config=$(_add_outbound_security "$config" "$tag" "$url")
|
config=$(_add_outbound_security "$config" "$tag" "$url")
|
||||||
config=$(_add_outbound_transport "$config" "$tag" "$url")
|
config=$(_add_outbound_transport "$config" "$tag" "$url")
|
||||||
;;
|
;;
|
||||||
|
hysteria2 | hy2)
|
||||||
|
local tag host port password obfuscator_type obfuscator_password upload_mbps download_mbps
|
||||||
|
tag=$(get_outbound_tag_by_section "$section")
|
||||||
|
host=$(url_get_host "$url")
|
||||||
|
port="$(url_get_port "$url")"
|
||||||
|
password=$(url_get_userinfo "$url")
|
||||||
|
obfuscator_type=$(url_get_query_param "$url" "obfs")
|
||||||
|
obfuscator_password=$(url_get_query_param "$url" "obfs-password")
|
||||||
|
upload_mbps=$(url_get_query_param "$url" "upmbps")
|
||||||
|
download_mbps=$(url_get_query_param "$url" "downmbps")
|
||||||
|
|
||||||
|
config=$(sing_box_cm_add_hysteria2_outbound "$config" "$tag" "$host" "$port" "$password" "$obfuscator_type" \
|
||||||
|
"$obfuscator_password" "$upload_mbps" "$download_mbps")
|
||||||
|
config=$(_add_outbound_security "$config" "$tag" "$url")
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
log "Unsupported proxy $scheme type. Aborted." "fatal"
|
log "Unsupported proxy $scheme type. Aborted." "fatal"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -160,13 +176,20 @@ _add_outbound_security() {
|
|||||||
local outbound_tag="$2"
|
local outbound_tag="$2"
|
||||||
local url="$3"
|
local url="$3"
|
||||||
|
|
||||||
local security
|
local security scheme
|
||||||
security=$(url_get_query_param "$url" "security")
|
security=$(url_get_query_param "$url" "security")
|
||||||
|
if [ -z "$security" ]; then
|
||||||
|
scheme="$(url_get_scheme "$url")"
|
||||||
|
if [ "$scheme" = "hysteria2" ] || [ "$scheme" = "hy2" ]; then
|
||||||
|
security="tls"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
case "$security" in
|
case "$security" in
|
||||||
tls | reality)
|
tls | reality)
|
||||||
local sni insecure alpn fingerprint public_key short_id
|
local sni insecure alpn fingerprint public_key short_id
|
||||||
sni=$(url_get_query_param "$url" "sni")
|
sni=$(url_get_query_param "$url" "sni")
|
||||||
insecure=$(url_get_query_param "$url" "allowInsecure")
|
insecure=$(_get_insecure_query_param_from_url "$url")
|
||||||
alpn=$(comma_string_to_json_array "$(url_get_query_param "$url" "alpn")")
|
alpn=$(comma_string_to_json_array "$(url_get_query_param "$url" "alpn")")
|
||||||
fingerprint=$(url_get_query_param "$url" "fp")
|
fingerprint=$(url_get_query_param "$url" "fp")
|
||||||
public_key=$(url_get_query_param "$url" "pbk")
|
public_key=$(url_get_query_param "$url" "pbk")
|
||||||
@@ -193,6 +216,18 @@ _add_outbound_security() {
|
|||||||
echo "$config"
|
echo "$config"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_get_insecure_query_param_from_url() {
|
||||||
|
local url="$1"
|
||||||
|
|
||||||
|
local insecure
|
||||||
|
insecure=$(url_get_query_param "$url" "allowInsecure")
|
||||||
|
if [ -z "$insecure" ]; then
|
||||||
|
insecure=$(url_get_query_param "$url" "insecure")
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$insecure"
|
||||||
|
}
|
||||||
|
|
||||||
_add_outbound_transport() {
|
_add_outbound_transport() {
|
||||||
local config="$1"
|
local config="$1"
|
||||||
local outbound_tag="$2"
|
local outbound_tag="$2"
|
||||||
|
|||||||
@@ -661,6 +661,67 @@ sing_box_cm_add_trojan_outbound() {
|
|||||||
)]'
|
)]'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
# Add a Hysteria2 outbound to the outbounds section of a sing-box JSON configuration.
|
||||||
|
# Arguments:
|
||||||
|
# config: string (JSON), sing-box configuration to modify
|
||||||
|
# tag: string, identifier for the outbound
|
||||||
|
# server_address: string, IP address or hostname of the Hysteria2 server
|
||||||
|
# server_port: integer, port of the Hysteria2 server
|
||||||
|
# password: string, password for authentication
|
||||||
|
# obfuscator_type: string, obfuscation type (optional)
|
||||||
|
# obfuscator_password: string, obfuscation password (optional)
|
||||||
|
# upload_mbps: integer, upload bandwidth limit in Mbps (optional)
|
||||||
|
# download_mbps: integer, download bandwidth limit in Mbps (optional)
|
||||||
|
# network: string, network type (e.g., "udp") (optional)
|
||||||
|
# Outputs:
|
||||||
|
# Writes updated JSON configuration to stdout
|
||||||
|
# Example:
|
||||||
|
# CONFIG=$(sing_box_cm_add_hysteria2_outbound "$CONFIG" "hysteria2-out" "example.com" 443 "supersecret" \
|
||||||
|
# "salamander" "obfs-pass" "50" "200" "udp")
|
||||||
|
#######################################
|
||||||
|
sing_box_cm_add_hysteria2_outbound() {
|
||||||
|
local config="$1"
|
||||||
|
local tag="$2"
|
||||||
|
local server_address="$3"
|
||||||
|
local server_port="$4"
|
||||||
|
local password="$5"
|
||||||
|
local obfuscator_type="$6"
|
||||||
|
local obfuscator_password="$7"
|
||||||
|
local upload_mbps="$8"
|
||||||
|
local download_mbps="$9"
|
||||||
|
local network="${10}"
|
||||||
|
|
||||||
|
echo "$config" | jq \
|
||||||
|
--arg tag "$tag" \
|
||||||
|
--arg server_address "$server_address" \
|
||||||
|
--arg server_port "$server_port" \
|
||||||
|
--arg password "$password" \
|
||||||
|
--arg obfuscator_type "$obfuscator_type" \
|
||||||
|
--arg obfuscator_password "$obfuscator_password" \
|
||||||
|
--arg upload_mbps "$upload_mbps" \
|
||||||
|
--arg download_mbps "$download_mbps" \
|
||||||
|
--arg network "$network" \
|
||||||
|
'.outbounds += [(
|
||||||
|
{
|
||||||
|
type: "hysteria2",
|
||||||
|
tag: $tag,
|
||||||
|
server: $server_address,
|
||||||
|
server_port: ($server_port | tonumber),
|
||||||
|
password: $password
|
||||||
|
}
|
||||||
|
+ (if $obfuscator_type != "" and $obfuscator_password != "" then {
|
||||||
|
obfs: {
|
||||||
|
type: $obfuscator_type,
|
||||||
|
password: $obfuscator_password
|
||||||
|
}
|
||||||
|
} else {} end)
|
||||||
|
+ (if $upload_mbps != "" then {up_mbps: ($upload_mbps | tonumber)} else {} end)
|
||||||
|
+ (if $download_mbps != "" then {down_mbps: ($download_mbps | tonumber)} else {} end)
|
||||||
|
+ (if $network != "" then {network: $network} else {} end)
|
||||||
|
)]'
|
||||||
|
}
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
# Set gRPC transport settings for an outbound in a sing-box JSON configuration.
|
# Set gRPC transport settings for an outbound in a sing-box JSON configuration.
|
||||||
# Arguments:
|
# Arguments:
|
||||||
|
|||||||
Reference in New Issue
Block a user