Add custom IP support for proxy links
This commit is contained in:
@@ -410,6 +410,7 @@ mtproxymax secret setlimits <label> <conns> <ips> <quota> [expires] # Set all l
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
mtproxymax port [get|<number>] # Get/set proxy port
|
mtproxymax port [get|<number>] # Get/set proxy port
|
||||||
|
mtproxymax ip [get|auto|<address>] # Get/set custom IP for proxy links
|
||||||
mtproxymax domain [get|clear|<host>] # Get/set FakeTLS domain
|
mtproxymax domain [get|clear|<host>] # Get/set FakeTLS domain
|
||||||
mtproxymax adtag set <hex> # Set ad-tag
|
mtproxymax adtag set <hex> # Set ad-tag
|
||||||
mtproxymax adtag remove # Remove ad-tag
|
mtproxymax adtag remove # Remove ad-tag
|
||||||
|
|||||||
108
mtproxymax.sh
108
mtproxymax.sh
@@ -102,6 +102,7 @@ PROXY_DOMAIN="cloudflare.com"
|
|||||||
PROXY_CONCURRENCY=8192
|
PROXY_CONCURRENCY=8192
|
||||||
PROXY_CPUS=""
|
PROXY_CPUS=""
|
||||||
PROXY_MEMORY=""
|
PROXY_MEMORY=""
|
||||||
|
CUSTOM_IP=""
|
||||||
AD_TAG=""
|
AD_TAG=""
|
||||||
BLOCKLIST_COUNTRIES=""
|
BLOCKLIST_COUNTRIES=""
|
||||||
MASKING_ENABLED="true"
|
MASKING_ENABLED="true"
|
||||||
@@ -407,6 +408,11 @@ _PUBLIC_IP_CACHE=""
|
|||||||
_PUBLIC_IP_CACHE_AGE=0
|
_PUBLIC_IP_CACHE_AGE=0
|
||||||
|
|
||||||
get_public_ip() {
|
get_public_ip() {
|
||||||
|
# Return custom IP if configured
|
||||||
|
if [ -n "${CUSTOM_IP}" ]; then
|
||||||
|
echo "${CUSTOM_IP}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
local now; now=$(date +%s)
|
local now; now=$(date +%s)
|
||||||
# Return cached IP if less than 5 minutes old
|
# Return cached IP if less than 5 minutes old
|
||||||
if [ -n "$_PUBLIC_IP_CACHE" ] && [ $(( now - _PUBLIC_IP_CACHE_AGE )) -lt 300 ]; then
|
if [ -n "$_PUBLIC_IP_CACHE" ] && [ $(( now - _PUBLIC_IP_CACHE_AGE )) -lt 300 ]; then
|
||||||
@@ -544,6 +550,7 @@ PROXY_DOMAIN='${PROXY_DOMAIN}'
|
|||||||
PROXY_CONCURRENCY='${PROXY_CONCURRENCY}'
|
PROXY_CONCURRENCY='${PROXY_CONCURRENCY}'
|
||||||
PROXY_CPUS='${PROXY_CPUS}'
|
PROXY_CPUS='${PROXY_CPUS}'
|
||||||
PROXY_MEMORY='${PROXY_MEMORY}'
|
PROXY_MEMORY='${PROXY_MEMORY}'
|
||||||
|
CUSTOM_IP='${CUSTOM_IP}'
|
||||||
|
|
||||||
# Ad-Tag (from @MTProxyBot)
|
# Ad-Tag (from @MTProxyBot)
|
||||||
AD_TAG='${AD_TAG}'
|
AD_TAG='${AD_TAG}'
|
||||||
@@ -595,7 +602,7 @@ load_settings() {
|
|||||||
# Whitelist of allowed keys
|
# Whitelist of allowed keys
|
||||||
case "$key" in
|
case "$key" in
|
||||||
PROXY_PORT|PROXY_METRICS_PORT|PROXY_DOMAIN|PROXY_CONCURRENCY|\
|
PROXY_PORT|PROXY_METRICS_PORT|PROXY_DOMAIN|PROXY_CONCURRENCY|\
|
||||||
PROXY_CPUS|PROXY_MEMORY|AD_TAG|BLOCKLIST_COUNTRIES|\
|
PROXY_CPUS|PROXY_MEMORY|CUSTOM_IP|AD_TAG|BLOCKLIST_COUNTRIES|\
|
||||||
MASKING_ENABLED|MASKING_HOST|MASKING_PORT|\
|
MASKING_ENABLED|MASKING_HOST|MASKING_PORT|\
|
||||||
TELEGRAM_ENABLED|TELEGRAM_BOT_TOKEN|TELEGRAM_CHAT_ID|\
|
TELEGRAM_ENABLED|TELEGRAM_BOT_TOKEN|TELEGRAM_CHAT_ID|\
|
||||||
TELEGRAM_INTERVAL|TELEGRAM_ALERTS_ENABLED|TELEGRAM_SERVER_LABEL|\
|
TELEGRAM_INTERVAL|TELEGRAM_ALERTS_ENABLED|TELEGRAM_SERVER_LABEL|\
|
||||||
@@ -2897,7 +2904,7 @@ load_tg_settings() {
|
|||||||
local key="${BASH_REMATCH[1]}" val="${BASH_REMATCH[2]}"
|
local key="${BASH_REMATCH[1]}" val="${BASH_REMATCH[2]}"
|
||||||
case "$key" in
|
case "$key" in
|
||||||
PROXY_PORT|PROXY_DOMAIN|PROXY_METRICS_PORT|PROXY_CONCURRENCY|\
|
PROXY_PORT|PROXY_DOMAIN|PROXY_METRICS_PORT|PROXY_CONCURRENCY|\
|
||||||
PROXY_CPUS|PROXY_MEMORY|MASKING_ENABLED|MASKING_HOST|MASKING_PORT|\
|
PROXY_CPUS|PROXY_MEMORY|CUSTOM_IP|MASKING_ENABLED|MASKING_HOST|MASKING_PORT|\
|
||||||
AD_TAG|BLOCKLIST_COUNTRIES|AUTO_UPDATE_ENABLED|\
|
AD_TAG|BLOCKLIST_COUNTRIES|AUTO_UPDATE_ENABLED|\
|
||||||
TELEGRAM_ENABLED|TELEGRAM_BOT_TOKEN|TELEGRAM_CHAT_ID|\
|
TELEGRAM_ENABLED|TELEGRAM_BOT_TOKEN|TELEGRAM_CHAT_ID|\
|
||||||
TELEGRAM_INTERVAL|TELEGRAM_SERVER_LABEL|TELEGRAM_ALERTS_ENABLED)
|
TELEGRAM_INTERVAL|TELEGRAM_SERVER_LABEL|TELEGRAM_ALERTS_ENABLED)
|
||||||
@@ -2911,6 +2918,10 @@ load_tg_settings() {
|
|||||||
_TG_IP_CACHE=""
|
_TG_IP_CACHE=""
|
||||||
_TG_IP_CACHE_AGE=0
|
_TG_IP_CACHE_AGE=0
|
||||||
get_cached_ip() {
|
get_cached_ip() {
|
||||||
|
# Return custom IP if configured
|
||||||
|
if [ -n "${CUSTOM_IP}" ]; then
|
||||||
|
echo "${CUSTOM_IP}"; return 0
|
||||||
|
fi
|
||||||
local now; now=$(date +%s)
|
local now; now=$(date +%s)
|
||||||
if [ -n "$_TG_IP_CACHE" ] && [ $(( now - _TG_IP_CACHE_AGE )) -lt 300 ]; then
|
if [ -n "$_TG_IP_CACHE" ] && [ $(( now - _TG_IP_CACHE_AGE )) -lt 300 ]; then
|
||||||
echo "$_TG_IP_CACHE"; return 0
|
echo "$_TG_IP_CACHE"; return 0
|
||||||
@@ -3542,6 +3553,22 @@ run_installer() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Custom IP
|
||||||
|
echo ""
|
||||||
|
local _detected_ip
|
||||||
|
_detected_ip=$(CUSTOM_IP="" get_public_ip)
|
||||||
|
echo -e " ${BOLD}Server IP${NC} ${DIM}(used in proxy links)${NC}"
|
||||||
|
echo -en " ${DIM}Detected: ${_detected_ip:-unknown} — Enter custom IP or press Enter [${_detected_ip:-auto}]:${NC} "
|
||||||
|
local ip_input
|
||||||
|
read -r ip_input
|
||||||
|
if [ -n "$ip_input" ]; then
|
||||||
|
if [[ "$ip_input" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] || [[ "$ip_input" =~ ^[0-9a-fA-F:]+$ ]]; then
|
||||||
|
CUSTOM_IP="$ip_input"
|
||||||
|
else
|
||||||
|
log_warn "Invalid IP address, using auto-detected"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Domain
|
# Domain
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${BOLD}FakeTLS domain${NC} ${DIM}(your proxy will look like HTTPS to this site)${NC}"
|
echo -e " ${BOLD}FakeTLS domain${NC} ${DIM}(your proxy will look like HTTPS to this site)${NC}"
|
||||||
@@ -3900,6 +3927,7 @@ show_cli_help() {
|
|||||||
echo ""
|
echo ""
|
||||||
echo -e " ${BOLD}Configuration:${NC}"
|
echo -e " ${BOLD}Configuration:${NC}"
|
||||||
echo -e " ${GREEN}port${NC} [get|<number>] Show or change proxy port"
|
echo -e " ${GREEN}port${NC} [get|<number>] Show or change proxy port"
|
||||||
|
echo -e " ${GREEN}ip${NC} [get|auto|<address>] Show, reset, or set custom IP for links"
|
||||||
echo -e " ${GREEN}domain${NC} [get|clear|<host>] Show, clear, or change FakeTLS domain"
|
echo -e " ${GREEN}domain${NC} [get|clear|<host>] Show, clear, or change FakeTLS domain"
|
||||||
echo -e " ${GREEN}adtag${NC} [set <hex>|remove|view] Manage ad-tag"
|
echo -e " ${GREEN}adtag${NC} [set <hex>|remove|view] Manage ad-tag"
|
||||||
echo -e " ${GREEN}geoblock${NC} [add|remove|list|clear] Manage geo-blocking"
|
echo -e " ${GREEN}geoblock${NC} [add|remove|list|clear] Manage geo-blocking"
|
||||||
@@ -4112,6 +4140,38 @@ cli_main() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
ip)
|
||||||
|
load_settings
|
||||||
|
local ip_arg="$1"
|
||||||
|
case "$ip_arg" in
|
||||||
|
""|get)
|
||||||
|
if [ -n "${CUSTOM_IP}" ]; then
|
||||||
|
echo "${CUSTOM_IP} (custom)"
|
||||||
|
else
|
||||||
|
echo "$(get_public_ip) (auto-detected)"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
auto|clear)
|
||||||
|
check_root
|
||||||
|
CUSTOM_IP=""
|
||||||
|
save_settings
|
||||||
|
log_success "IP reset to auto-detect ($(CUSTOM_IP="" get_public_ip))"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
check_root
|
||||||
|
if [[ "$ip_arg" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] || [[ "$ip_arg" =~ ^[0-9a-fA-F:]+$ ]]; then
|
||||||
|
CUSTOM_IP="$ip_arg"
|
||||||
|
save_settings
|
||||||
|
log_success "IP set to ${ip_arg}"
|
||||||
|
else
|
||||||
|
log_error "Invalid IP address: ${ip_arg}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
|
||||||
domain)
|
domain)
|
||||||
load_settings
|
load_settings
|
||||||
local new_domain="$1"
|
local new_domain="$1"
|
||||||
@@ -4831,6 +4891,7 @@ show_settings_menu() {
|
|||||||
draw_header "SETTINGS"
|
draw_header "SETTINGS"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${BOLD}Port:${NC} ${PROXY_PORT}"
|
echo -e " ${BOLD}Port:${NC} ${PROXY_PORT}"
|
||||||
|
echo -e " ${BOLD}IP:${NC} ${CUSTOM_IP:-$(get_public_ip) ${DIM}(auto)${NC}}"
|
||||||
echo -e " ${BOLD}Domain:${NC} ${PROXY_DOMAIN}"
|
echo -e " ${BOLD}Domain:${NC} ${PROXY_DOMAIN}"
|
||||||
echo -e " ${BOLD}CPU:${NC} ${PROXY_CPUS:-unlimited}"
|
echo -e " ${BOLD}CPU:${NC} ${PROXY_CPUS:-unlimited}"
|
||||||
echo -e " ${BOLD}Memory:${NC} ${PROXY_MEMORY:-unlimited}"
|
echo -e " ${BOLD}Memory:${NC} ${PROXY_MEMORY:-unlimited}"
|
||||||
@@ -4840,12 +4901,13 @@ show_settings_menu() {
|
|||||||
echo -e " ${BOLD}Engine:${NC} telemt v$(get_telemt_version)"
|
echo -e " ${BOLD}Engine:${NC} telemt v$(get_telemt_version)"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${DIM}[1]${NC} Change port"
|
echo -e " ${DIM}[1]${NC} Change port"
|
||||||
echo -e " ${DIM}[2]${NC} Change domain"
|
echo -e " ${DIM}[2]${NC} Change IP"
|
||||||
echo -e " ${DIM}[3]${NC} Change resources (CPU/RAM)"
|
echo -e " ${DIM}[3]${NC} Change domain"
|
||||||
echo -e " ${DIM}[4]${NC} Toggle traffic masking"
|
echo -e " ${DIM}[4]${NC} Change resources (CPU/RAM)"
|
||||||
echo -e " ${DIM}[5]${NC} Set ad-tag"
|
echo -e " ${DIM}[5]${NC} Toggle traffic masking"
|
||||||
echo -e " ${DIM}[6]${NC} Toggle auto-update"
|
echo -e " ${DIM}[6]${NC} Set ad-tag"
|
||||||
echo -e " ${DIM}[7]${NC} Engine Management"
|
echo -e " ${DIM}[7]${NC} Toggle auto-update"
|
||||||
|
echo -e " ${DIM}[8]${NC} Engine Management"
|
||||||
echo -e " ${DIM}[0]${NC} Back"
|
echo -e " ${DIM}[0]${NC} Back"
|
||||||
|
|
||||||
local choice
|
local choice
|
||||||
@@ -4869,6 +4931,26 @@ show_settings_menu() {
|
|||||||
press_any_key
|
press_any_key
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
|
local _det_ip; _det_ip=$(CUSTOM_IP="" get_public_ip)
|
||||||
|
echo -e " ${DIM}Detected: ${_det_ip:-unknown}${NC}"
|
||||||
|
echo -en " ${BOLD}Custom IP [${CUSTOM_IP:-auto}]:${NC} "
|
||||||
|
local ip; read -r ip
|
||||||
|
if [ "$ip" = "auto" ] || [ "$ip" = "clear" ]; then
|
||||||
|
CUSTOM_IP=""
|
||||||
|
save_settings
|
||||||
|
log_success "IP reset to auto-detect (${_det_ip})"
|
||||||
|
elif [ -n "$ip" ]; then
|
||||||
|
if [[ "$ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] || [[ "$ip" =~ ^[0-9a-fA-F:]+$ ]]; then
|
||||||
|
CUSTOM_IP="$ip"
|
||||||
|
save_settings
|
||||||
|
log_success "IP set to ${ip}"
|
||||||
|
else
|
||||||
|
log_error "Invalid IP address"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
press_any_key
|
||||||
|
;;
|
||||||
|
3)
|
||||||
echo -e " ${DIM}[1] cloudflare.com [2] google.com [3] microsoft.com [4] Custom${NC}"
|
echo -e " ${DIM}[1] cloudflare.com [2] google.com [3] microsoft.com [4] Custom${NC}"
|
||||||
local d; d=$(read_choice "Choice" "1")
|
local d; d=$(read_choice "Choice" "1")
|
||||||
local _domain_changed=true
|
local _domain_changed=true
|
||||||
@@ -4900,7 +4982,7 @@ show_settings_menu() {
|
|||||||
fi
|
fi
|
||||||
press_any_key
|
press_any_key
|
||||||
;;
|
;;
|
||||||
3)
|
4)
|
||||||
echo -en " ${BOLD}CPU cores [${PROXY_CPUS:-unlimited}]:${NC} "
|
echo -en " ${BOLD}CPU cores [${PROXY_CPUS:-unlimited}]:${NC} "
|
||||||
local c; read -r c
|
local c; read -r c
|
||||||
local _res_changed=false
|
local _res_changed=false
|
||||||
@@ -4932,7 +5014,7 @@ show_settings_menu() {
|
|||||||
fi
|
fi
|
||||||
press_any_key
|
press_any_key
|
||||||
;;
|
;;
|
||||||
4)
|
5)
|
||||||
[ "$MASKING_ENABLED" = "true" ] && MASKING_ENABLED="false" || MASKING_ENABLED="true"
|
[ "$MASKING_ENABLED" = "true" ] && MASKING_ENABLED="false" || MASKING_ENABLED="true"
|
||||||
save_settings
|
save_settings
|
||||||
log_success "Traffic masking: ${MASKING_ENABLED}"
|
log_success "Traffic masking: ${MASKING_ENABLED}"
|
||||||
@@ -4943,7 +5025,7 @@ show_settings_menu() {
|
|||||||
fi
|
fi
|
||||||
press_any_key
|
press_any_key
|
||||||
;;
|
;;
|
||||||
5)
|
6)
|
||||||
echo -en " ${BOLD}Ad-tag (32 hex chars, or 'remove'):${NC} "
|
echo -en " ${BOLD}Ad-tag (32 hex chars, or 'remove'):${NC} "
|
||||||
local at; read -r at
|
local at; read -r at
|
||||||
if [ "$at" = "remove" ]; then
|
if [ "$at" = "remove" ]; then
|
||||||
@@ -4965,13 +5047,13 @@ show_settings_menu() {
|
|||||||
fi
|
fi
|
||||||
press_any_key
|
press_any_key
|
||||||
;;
|
;;
|
||||||
6)
|
7)
|
||||||
[ "$AUTO_UPDATE_ENABLED" = "true" ] && AUTO_UPDATE_ENABLED="false" || AUTO_UPDATE_ENABLED="true"
|
[ "$AUTO_UPDATE_ENABLED" = "true" ] && AUTO_UPDATE_ENABLED="false" || AUTO_UPDATE_ENABLED="true"
|
||||||
save_settings
|
save_settings
|
||||||
log_success "Auto-update: ${AUTO_UPDATE_ENABLED}"
|
log_success "Auto-update: ${AUTO_UPDATE_ENABLED}"
|
||||||
press_any_key
|
press_any_key
|
||||||
;;
|
;;
|
||||||
7) show_engine_menu ;;
|
8) show_engine_menu ;;
|
||||||
0|"") return ;;
|
0|"") return ;;
|
||||||
*) ;;
|
*) ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user