net/check/zadanie1/br-fw.sh

92 lines
4.3 KiB
Bash
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.

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