#!/bin/bash # xmodz-newip — перенастройка прокси на MTProxyL после смены IP сервера. # Порядок: новый IP у хостера -> поправить A-записи домена -> xmodz-newip -> через 10-15 минут xmodz-check # Инструкция: https://xomodz.fit ok(){ echo -e " \e[32m✅ $1\e[0m"; } bad(){ echo -e " \e[31m❌ $1\e[0m"; } sec(){ echo -e "\n\e[36m── $1 ──\e[0m"; } val(){ sed -n "s/^$1='\(.*\)'$/\1/p" "$2" 2>/dev/null | tail -1; } S=/opt/mtproxyl/settings.conf; N=/opt/mtproxyl/nft-rules.conf DOMAIN=$(val SELFMASK_DOMAIN $S); WEBD=$(val WEB_DOMAIN $S); WEBON=$(val WEB_ENABLED $S) sec "1. АДРЕС" IP=$(curl -4 -s -m8 ifconfig.me 2>/dev/null | grep -oxE '[0-9]{1,3}(\.[0-9]{1,3}){3}') [ -z "$IP" ] && { bad "внешний IPv4 не определился — стоп"; exit 1; } ok "сервер выходит с $IP" sec "2. A-ЗАПИСИ" STOP=0 for d in $DOMAIN $WEBD; do R=$(getent ahostsv4 "$d" 2>/dev/null | awk '{print $1; exit}') if [ "$R" = "$IP" ]; then ok "$d → $R" else bad "$d → ${R:-не резолвится}. Поправь A-запись домена на $IP и повтори через 1-2 мин"; STOP=1; fi done [ "$STOP" = 1 ] && exit 1 CIP=$(val CUSTOM_IP $S) if echo "$CIP" | grep -qxE '[0-9]{1,3}(\.[0-9]{1,3}){3}' && [ "$CIP" != "$IP" ]; then mtproxyl settings set CUSTOM_IP "$IP" >/dev/null 2>&1 && ok "адрес в ссылках: $CIP → $IP (ссылки изменились — раздай заново: mtproxyl secret link)" || bad "адрес в ссылках не обновился: mtproxyl settings set CUSTOM_IP $IP" fi sec "3. БЭКАП" mtproxyl backup >/dev/null 2>&1 && ok "бэкап сделан" || bad "бэкап не сделан" sec "4. ЛИМИТЕР" OLD=$(val NFT_SERVER_IP $N) sed -i "s/^NFT_SERVER_IP='.*'/NFT_SERVER_IP='$IP'/" $N mtproxyl nft apply >/dev/null 2>&1 nft list table inet mtproxyl_limit 2>/dev/null | grep -q "ip daddr $IP " && ok "лимитер: ${OLD:-—} → $IP" || bad "лимитер не переприменился: mtproxyl nft apply" sec "5. WEB" if [ "$WEBON" = "true" ]; then mtproxyl web enable >/dev/null 2>&1 mtproxyl web status 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g' | grep -q "public_addr *$IP:443" && ok "WEB public_addr = $IP:443" || bad "WEB public_addr не обновился: mtproxyl web enable" else ok "WEB выключен — пропуск"; fi sec "6. ДВИЖОК" mtproxyl restart >/dev/null 2>&1; sleep 5 systemctl is-active --quiet mtproxyl-telemt && ok "движок перезапущен" || bad "движок не поднялся: systemctl status mtproxyl-telemt" echo -e "\n Через 10-15 минут: \e[36mxmodz-check\e[0m, потом живая проверка с телефона.\n"