#!/bin/bash # ============================================================ # ПРОВЕРКА ЗАДАНИЯ 2 — BR-RTR: DNAT (8080/2027 -> BR-SRV), # chrony-клиент (сервер = ISP) # (только читает состояние; iptables требует root) # ============================================================ NAME="br-rtr" LOG="check_${NAME}_z2.txt" OK=0; FAIL=0; SKIP=0 ok() { echo "[OK] $1"; OK=$((OK+1)); } fail() { echo "[FAIL] $1 — $2"; FAIL=$((FAIL+1)); } skip() { echo "[ПРОПУЩЕНО] $1"; SKIP=$((SKIP+1)); } root_or_skip() { if [[ $EUID -ne 0 ]]; then skip "$1 (нужен root)"; return 1; fi; return 0; } check_var() { if [[ -z "${!2}" ]]; then skip "$1 — не задано $2"; return 1; fi; return 0; } # ================= ПЕРЕМЕННЫЕ (заполните для проверки) ================= BR_SRV_IP="" # адрес BR-SRV TESTAPP_PORT="8080" # порт testapp SSH_PORT="2027" NTP_ADDR="" # адрес ISP (источник NTP) main () { echo "=== Проверка задания 2: BR-RTR (DNAT + chrony-клиент) ===" if root_or_skip "правила DNAT (iptables)"; then NAT=$(iptables -t nat -S PREROUTING 2>/dev/null) check_var "адрес BR-SRV" BR_SRV_IP && { if grep -qF "DNAT --to-destination $BR_SRV_IP:$TESTAPP_PORT" <<<"$NAT" \ || grep -qF "DNAT --to $BR_SRV_IP:$TESTAPP_PORT" <<<"$NAT"; then ok "проброс 8080 -> $BR_SRV_IP:$TESTAPP_PORT" else fail "проброс 8080" "нет DNAT строки в: $NAT"; fi } check_var "адрес BR-SRV" BR_SRV_IP && { if grep -qF "DNAT --to-destination $BR_SRV_IP:$SSH_PORT" <<<"$NAT" \ || grep -qF "DNAT --to $BR_SRV_IP:$SSH_PORT" <<<"$NAT"; then ok "проброс 2027 -> $BR_SRV_IP:$SSH_PORT" else fail "проброс 2027" "нет DNAT строки в: $NAT"; fi } fi # --- chrony-клиент: источник = адрес ISP --- check_var "источник NTP" NTP_ADDR && if command -v chronyc &>/dev/null; then if chronyc sources 2>/dev/null | grep -qF "$NTP_ADDR"; then ok "NTP источник = $NTP_ADDR" else fail "NTP источник" "адрес $NTP_ADDR не найден в chronyc sources: $(chronyc sources 2>&1)"; fi else skip "NTP источник — chronyc не найден (ПРОВЕРИТЬ пакет chrony)"; fi echo "" echo "=== Проверить вручную ===" echo " — chronyc tracking (синхронизировано?)" echo " — с ISP: nc -zv <адрес BR-RTR на линке> 2027 и 8080" echo "" echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ===" [[ $FAIL -eq 0 ]] } main 2>&1 | tee "$LOG" STATUS=${PIPESTATUS[0]} echo "Лог сохранён: $LOG" exit $STATUS