#!/bin/bash # ============================================================ # ПРОВЕРКА ЗАДАНИЯ 1 — BR-FW (только читает состояние!) # Пункты vtysh требуют root — иначе ПРОПУЩЕНО. # Работает только если BR-FW — Linux (см. MANUAL.md про BR-FW). # ============================================================ NAME="br-fw" LOG="check_${NAME}_z1.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; } expect_eq() { if [[ "$3" == "$2" ]]; then ok "$1"; else fail "$1" "ожидалось '$2', получено '$3'"; fi; } # ================= ПЕРЕМЕННЫЕ (заполните для проверки) ================= HOSTNAME_EXPECTED="br-fw.au-team.irpo" # таблица 3 BR_RTR_IF="" # интерфейс к BR-RTR BR_RTR_ADDR="" # адрес BR-FW в сети /30, адрес/префикс BR_RTR_GW="" # адрес BR-RTR — маршрут по умолчанию BR_SRV_IF="" # интерфейс к BR-SRV BR_SRV_ADDR="" # адрес BR-FW в сети BR-SRV, адрес/префикс BR_SRV_PING="" # адрес BR-SRV для проверки связи EXAM_TZ="" main () { echo "=== Проверка задания 1: BR-FW ===" # --- 1. Имя хоста --- check_var "имя хоста" HOSTNAME_EXPECTED && expect_eq "имя хоста" "$HOSTNAME_EXPECTED" "$(hostname)" # --- 2. Адреса интерфейсов --- check_var "адрес линка к BR-RTR" BR_RTR_ADDR && if grep -qF -- "$BR_RTR_ADDR" <(ip -4 -o addr show "$BR_RTR_IF" 2>/dev/null); then ok "адрес на $BR_RTR_IF = $BR_RTR_ADDR" else fail "адрес линка к BR-RTR" "на $BR_RTR_IF нет $BR_RTR_ADDR"; fi check_var "адрес в сети BR-SRV" BR_SRV_ADDR && if grep -qF -- "$BR_SRV_ADDR" <(ip -4 -o addr show "$BR_SRV_IF" 2>/dev/null); then ok "адрес на $BR_SRV_IF = $BR_SRV_ADDR" else fail "адрес в сети BR-SRV" "на $BR_SRV_IF нет $BR_SRV_ADDR"; fi # --- 3. Шлюз по умолчанию через BR-RTR --- check_var "шлюз по умолчанию" BR_RTR_GW && if ip route show default 2>/dev/null | grep -qF "$BR_RTR_GW"; then ok "маршрут по умолчанию через $BR_RTR_GW" else fail "маршрут по умолчанию" "ожидался via $BR_RTR_GW, получено: $(ip route show default)"; fi # --- 4. OSPF-сосед BR-RTR (только по линку к BR-RTR) --- if root_or_skip "OSPF (vtysh)"; then if ! command -v vtysh &>/dev/null; then skip "OSPF — vtysh не найден (ПРОВЕРИТЬ OSPF-демон на РЕД ОС 8 / что за система BR-FW)" else N_FULL=$(vtysh -c 'show ip ospf neighbor' 2>/dev/null | grep -c "Full") if [[ $N_FULL -ge 1 ]]; then ok "OSPF сосед BR-RTR в FULL" else fail "OSPF сосед" "нет соседа в Full: $(vtysh -c 'show ip ospf neighbor' 2>&1)"; fi fi fi # --- 5. ip_forward --- FWD=$(cat /proc/sys/net/ipv4/ip_forward 2>/dev/null) if [[ "$FWD" == "1" ]]; then ok "ip_forward включён" else fail "ip_forward" "ожидалось 1, получено '$FWD'"; fi # --- 6. Связь с BR-SRV --- check_var "связь с BR-SRV" BR_SRV_PING && if ping -c2 -W2 "$BR_SRV_PING" &>/dev/null; then ok "ping BR-SRV ($BR_SRV_PING)" else fail "ping BR-SRV ($BR_SRV_PING)" "недоступен"; fi # --- 7. Часовой пояс --- check_var "часовой пояс" EXAM_TZ && expect_eq "часовой пояс" "$EXAM_TZ" "$(timedatectl show -p Timezone --value)" echo "" echo "=== Проверить вручную ===" echo " — выход в Интернет из BR-SRV: ping 77.88.8.7 с BR-SRV" echo " — таблицу 2 (адрес BR-FW, его шлюз) в отчёте" echo "" echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ===" [[ $FAIL -eq 0 ]] } main 2>&1 | tee "$LOG" STATUS=${PIPESTATUS[0]} echo "Лог сохранён: $LOG" exit $STATUS