64 lines
2.8 KiB
Bash
64 lines
2.8 KiB
Bash
#!/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
|