Задание 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
|
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" # проверить на экзамене
|
EXAM_TZ="Europe/Moscow" # проверить на экзамене
|
||||||
NM_CONF_DIR="/etc/NetworkManager/system-connections"
|
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
|
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_ADDR="" # адрес HQ-SRV в VLAN 100, формат адрес/префикс
|
||||||
SRV_GW="" # шлюз — адрес HQ-RTR в VLAN 100
|
SRV_GW="" # шлюз — адрес HQ-RTR в VLAN 100
|
||||||
DNS_SRV="" # внешний DNS для самого сервера (необязательно, напр. 77.88.8.7)
|
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