Files
AWG2_harness/Amnezia limits (old bash)/check-vpn-limits.txt
T

190 lines
8.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
root@5862577-oj93961:~# cat /usr/local/bin/check-vpn-limits
#!/bin/bash
echo "┌──────────────────────────────────────────────────┐"
echo "│ AmneziaWG Traffic Control v1.2 │"
echo "└──────────────────────────────────────────────────┘"
echo ""
# === Auto-detect container and interface ===
# Supported container names in order of preference
POSSIBLE_CONTAINERS=("amnezia-awg" "amnezia-awg2")
CONTAINER=""
for name in "${POSSIBLE_CONTAINERS[@]}"; do
if docker ps --format '{{.Names}}' 2>/dev/null | grep -xq "$name"; then
CONTAINER="$name"
break
fi
done
# helper to run docker exec if container found
docker_exec() {
if [ -z "$CONTAINER" ]; then
return 1
fi
docker exec "$CONTAINER" "$@"
}
# detect interface name inside container (prefer wg*, tun*, amnezia*, veth*)
IF=""
if [ -n "$CONTAINER" ]; then
IF=$(docker_exec sh -c "ip -o link show 2>/dev/null | awk -F': ' '{print \$2}'" 2>/dev/null | \
egrep -o '^(wg[0-9]+|wg|amnezia[0-9]*|tun[0-9]+|veth[0-9]+)' | head -n1 || true)
# fallback: pick first iface that has an ipv4 address inside container
if [ -z "$IF" ]; then
IF=$(docker_exec sh -c "ip -o -4 addr show 2>/dev/null | awk '{print \$2}'" 2>/dev/null | head -n1 || true)
fi
fi
# final fallback to wg0 for backwards-compatibility (if nothing found)
IF=${IF:-wg0}
# 1. Состояние системы
echo "📊 СИСТЕМНЫЙ СТАТУС:"
if systemctl is-active amnezia-tc.service >/dev/null 2>&1; then
echo " Сервис: ✅ активен"
else
echo " Сервис: ❌ неактивен"
fi
if systemctl is-active amnezia-tc.timer >/dev/null 2>&1; then
next_time=$(systemctl list-timers --all | grep amnezia 2>/dev/null | head -1 | awk '{print $2, $3, $4, $5}')
if [ -n "$next_time" ]; then
echo " Таймер: ✅ активен (след. запуск: $next_time)"
else
echo " Таймер: ✅ активен (расписание не найдено)"
fi
else
echo " Таймер: ❌ неактивен"
fi
# container status (if found)
if [ -n "$CONTAINER" ]; then
container_status=$(docker ps --filter "name=^${CONTAINER}$" --format '{{.Status}}' 2>/dev/null)
echo " Контейнер: ✅ ${CONTAINER} — ${container_status}"
else
# Try to detect if any amnezia container exists at all (for clearer message)
any_amnezia=$(docker ps --format '{{.Names}}' 2>/dev/null | grep -i amne || true)
if [ -n "$any_amnezia" ]; then
echo " Контейнер: ❌ ожидается amnezia-awg/awg2, но не найден в списке запущенных контейнеров. Найдены: $any_amnezia"
else
echo " Контейнер: ❌ не запущен"
fi
fi
echo ""
# 2. Клиенты
echo "👥 ПОДКЛЮЧЕННЫЕ КЛИЕНТЫ:"
if [ -n "$CONTAINER" ]; then
docker_exec wg show 2>/dev/null | awk '
BEGIN {count=0}
/^peer:/ {peer=$2}
/allowed ips:/ {ip=$3; gsub("/32","",ip)}
/latest handshake:/ {
if ($3 == "Never") {
status="❌ отключен"
time="никогда"
} else {
time=$3" "$4
if ($4 ~ /second|minute/) status="✅ онлайн"
else if ($4 ~ /hour/) status="⚠ давно"
else status="✅ онлайн"
}
}
/transfer:/ {
rx=$3; tx=$6
printf " • %-15s %-15s %8s ↓ / %8s ↑\n", ip, status, rx, tx
count++
}'
if ! docker ps --format '{{.Names}}' 2>/dev/null | grep -q -x "$CONTAINER"; then
echo " Контейнер не запущен"
fi
else
echo " Контейнер не запущен — не могу показать клиентов (wg)."
fi
echo ""
# 3. Ограничения TC
echo "⏸️ ОГРАНИЧЕНИЯ ТРАФИКА (70 Мбит/с):"
if [ -n "$CONTAINER" ]; then
count=$(docker_exec sh -c "tc class show dev ${IF} 2>/dev/null | grep -c 'rate 70Mbit'" 2>/dev/null || true)
if [ -n "$count" ] && [ "$count" -gt 0 ]; then
echo " Классы TC:"
docker_exec sh -c "tc class show dev ${IF} 2>/dev/null | grep 'rate 70Mbit'" 2>/dev/null | \
while read -r line; do
class_id=$(echo "$line" | awk '{print $2}' | cut -d: -f2)
if [ -n "$class_id" ]; then
echo " • Класс 1:$class_id → 70 Мбит/с"
fi
done
echo " ✅ Ограничения активны для $count клиентов"
else
echo " ❌ Нет активных ограничений"
fi
else
echo " Контейнер не запущен"
fi
echo ""
# 4. Статистика фильтров
echo "📈 СТАТИСТИКА ФИЛЬТРОВ:"
if [ -n "$CONTAINER" ]; then
docker_exec sh -c "tc -s filter show dev ${IF} parent 1: 2>/dev/null" 2>/dev/null | \
grep -B1 -A1 "flowid" | while read -r line1; do
if echo "$line1" | grep -q "flowid"; then
read -r line2
read -r line3
class=$(echo "$line1" | grep -o "flowid 1:[0-9]*" | cut -d: -f2)
hex_ip=$(echo "$line2" | grep -o "match [0-9a-f]*" | awk '{print $2}')
success=$(echo "$line3" | grep -o "success [0-9]*" | awk '{print $2}')
if [ -n "$hex_ip" ] && [ -n "$class" ]; then
ip=$(printf "%d.%d.%d.%d" \
0x${hex_ip:0:2} \
0x${hex_ip:2:2} \
0x${hex_ip:4:2} \
0x${hex_ip:6:2} 2>/dev/null)
if [ -n "$success" ] && [ "$success" -gt 0 ]; then
echo " • $ip → активен ($success пакетов)"
else
echo " • $ip → ожидание трафика"
fi
fi
fi
done
if ! docker_exec sh -c "tc -s filter show dev ${IF} parent 1: 2>/dev/null" 2>/dev/null | grep -q "flowid"; then
echo " Нет активных фильтров"
fi
else
echo " Контейнер не запущен"
fi
echo ""
# 5. Последние события
echo "🔄 ПОСЛЕДНИЕ СОБЫТИЯ:"
if [ -f "/var/log/amnezia-tc.log" ]; then
tail -3 /var/log/amnezia-tc.log | while read -r line; do
message=$(echo "$line" | cut -d']' -f2-)
echo " $message"
done
else
echo " Лог-файл не найден"
fi
echo ""
echo "┌──────────────────────────────────────────────────┐"
echo "│ СИСТЕМА ГОТОВА К ЭКСПЛУАТАЦИИ! 🎉 │"
echo "│ │"
echo "│ Проверено: │"
echo "│ ✅ Автозапуск после перезагрузки │"
echo "│ ✅ Автоматическое восстановление правил │"
echo "│ ✅ Ограничение 70 Мбит/с на клиента │"
echo "│ ✅ Обнаружение новых клиентов │"
echo "└──────────────────────────────────────────────────┘"
echo ""
echo "📋 Команды управления:"
echo " check-vpn-limits - этот отчет"
echo " systemctl restart amnezia-tc.service - перезапуск"
echo " journalctl -u amnezia-tc.service -f - логи"
echo " docker restart ${CONTAINER:-amnezia-awg2} - перезапуск WG (поменяйте имя при необходимости)"