#!/bin/bash # ============================================================ # ПРОВЕРКА ЗАДАНИЯ 1 — HQ-CLI (только читает состояние!) # Клиент получает адрес по DHCP от HQ-RTR (VLAN 200): проверяем # что адрес есть, шлюз и DNS правильные, суффикс домена — в resolv. # ============================================================ NAME="hq-cli" 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="hq-cli.au-team.irpo" # таблица 3 CLI_IF="" # интерфейс, подключённый к VLAN 200 HQ_RTR_ADDR="" # адрес HQ-RTR в VLAN 200 (ожидаемый шлюз) HQ_SRV_ADDR="" # адрес HQ-SRV (ожидаемый DNS) DNS_DOMAIN="au-team.irpo" # суффикс по заданию EXAM_TZ="" main () { echo "=== Проверка задания 1: HQ-CLI ===" # --- 1. Имя хоста --- check_var "имя хоста" HOSTNAME_EXPECTED && expect_eq "имя хоста" "$HOSTNAME_EXPECTED" "$(hostname)" # --- 2. Адрес по DHCP --- if [[ -n "$CLI_IF" ]]; then METHOD=$(nmcli -g ipv4.method con show "$CLI_IF" 2>/dev/null) expect_eq "IPv4 ($CLI_IF) по DHCP" "auto" "$METHOD" IP4=$(ip -4 -o addr show dev "$CLI_IF" 2>/dev/null | awk '{print $4}') if [[ -n "$IP4" ]]; then ok "адрес получен по DHCP: $IP4" else fail "адрес по DHCP" "адреса на $CLI_IF нет (DHCP-сервер на HQ-RTR работает?)"; fi # DHCP-лизинг фактически выдан NetworkManager if root_or_skip "файл DHCP-лизинга"; then LEASE=$(grep -rls "ip_address=" /var/lib/NetworkManager/*.lease 2>/dev/null | head -1) if [[ -n "$LEASE" ]]; then ok "лизинг DHCP сохранён в $LEASE" else fail "DHCP-лизинг" "файл лизинга не найден в /var/lib/NetworkManager"; fi fi else skip "адрес по DHCP — не задано CLI_IF" fi # --- 3. Шлюз и DNS из DHCP --- check_var "шлюз = HQ-RTR" HQ_RTR_ADDR && expect_eq "шлюз по умолчанию" "$HQ_RTR_ADDR" "$(ip route show default 2>/dev/null | awk '{print $3}')" check_var "DNS = HQ-SRV" HQ_SRV_ADDR && expect_eq "DNS-сервер в resolv.conf" "$HQ_SRV_ADDR" "$(grep -m1 nameserver /etc/resolv.conf | awk '{print $2}')" # --- 4. Суффикс домена в resolv.conf --- check_var "суффикс домена" DNS_DOMAIN && if grep -qE "(search|domain) .*$DNS_DOMAIN" /etc/resolv.conf 2>/dev/null; then ok "суффикс $DNS_DOMAIN в resolv.conf" else fail "суффикс домена" "нет $DNS_DOMAIN: $(cat /etc/resolv.conf 2>/dev/null)"; fi # --- 5. Часовой пояс --- check_var "часовой пояс" EXAM_TZ && expect_eq "часовой пояс" "$EXAM_TZ" "$(timedatectl show -p Timezone --value)" echo "" echo "=== Проверить вручную ===" echo " — ping <адрес HQ-SRV> (маршрутизация VLAN 100/200)" echo " — разрешение имён через новый DNS: dig hq-srv.$DNS_DOMAIN" echo "" echo "=== Итог: OK=$OK FAIL=$FAIL ПРОПУЩЕНО=$SKIP ===" [[ $FAIL -eq 0 ]] } main 2>&1 | tee "$LOG" STATUS=${PIPESTATUS[0]} echo "Лог сохранён: $LOG" exit $STATUS