net/check/zadanie2/br-rtr.sh

64 lines
2.8 KiB
Bash
Raw Permalink 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.

#!/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