#!/bin/bash # ============================================================ # ЗАДАНИЕ 1. Настройка BR-FW # ------------------------------------------------------------ # ВНИМАНИЕ: СИСТЕМА BR-FW НЕИЗВЕСТНА (УТОЧНИТЬ, что за система). # Скрипт написан В ПРЕДПОЛОЖЕНИИ Linux / РЕД ОС 8. Если на стенде # BR-FW — не Linux, используйте MANUAL.md и настраивайте по-своему. # ------------------------------------------------------------ # Имя, интерфейсы (к BR-RTR: сеть /30, к BR-SRV: сеть <=16 адресов), # маршрут по умолчанию через BR-RTR, OSPF (только интерфейс к BR-RTR), # IP forwarding, часовой пояс. # NAT для офиса BR НЕ настраивается — NAT делает BR-RTR. # ============================================================ # --- Проверка прав root --- if [[ $EUID -ne 0 ]]; then echo "Запустите скрипт с правами root (sudo bash br-fw.sh)" exit 1 fi # ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= HOSTNAME_FQDN="br-fw.au-team.irpo" # таблица 3, запись br-fw.au-team.irpo # --- Интерфейс в сторону BR-RTR (сеть с минимально возможной маской /30) --- BR_RTR_IF="enp0s3" # 1-й NIC — к BR-RTR (если порядок иной — поменять) BR_RTR_ADDR="" # адрес BR-FW на линке (префикс проставится сам: /30) BR_RTR_GW="" # адрес BR-RTR в этой же сети — маршрут по умолчанию # --- Интерфейс в сторону BR-SRV (сеть не более 16 адресов) --- BR_SRV_IF="enp0s8" # 2-й NIC — к BR-SRV BR_SRV_ADDR="" # адрес BR-FW в сети BR-SRV (префикс проставится сам: /28) # --- OSPF (протокол разрешён ТОЛЬКО на интерфейсе к BR-RTR; пароля нет — # аутентификация по заданию требуется только на туннеле HQ<->BR) --- OSPF_AREA="0.0.0.0" # ПРОВЕРИТЬ на РЕД ОС 8: пакет, конфиг и службу OSPF (frr / quagga) FRR_PACKAGE="frr" FRR_CONF="/etc/frr/frr.conf" FRR_DAEMONS="/etc/frr/daemons" DNS_FW="" # внешний DNS для BR-FW (необязательно, например 77.88.8.7) # --- Прочее --- EXAM_TZ="Europe/Moscow" # проверить на экзамене FORWARD_CONF="/etc/sysctl.d/99-ip-forward.conf" # перезаписывается целиком NM_CONF_DIR="/etc/NetworkManager/system-connections" # ============ Проверка заполнения переменных ============ MISSING=() for NAME in HOSTNAME_FQDN BR_RTR_IF BR_RTR_ADDR BR_RTR_GW BR_SRV_IF \ BR_SRV_ADDR EXAM_TZ; do [[ -z "${!NAME}" ]] && MISSING+=("$NAME") done if [[ ${#MISSING[@]} -gt 0 ]]; then echo "Заполните переменные в начале скрипта: ${MISSING[*]}" exit 1 fi echo "=== Настройка BR-FW (предположение: Linux / РЕД ОС 8) ===" # Префиксы по заданию (достаточно голого IP) add_prefix () { if [[ "$2" == */* ]]; then echo "$2"; else echo "$2/$1"; fi; } BR_RTR_ADDR=$(add_prefix 30 "$BR_RTR_ADDR") BR_SRV_ADDR=$(add_prefix 28 "$BR_SRV_ADDR") # --- 1. Имя хоста --- hostnamectl set-hostname "$HOSTNAME_FQDN" echo "Имя хоста: $(hostname)" # --- 2. Интерфейс в сторону BR-RTR (+ маршрут по умолчанию) --- echo "--- Профиль $BR_RTR_IF (статика, шлюз $BR_RTR_GW) ---" cat > "$NM_CONF_DIR/$BR_RTR_IF.nmconnection" < "$NM_CONF_DIR/$BR_SRV_IF.nmconnection" < "$FORWARD_CONF" sysctl -p "$FORWARD_CONF" # --- 5. OSPF: рекламируем обе сети BR, но HELLO только на линке к BR-RTR --- echo "--- OSPF (${FRR_PACKAGE}) ---" dnf install -y "$FRR_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $FRR_PACKAGE не установился" LINK_NET=$(python3 -c "import ipaddress,sys; print(ipaddress.ip_network(sys.argv[1], strict=False))" "$BR_RTR_ADDR") SRV_NET=$(python3 -c "import ipaddress,sys; print(ipaddress.ip_network(sys.argv[1], strict=False))" "$BR_SRV_ADDR") cat > "$FRR_CONF" </dev/null; then echo "DNS уже прописан: $(grep '^nameserver' /etc/resolv.conf)" else echo "nameserver $DNS_FW" > /etc/resolv.conf fi fi # --- 7. Часовой пояс --- timedatectl set-timezone "$EXAM_TZ" echo "" echo "=== Самопроверка для BR-FW ===" ip -4 -br address show echo "" echo "Маршруты:" ip route show echo "" echo "Дополнительные проверки вручную:" echo " vtysh -c 'show ip ospf neighbor' (сосед BR-RTR в FULL?)" echo " ping -c2 $BR_RTR_GW (BR-RTR доступен?)" echo " ping -c2 77.88.8.7 (Интернет через BR-RTR, у BR-RTR NAT)"