#!/bin/bash # ============================================================ # ЗАДАНИЕ 1. Настройка HQ-SW как Linux-ВМ (вариант 1) # Bridge с vlan_filtering на трёх адаптерах: # - к HQ-RTR: trunk VLAN 100, 200, 999; # - к HQ-SRV: access VLAN 100 (untagged) — тегов сервер не видит; # - к HQ-CLI: access VLAN 200 (untagged) — тегов клиент не видит. # Управление коммутатором — адрес в VLAN 999 (подынтерфейс bridge). # Часовой пояс на HQ-SW НЕ настраивается (по п. 11 задания 1). # ПРОВЕРИТЬ на стенде: имена интерфейсов и persistence-подход. # ============================================================ # --- Проверка прав root --- if [[ $EUID -ne 0 ]]; then echo "Запустите скрипт с правами root (sudo bash hq-sw.sh)" exit 1 fi # ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= HOSTNAME_FQDN="hq-sw.au-team.irpo" # записи в таблице 3 нет — уточнить имя BRIDGE="br0" # имя создаваемого моста RTR_IF="" # интерфейс к HQ-RTR (trunk) (пример: enp0s3) SRV_IF="" # интерфейс к HQ-SRV (access) (пример: enp0s8) CLI_IF="" # интерфейс к HQ-CLI (access) (пример: enp0s9) VLAN_SRV="100" # VLAN трафика HQ-SRV (по заданию) VLAN_CLI="200" # VLAN трафика HQ-CLI (по заданию) VLAN_MGMT="999" # VLAN управления (по заданию) MGMT_ADDR="" # адрес HQ-SW в VLAN 999, формат адрес/префикс # (сеть управления не более 8 адресов) MGMT_GW="" # адрес HQ-RTR в VLAN 999 (необязательно — шлюз управления) UNIT_FILE="/etc/systemd/system/hq-sw-bridge.service" # перезапуск моста после reboot SELF_COPY="/usr/local/sbin/hq-sw-bridge" # ============ Проверка заполнения переменных ============ MISSING=() for NAME in HOSTNAME_FQDN RTR_IF SRV_IF CLI_IF MGMT_ADDR; do [[ -z "${!NAME}" ]] && MISSING+=("$NAME") done if [[ ${#MISSING[@]} -gt 0 ]]; then echo "Заполните переменные в начале скрипта: ${MISSING[*]}" exit 1 fi echo "=== Настройка HQ-SW (bridge + VLAN filtering) ===" # --- 1. Имя хоста --- hostnamectl set-hostname "$HOSTNAME_FQDN" echo "Имя хоста: $(hostname)" # --- 2. Мост с фильтрацией VLAN (повторный запуск безопасен: не падает, если мост есть) --- echo "--- Мост $BRIDGE ---" ip link add "$BRIDGE" type bridge vlan_filtering 1 2>/dev/null \ || echo "Мост $BRIDGE уже существует — продолжаем" ip link set dev "$BRIDGE" up # --- 3. Порты в мост --- echo "--- Порты в мост ---" for IF in "$RTR_IF" "$SRV_IF" "$CLI_IF"; do ip link set dev "$IF" nomaster 2>/dev/null || true ip link set dev "$IF" master "$BRIDGE" || echo "ВНИМАНИЕ: $IF не вошёл в мост" ip link set dev "$IF" up done # --- 4. VLAN-конфигурация портов --- # ВАЖНО: сначала убираем дефолтный untagged vid 1, иначе трафик уйдёт в VLAN 1. echo "--- VLAN-порты ---" # Порт к HQ-RTR: trunk (все VLAN тегированными, без untagged) bridge vlan del dev "$RTR_IF" vid 1 2>/dev/null || true for VID in $VLAN_SRV $VLAN_CLI $VLAN_MGMT; do bridge vlan add dev "$RTR_IF" vid "$VID" done # Порты к HQ-SRV и HQ-CLI: access — VLAN уходит наружу без тега bridge vlan del dev "$SRV_IF" vid 1 2>/dev/null || true bridge vlan add dev "$SRV_IF" vid "$VLAN_SRV" pvid untagged bridge vlan del dev "$CLI_IF" vid 1 2>/dev/null || true bridge vlan add dev "$CLI_IF" vid "$VLAN_CLI" pvid untagged # --- 5. Управление коммутатором: адрес в VLAN 999 на подынтерфейсе моста --- VLAN_IF="$BRIDGE.$VLAN_MGMT" ip link add link "$BRIDGE" name "$VLAN_IF" type vlan id "$VLAN_MGMT" 2>/dev/null \ || true ip addr replace "$MGMT_ADDR" dev "$VLAN_IF" ip link set dev "$VLAN_IF" up if [[ -n "$MGMT_GW" ]]; then ip route replace default via "$MGMT_GW" dev "$VLAN_IF" fi echo "Управление: $VLAN_IF = $MGMT_ADDR" # --- 6. Сохраняем после reboot: копия скрипта + systemd-юнит --- # (скрипт идемпотентен, повторный запуск безопасен) install -m 755 "$0" "$SELF_COPY" \ || echo "ПРОВЕРИТЬ: не удалось скопировать $0 в $SELF_COPY" cat > "$UNIT_FILE" <<'EOF' [Unit] Description=HQ-SW: bridge с VLAN filtering и управлением в VLAN 999 After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/hq-sw-bridge [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable hq-sw-bridge \ && echo "После reboot мост восстановится автоматически" \ || echo "ПРОВЕРИТЬ: не включился автозапуск hq-sw-bridge.service" echo "" echo "=== Самопроверка для HQ-SW ===" echo "Порты и мост:" ip -br link show echo "" echo "VLAN-конфигурация портов:" bridge vlan show echo "" echo "Управление:" ip -4 addr show "$VLAN_IF" 2>/dev/null [[ -n "$MGMT_GW" ]] && ip route show default echo "" echo "Дополнительные проверки вручную:" echo " bridge -d link show (порты в состоянии forward?)" echo " ping -c2 <адрес HQ-RTR в VLAN 999>" echo " После reboot: systemctl status hq-sw-bridge"