81 lines
3.9 KiB
Bash
81 lines
3.9 KiB
Bash
#!/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
|