mirror of
https://github.com/itdoginfo/podkop.git
synced 2026-01-31 06:40:46 +03:00
feat: add Trojan proxy support (#172)
This commit is contained in:
@@ -76,57 +76,8 @@ sing_box_cf_add_proxy_outbound() {
|
|||||||
packet_encoding=$(url_get_query_param "$url" "packetEncoding")
|
packet_encoding=$(url_get_query_param "$url" "packetEncoding")
|
||||||
|
|
||||||
config=$(sing_box_cm_add_vless_outbound "$config" "$tag" "$host" "$port" "$uuid" "$flow" "" "$packet_encoding")
|
config=$(sing_box_cm_add_vless_outbound "$config" "$tag" "$host" "$port" "$uuid" "$flow" "" "$packet_encoding")
|
||||||
|
config=$(_add_outbound_security "$config" "$url")
|
||||||
local transport
|
config=$(_add_outbound_transport "$config" "$url")
|
||||||
transport=$(url_get_query_param "$url" "type")
|
|
||||||
case "$transport" in
|
|
||||||
tcp | raw) ;;
|
|
||||||
ws)
|
|
||||||
local ws_path ws_host ws_early_data
|
|
||||||
ws_path=$(url_get_query_param "$url" "path")
|
|
||||||
ws_host=$(url_get_query_param "$url" "host")
|
|
||||||
ws_early_data=$(url_get_query_param "$url" "ed")
|
|
||||||
|
|
||||||
config=$(sing_box_cm_set_ws_transport_for_outbound "$config" "$tag" "$ws_path" "$ws_host" "$ws_early_data")
|
|
||||||
;;
|
|
||||||
grpc)
|
|
||||||
# TODO(ampetelin): Add handling of optional gRPC parameters; example links are needed.
|
|
||||||
config=$(sing_box_cm_set_grpc_transport_for_outbound "$config" "$tag")
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
log "Unknown transport '$transport' detected." "error"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
local security
|
|
||||||
security=$(url_get_query_param "$url" "security")
|
|
||||||
case "$security" in
|
|
||||||
tls | reality)
|
|
||||||
local sni insecure alpn fingerprint public_key short_id
|
|
||||||
sni=$(url_get_query_param "$url" "sni")
|
|
||||||
insecure=$(url_get_query_param "$url" "allowInsecure")
|
|
||||||
alpn=$(comma_string_to_json_array "$(url_get_query_param "$url" "alpn")")
|
|
||||||
fingerprint=$(url_get_query_param "$url" "fp")
|
|
||||||
public_key=$(url_get_query_param "$url" "pbk")
|
|
||||||
short_id=$(url_get_query_param "$url" "sid")
|
|
||||||
|
|
||||||
config=$(
|
|
||||||
sing_box_cm_set_tls_for_outbound \
|
|
||||||
"$config" \
|
|
||||||
"$tag" \
|
|
||||||
"$sni" \
|
|
||||||
"$([ "$insecure" == "1" ] && echo true)" \
|
|
||||||
"$([ "$alpn" == "[]" ] && echo null || echo "$alpn")" \
|
|
||||||
"$fingerprint" \
|
|
||||||
"$public_key" \
|
|
||||||
"$short_id"
|
|
||||||
)
|
|
||||||
;;
|
|
||||||
none) ;;
|
|
||||||
*)
|
|
||||||
log "Unknown security '$security' detected." "error"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
;;
|
||||||
ss)
|
ss)
|
||||||
local userinfo tag host port method password udp_over_tcp
|
local userinfo tag host port method password udp_over_tcp
|
||||||
@@ -158,6 +109,17 @@ sing_box_cf_add_proxy_outbound() {
|
|||||||
"$([ "$udp_over_tcp" == "1" ] && echo 2)" # if udp_over_tcp is enabled, enable version 2
|
"$([ "$udp_over_tcp" == "1" ] && echo 2)" # if udp_over_tcp is enabled, enable version 2
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
|
trojan)
|
||||||
|
local tag host port password
|
||||||
|
tag=$(get_outbound_tag_by_section "$section")
|
||||||
|
host=$(url_get_host "$url")
|
||||||
|
port=$(url_get_port "$url")
|
||||||
|
password=$(url_get_userinfo "$url")
|
||||||
|
|
||||||
|
config=$(sing_box_cm_add_trojan_outbound "$config" "$tag" "$host" "$port" "$password")
|
||||||
|
config=$(_add_outbound_security "$config" "$url")
|
||||||
|
config=$(_add_outbound_transport "$config" "$url")
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
log "Unsupported proxy $scheme type"
|
log "Unsupported proxy $scheme type"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -167,6 +129,71 @@ sing_box_cf_add_proxy_outbound() {
|
|||||||
echo "$config"
|
echo "$config"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_add_outbound_security() {
|
||||||
|
local config="$1"
|
||||||
|
local url="$2"
|
||||||
|
|
||||||
|
local security
|
||||||
|
security=$(url_get_query_param "$url" "security")
|
||||||
|
case "$security" in
|
||||||
|
tls | reality)
|
||||||
|
local sni insecure alpn fingerprint public_key short_id
|
||||||
|
sni=$(url_get_query_param "$url" "sni")
|
||||||
|
insecure=$(url_get_query_param "$url" "allowInsecure")
|
||||||
|
alpn=$(comma_string_to_json_array "$(url_get_query_param "$url" "alpn")")
|
||||||
|
fingerprint=$(url_get_query_param "$url" "fp")
|
||||||
|
public_key=$(url_get_query_param "$url" "pbk")
|
||||||
|
short_id=$(url_get_query_param "$url" "sid")
|
||||||
|
|
||||||
|
config=$(
|
||||||
|
sing_box_cm_set_tls_for_outbound \
|
||||||
|
"$config" \
|
||||||
|
"$tag" \
|
||||||
|
"$sni" \
|
||||||
|
"$([ "$insecure" == "1" ] && echo true)" \
|
||||||
|
"$([ "$alpn" == "[]" ] && echo null || echo "$alpn")" \
|
||||||
|
"$fingerprint" \
|
||||||
|
"$public_key" \
|
||||||
|
"$short_id"
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
none) ;;
|
||||||
|
*)
|
||||||
|
log "Unknown security '$security' detected." "error"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "$config"
|
||||||
|
}
|
||||||
|
|
||||||
|
_add_outbound_transport() {
|
||||||
|
local config="$1"
|
||||||
|
local url="$2"
|
||||||
|
|
||||||
|
local transport
|
||||||
|
transport=$(url_get_query_param "$url" "type")
|
||||||
|
case "$transport" in
|
||||||
|
tcp | raw) ;;
|
||||||
|
ws)
|
||||||
|
local ws_path ws_host ws_early_data
|
||||||
|
ws_path=$(url_get_query_param "$url" "path")
|
||||||
|
ws_host=$(url_get_query_param "$url" "host")
|
||||||
|
ws_early_data=$(url_get_query_param "$url" "ed")
|
||||||
|
|
||||||
|
config=$(sing_box_cm_set_ws_transport_for_outbound "$config" "$tag" "$ws_path" "$ws_host" "$ws_early_data")
|
||||||
|
;;
|
||||||
|
grpc)
|
||||||
|
# TODO(ampetelin): Add handling of optional gRPC parameters; example links are needed.
|
||||||
|
config=$(sing_box_cm_set_grpc_transport_for_outbound "$config" "$tag")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log "Unknown transport '$transport' detected." "error"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "$config"
|
||||||
|
}
|
||||||
|
|
||||||
sing_box_cf_add_json_outbound() {
|
sing_box_cf_add_json_outbound() {
|
||||||
local config="$1"
|
local config="$1"
|
||||||
local section="$2"
|
local section="$2"
|
||||||
|
|||||||
Reference in New Issue
Block a user