From 8ba5c8a72af7a2f8c6671fbe4dfb8b14e1a1219c Mon Sep 17 00:00:00 2001 From: kimoi Date: Fri, 6 Nov 2026 11:25:53 +0500 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=201:?= =?UTF-8?q?=20hq-sw?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zadanie1/hq-cli.sh | 2 +- zadanie1/hq-srv.sh | 2 +- zadanie1/hq-sw.sh | 132 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 zadanie1/hq-sw.sh diff --git a/zadanie1/hq-cli.sh b/zadanie1/hq-cli.sh index 09a0ddd..50296ae 100644 --- a/zadanie1/hq-cli.sh +++ b/zadanie1/hq-cli.sh @@ -15,7 +15,7 @@ fi # ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= HOSTNAME_FQDN="hq-cli.au-team.irpo" # таблица 3, запись hq-cli.au-team.irpo -CLI_IF="" # интерфейс в сторону HQ-SW (VLAN 200), получит адрес по DHCP +CLI_IF="" # интерфейс к HQ-SW (access-порт VLAN 200; тег ставит только HQ-SW) EXAM_TZ="Europe/Moscow" # проверить на экзамене NM_CONF_DIR="/etc/NetworkManager/system-connections" diff --git a/zadanie1/hq-srv.sh b/zadanie1/hq-srv.sh index fd9351a..5cc3b5d 100644 --- a/zadanie1/hq-srv.sh +++ b/zadanie1/hq-srv.sh @@ -17,7 +17,7 @@ fi HOSTNAME_FQDN="hq-srv.au-team.irpo" # таблица 3, запись hq-srv.au-team.irpo # --- Сеть --- -SRV_IF="" # интерфейс в сторону HQ-SW (VLAN 100) +SRV_IF="" # интерфейс к HQ-SW (access-порт VLAN 100; на HQ-SRV тег не ставится) SRV_ADDR="" # адрес HQ-SRV в VLAN 100, формат адрес/префикс SRV_GW="" # шлюз — адрес HQ-RTR в VLAN 100 DNS_SRV="" # внешний DNS для самого сервера (необязательно, напр. 77.88.8.7) diff --git a/zadanie1/hq-sw.sh b/zadanie1/hq-sw.sh new file mode 100644 index 0000000..c739252 --- /dev/null +++ b/zadanie1/hq-sw.sh @@ -0,0 +1,132 @@ +#!/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"