#!/bin/bash # ============================================================ # ЗАДАНИЕ 1. Настройка ISP (Linux / РЕД ОС 8) # Имя, интерфейсы (WAN по DHCP, линки к HQ-RTR и BR-RTR), # NAT для сетей HQ-RTR и BR-RTR, часовой пояс. # ============================================================ # --- Проверка прав root --- if [[ $EUID -ne 0 ]]; then echo "Запустите скрипт с правами root (sudo bash isp.sh)" exit 1 fi # ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= # Полное доменное имя ISP. В таблице 3 задания записи ISP нет — уточните имя. HOSTNAME_FQDN="" # Администрирование ниже настраивается без запросов — только переменные. WAN_IF="enp0s3" # 1-й NIC = выход в Интернет (DHCP). Если порядок иной — поменять HQ_IF="enp0s8" # 2-й NIC — в сторону HQ-RTR HQ_NET="172.16.1.1/28" # адрес ISP на этом линке (сеть по заданию 172.16.1.0/28, .1 = ISP) BR_IF="enp0s9" # 3-й NIC — в сторону BR-RTR BR_NET="172.16.2.1/28" # (сеть по заданию 172.16.2.0/28, .1 = ISP) DNS_ISP="77.88.8.7" # внешний DNS, если DHCP провайдера его не выдаёт (можно заменить) # Часовой пояс — поставьте пояс места проведения экзамена EXAM_TZ="Europe/Moscow" # проверить на экзамене # Служба сохранения iptables на РЕД ОС 8 — проверить на стенде (ПРОВЕРИТЬ: # пакет iptables-services и имя службы) IPTABLES_SERVICE="iptables" NM_CONF_DIR="/etc/NetworkManager/system-connections" FORWARD_CONF="/etc/sysctl.d/99-ip-forward.conf" # перезаписывается целиком # ============ Проверка заполнения переменных ============ MISSING=() for NAME in HOSTNAME_FQDN WAN_IF HQ_IF HQ_NET BR_IF BR_NET EXAM_TZ; do [[ -z "${!NAME}" ]] && MISSING+=("$NAME") done if [[ ${#MISSING[@]} -gt 0 ]]; then echo "Заполните переменные в начале скрипта: ${MISSING[*]}" exit 1 fi echo "=== Настройка ISP ===" # --- 1. Имя хоста --- echo "Имя хоста: $HOSTNAME_FQDN" hostnamectl set-hostname "$HOSTNAME_FQDN" echo "Проверка: hostnamectl" # --- 2. WAN-интерфейс: адрес по DHCP --- echo "--- Профиль $WAN_IF (DHCP) ---" cat > "$NM_CONF_DIR/$WAN_IF.nmconnection" < "$NM_CONF_DIR/$HQ_IF.nmconnection" < "$NM_CONF_DIR/$BR_IF.nmconnection" < "$FORWARD_CONF" sysctl -p "$FORWARD_CONF" # --- 7. NAT для сетей HQ-RTR и BR-RTR --- # Динамическая трансляция (MASQUERADE) на выходе в Интернет только для # адресов сетей HQ-RTR и BR-RTR. Правила добавляются, только если их нет. echo "--- NAT (MASQUERADE) ---" for SRC_NET in "$HQ_NET" "$BR_NET"; do if iptables -t nat -C POSTROUTING -s "$SRC_NET" -o "$WAN_IF" -j MASQUERADE 2>/dev/null; then echo "Правило для $SRC_NET уже есть" else iptables -t nat -A POSTROUTING -s "$SRC_NET" -o "$WAN_IF" -j MASQUERADE echo "Добавлено MASQUERADE для $SRC_NET" fi done # --- 8. Сохраняем правила iptables и включаем службу --- echo "--- Сохранение правил iptables ---" if command -v iptables-save >/dev/null 2>&1; then iptables-save > /etc/sysconfig/iptables systemctl enable --now "$IPTABLES_SERVICE" 2>/dev/null \ || echo "ПРОВЕРИТЬ: служба $IPTABLES_SERVICE не запустилась" else echo "ПРОВЕРИТЬ: iptables-save недоступен — как сохранить правила на РЕД ОС 8?" fi # --- 9. DNS (если DHCP провайдера не выдал) --- if [[ -n "$DNS_ISP" ]]; then echo "ПРОВЕРИТЬ: DNS-сервер для ISP задаётся здесь ($DNS_ISP)." echo "Если resolv.conf пустой — впишите DNS через nmcli или вручную." fi # --- 10. Часовой пояс --- timedatectl set-timezone "$EXAM_TZ" echo "Часовой пояс: $(timedatectl show -p Timezone --value)" echo "" echo "=== Самопроверка для ISP ===" echo "Адреса интерфейсов:" ip -4 -br address show echo "" echo "Маршруты (маршрут по умолчанию должен идти через $WAN_IF):" ip route show echo "" echo "Правила NAT:" iptables -t nat -L POSTROUTING -n -v echo "" echo "Дополнительные проверки вручную:" echo " ping -c2 77.88.8.7 (доступ в Интернет от ISP)" echo " ping -c2 <адрес HQ-RTR> (линк к HQ-RTR)" echo " ping -c2 <адрес BR-RTR> (линк к BR-RTR)"