#!/bin/bash # ============================================================ # ЗАДАНИЕ 1. Настройка BR-RTR (Linux / РЕД ОС 8) # Имя, net_admin, интерфейсы (к ISP и к BR-FW: сеть /30), # GRE-туннель до HQ-RTR, OSPF (MD5), NAT, часовой пояс. # ============================================================ # --- Проверка прав root --- if [[ $EUID -ne 0 ]]; then echo "Запустите скрипт с правами root (sudo bash br-rtr.sh)" exit 1 fi # ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= HOSTNAME_FQDN="br-rtr.au-team.irpo" # таблица 3, запись br-rtr.au-team.irpo # --- Пользователь net_admin (значения из задания) --- NET_ADMIN_USER="net_admin" NET_ADMIN_PASS="P@ssw0rd" # --- Интерфейс в сторону ISP --- ISP_IF="enp0s3" # 1-й NIC — к ISP (если порядок иной — поменять) ISP_NET="172.16.2.2/28" # адрес BR-RTR в сети линка (по заданию 172.16.2.0/28, .2 = BR-RTR) ISP_GW="172.16.2.1" # шлюз — адрес ISP в этой же сети DNS_ROUTER="8.8.8.8" # внешний DNS для роутера (можно заменить, пусть пусто чтобы убрать) # --- Единственная адресная переменная: базовая сеть офиса BR --- # Схема: BR-SRV = +0 /28 (BR-FW = сеть+1, BR-SRV = сеть+2), # линк к BR-FW = +32 /30 (BR-RTR = сеть+1, BR-FW = сеть+2) BR_BASE="10.10.200.0/24" # поменяйте на свой расчёт при необходимости # --- Интерфейс в сторону BR-FW --- BR_LINK_IF="enp0s8" # 2-й NIC — к BR-FW (адреса линка/сети берутся из BR_BASE-схемы) # --- GRE-туннель до HQ-RTR (сеть 10.10.10.0/24, минимальная маска -> /30) --- GRE_IF="gre1" # GRE_LOCAL берётся из BR_BASE-схемы; GRE_REMOTE фиксирован заданием GRE_REMOTE="172.16.1.2" # конец HQ-RTR (адрес HQ-RTR в сети линка по заданию) # --- OSPF (значения из задания) --- OSPF_PASSWORD="P@ssw0rd" OSPF_AREA="0.0.0.0" # ПРОВЕРИТЬ на РЕД ОС 8: пакет, конфиг и службу OSPF (frr / quagga) FRR_PACKAGE="frr" FRR_CONF="/etc/frr/frr.conf" FRR_DAEMONS="/etc/frr/daemons" # --- Прочее --- EXAM_TZ="Asia/Yekaterinburg" # по заданию — Екатеринбург FORWARD_CONF="/etc/sysctl.d/99-ip-forward.conf" # перезаписывается целиком NM_CONF_DIR="/etc/NetworkManager/system-connections" IPTABLES_SERVICE="iptables" # ПРОВЕРИТЬ # ============ Проверка заполнения переменных ============ MISSING=() for NAME in HOSTNAME_FQDN ISP_IF ISP_NET ISP_GW BR_LINK_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")" GRE_LOCAL="$GRE_LOCAL_BR" BR_LINK_ADDR="$BR_LINK_RTR" echo "Адресация: линк=$BR_LINK_NET BR-SRV=$BR_SRV_NET GRE local=$GRE_LOCAL" echo "=== Настройка BR-RTR ===" # --- 1. Имя хоста --- hostnamectl set-hostname "$HOSTNAME_FQDN" echo "Имя хоста: $(hostname)" # --- 2. Пользователь net_admin с sudo без пароля --- echo "--- Пользователь $NET_ADMIN_USER ---" if id "$NET_ADMIN_USER" &>/dev/null; then echo "Пользователь уже существует" else useradd -m "$NET_ADMIN_USER" fi echo "$NET_ADMIN_USER:$NET_ADMIN_PASS" | chpasswd echo "$NET_ADMIN_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/net_admin chmod 440 /etc/sudoers.d/net_admin # --- 3. Интерфейс в сторону ISP --- echo "--- Профиль $ISP_IF (статика, шлюз $ISP_GW) ---" cat > "$NM_CONF_DIR/$ISP_IF.nmconnection" < "$NM_CONF_DIR/$BR_LINK_IF.nmconnection" < "$NM_CONF_DIR/$GRE_IF.nmconnection" < "$FORWARD_CONF" sysctl -p "$FORWARD_CONF" # --- 7. NAT в сторону ISP --- echo "--- NAT (MASQUERADE) ---" # Сеть линка к BR-FW вычисляется из адреса, сеть BR-SRV — из переменной LINK_NET="$BR_LINK_NET" for SRC_NET in "$LINK_NET" "$BR_SRV_NET"; do if iptables -t nat -C POSTROUTING -s "$SRC_NET" -o "$ISP_IF" -j MASQUERADE 2>/dev/null; then echo "Правило для $SRC_NET уже есть" else iptables -t nat -A POSTROUTING -s "$SRC_NET" -o "$ISP_IF" -j MASQUERADE echo "Добавлено MASQUERADE для $SRC_NET" fi done iptables-save > /etc/sysconfig/iptables systemctl enable --now "$IPTABLES_SERVICE" 2>/dev/null \ || echo "ПРОВЕРИТЬ: служба $IPTABLES_SERVICE не запустилась" # --- 8. OSPF: туннель (MD5) + интерфейс к BR-FW (сосед BR-FW) --- echo "--- OSPF (${FRR_PACKAGE}) ---" dnf install -y "$FRR_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $FRR_PACKAGE не установился" TUN_NET=$(python3 -c "import ipaddress,sys; print(ipaddress.ip_network(sys.argv[1], strict=False))" "$GRE_LOCAL") LINK_NET="$BR_LINK_NET" cat > "$FRR_CONF" <