z2k/mtproxy-client/S97tg-mtproxy
Necronicle 014a44a67e fix(mtproxy): modprobe xt_REDIRECT, stderr подавлен, ping/pong для WS
- modprobe xt_REDIRECT при старте (фикс для старых ядер Keenetic)
- Все iptables команды с 2>/dev/null (не спамит ошибками)
- Ping/pong каждые 30с — детектит мёртвый WS за 10с вместо зависания
- Read/write deadlines на WS и TCP

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 13:55:07 +03:00

74 lines
2.6 KiB
Bash

#!/bin/sh
# Telegram transparent proxy init script with auto-restart
BINARY="/opt/sbin/tg-mtproxy-client"
PIDFILE="/var/run/tg-mtproxy-client.pid"
PORT="9443"
LOGFILE="/tmp/tg-mtproxy.log"
start() {
if [ -f "$PIDFILE" ] && kill -0 "$(cat $PIDFILE 2>/dev/null)" 2>/dev/null; then
echo "tg-mtproxy already running (PID $(cat $PIDFILE))"
return 0
fi
[ ! -f "$BINARY" ] && { echo "Binary not found: $BINARY"; return 1; }
# Load redirect module if needed
modprobe xt_REDIRECT 2>/dev/null || modprobe ipt_REDIRECT 2>/dev/null || true
# Setup iptables
iptables -t nat -N TG_TRANSPARENT 2>/dev/null || iptables -t nat -F TG_TRANSPARENT 2>/dev/null
iptables -t nat -D PREROUTING -j TG_TRANSPARENT 2>/dev/null
for cidr in 149.154.160.0/20 91.108.4.0/22 91.108.8.0/22 91.108.12.0/22 \
91.108.16.0/22 91.108.20.0/22 91.108.56.0/22 95.161.64.0/20 \
91.105.192.0/23 185.76.151.0/24; do
iptables -t nat -A TG_TRANSPARENT -d "$cidr" -p tcp -j REDIRECT --to-ports $PORT 2>/dev/null
done
iptables -t nat -I PREROUTING -j TG_TRANSPARENT 2>/dev/null
# Start with auto-restart loop
_run_loop &
echo $! > "$PIDFILE"
echo "tg-mtproxy started (PID $!)"
}
_run_loop() {
while true; do
"$BINARY" --transparent --listen ":$PORT" >> "$LOGFILE" 2>&1
EXIT_CODE=$?
echo "$(date '+%Y/%m/%d %H:%M:%S') [crash] process exited with code $EXIT_CODE, restarting..." >> "$LOGFILE"
iptables -t nat -D PREROUTING -j TG_TRANSPARENT 2>/dev/null
iptables -t nat -F TG_TRANSPARENT 2>/dev/null
sleep 1
# Re-add rules
for cidr in 149.154.160.0/20 91.108.4.0/22 91.108.8.0/22 91.108.12.0/22 \
91.108.16.0/22 91.108.20.0/22 91.108.56.0/22 95.161.64.0/20 \
91.105.192.0/23 185.76.151.0/24; do
iptables -t nat -A TG_TRANSPARENT -d "$cidr" -p tcp -j REDIRECT --to-ports $PORT 2>/dev/null
done
iptables -t nat -I PREROUTING -j TG_TRANSPARENT 2>/dev/null
sleep 1
done
}
stop() {
if [ -f "$PIDFILE" ]; then
kill "$(cat $PIDFILE)" 2>/dev/null
fi
killall tg-mtproxy-client 2>/dev/null
rm -f "$PIDFILE"
iptables -t nat -D PREROUTING -j TG_TRANSPARENT 2>/dev/null
iptables -t nat -F TG_TRANSPARENT 2>/dev/null
iptables -t nat -X TG_TRANSPARENT 2>/dev/null
# Flush conntrack to force clients to reconnect immediately
conntrack -F 2>/dev/null
echo "tg-mtproxy stopped"
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; sleep 1; start ;;
*) echo "Usage: $0 {start|stop|restart}" ;;
esac