76 lines
3.4 KiB
Bash
76 lines
3.4 KiB
Bash
#!/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="172.16.1.0/28 172.16.2.0/28" # сети линков к роутерам (по заданию)
|
||
|
||
EXAM_TZ="Asia/Yekaterinburg" # по заданию — Екатеринбург
|
||
|
||
# ============ Проверка заполнения переменных ============
|
||
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)"
|