#!/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 --- # Схема: линк к BR-RTR = BR_BASE+32 /30 (BR-RTR = сеть+1, BR-FW = сеть+2), # сеть BR-SRV = BR_BASE+0 /28 (BR-FW = сеть+1) BR_BASE="10.10.200.0/24" # поменяйте на свой расчёт при необходимости # --- Интерфейсы (адреса берутся из BR_BASE-схемы) --- BR_RTR_IF="enp0s3" # 1-й NIC — к BR-RTR BR_SRV_IF="enp0s8" # 2-й NIC — к BR-SRV # --- 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 (необязательно, например 8.8.8.8) # --- Прочее --- EXAM_TZ="Asia/Yekaterinburg" # по заданию — Екатеринбург 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_SRV_IF BR_BASE EXAM_TZ; do [[ -z "${!NAME}" ]] && MISSING+=("$NAME") done if [[ ${#MISSING[@]} -gt 0 ]]; then echo "Заполните переменные в начале скрипта: ${MISSING[*]}" exit 1 fi # ==== Автозаполнение адресации (план по схеме — tools/subnets.py) ==== REPO_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) eval "$(python3 "$REPO_ROOT/tools/subnets.py" br "$BR_BASE")" BR_RTR_ADDR="$BR_LINK_FW" # адрес BR-FW на линке BR_RTR_GW="$BR_RTR_GW" # шлюз BR-FW — адрес BR-RTR на линке (из схемы) BR_SRV_ADDR="$BR_SRV_FW" # адрес BR-FW в сети BR-SRV echo "Адресация: линк=$BR_LINK_NET BR-SRV=$BR_SRV_NET" echo "=== Настройка BR-FW (предположение: Linux / РЕД ОС 8) ===" # --- 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 8.8.8.8 (Интернет через BR-RTR, у BR-RTR NAT)"