net/zadanie2/isp.sh

78 lines
3.5 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
# ============================================================
# ЗАДАНИЕ 2. Настройка ISP (Linux / РЕД ОС 8)
# Служба сетевого времени chrony: сервер, стратум 5.
# Клиенты по заданию: HQ-SRV, HQ-CLI, BR-RTR, BR-SRV (их сети
# разрешаем командой allow). Учитывается: сети HQ-RTR и BR-RTR
# за NAT у ISP не видны как адреса клиентов — клиент подключается
# с адреса маршрутизатора после SNAT, разрешаем обе сети линков.
# ============================================================
# --- Проверка прав root ---
if [[ $EUID -ne 0 ]]; then
echo "Запустите скрипт с правами root (sudo bash isp.sh)"
exit 1
fi
# ================= ПЕРЕМЕННЫЕ (заполните перед запуском) =================
# ПРОВЕРИТЬ на РЕД ОС 8: имя конфига chrony и имя службы
CHRONY_CONF="/etc/chrony.conf"
CHRONY_PACKAGE="chrony"
CHRONY_SERVICE="chronyd"
ISO_UPSTREAM="ru.pool.ntp.org" # вышестоящий NTP-сервер (на выбор по заданию;
# здесь имя, а не адрес — не адресация стенда)
STRATUM="5" # стратум сервера по заданию
ALLOW_NETS="" # сети клиентов NTP, через пробел, адрес/префикс:
# сеть к HQ-RTR (по заданию 172.16.1.0/28)
# сеть к BR-RTR (по заданию 172.16.2.0/28)
EXAM_TZ="Europe/Moscow" # проверить на экзамене
# ============ Проверка заполнения переменных ============
MISSING=()
for NAME in ALLOW_NETS EXAM_TZ; do
[[ -z "${!NAME}" ]] && MISSING+=("$NAME")
done
if [[ ${#MISSING[@]} -gt 0 ]]; then
echo "Заполните переменные в начале скрипта: ${MISSING[*]}"
exit 1
fi
echo "=== Настройка chrony-сервера на ISP (стратум $STRATUM) ==="
dnf install -y "$CHRONY_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $CHRONY_PACKAGE не установился"
# Добавляем только отсутствующие строки — повторный запуск не дублирует.
add_line_once () {
if ! grep -qx "$1" "$CHRONY_CONF" 2>/dev/null; then
echo "$1" >> "$CHRONY_CONF"
echo "Добавлено: $1"
else
echo "Уже есть: $1"
fi
}
add_line_once "local stratum $STRATUM"
for NET in $ALLOW_NETS; do
add_line_once "allow $NET"
done
systemctl enable --now "$CHRONY_SERVICE" \
|| { echo "ПРОВЕРИТЬ: служба $CHRONY_SERVICE не запустилась"; systemctl status "$CHRONY_SERVICE" --no-pager; }
timedatectl set-timezone "$EXAM_TZ"
echo ""
echo "=== Самопроверка на ISP ==="
echo "chronyc tracking (стролбик Stratum)"
chronyc tracking 2>/dev/null || echo "(проверить chronyc tracking)"
echo ""
echo "sudo tail -5 $CHRONY_CONF"
echo ""
echo "Дополнительные проверки вручную:"
echo " ss -uln | grep ':123' (NTP слушает?)"
echo " chronyc sources (смотрим на upstream)"
echo " с HQ-SRV/HQ-CLI/BR-RTR/BR-SRV: chronyc sources (source = адрес ISP)"