Задание 1: hq-sw
This commit is contained in:
parent
76fb635e38
commit
8ba5c8a72a
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
132
zadanie1/hq-sw.sh
Normal file
132
zadanie1/hq-sw.sh
Normal file
|
|
@ -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"
|
||||
Loading…
Reference in a new issue