#!/bin/bash # ============================================================ # ЗАДАНИЕ 2. Настройка BR-RTR (Linux / РЕД ОС 8) # Статическая трансляция портов (DNAT): # 8080 -> приложение testapp на BR-SRV (порт 8080) # 2027 -> SSH на BR-SRV (порт 2027) # Клиент NTP: chrony -> сервер ISP. # ============================================================ # --- Проверка прав root --- if [[ $EUID -ne 0 ]]; then echo "Запустите скрипт с правами root (sudo bash br-rtr.sh)" exit 1 fi # ================= ПЕРЕМЕННЫЕ (заполните перед запуском) ================= ISP_IF="enp0s3" # 1-й NIC — к ISP (куда идут подключения извне) BR_SRV_IP="" # адрес BR-SRV (без префикса) TESTAPP_PORT="8080" # порт testapp на BR-SRV по заданию SSH_PORT="2027" # порт SSH на BR-SRV по заданию IPTABLES_SERVICE="iptables" # ПРОВЕРИТЬ # --- chrony-клиент --- CHRONY_CONF="/etc/chrony.conf" # ПРОВЕРИТЬ путь конфига chrony на РЕД ОС 8 CHRONY_PACKAGE="chrony" CHRONY_SERVICE="chronyd" NTP_SERVER="" # адрес ISP по которому до него достучаться (без префикса) EXAM_TZ="Europe/Moscow" # проверить на экзамене # ============ Проверка заполнения переменных ============ MISSING=() for NAME in ISP_IF BR_SRV_IP NTP_SERVER EXAM_TZ; do [[ -z "${!NAME}" ]] && MISSING+=("$NAME") done if [[ ${#MISSING[@]} -gt 0 ]]; then echo "Заполните переменные в начале скрипта: ${MISSING[*]}" exit 1 fi echo "=== Настройка DNAT (проброс портов) на BR-RTR ===" add_dnat () { if iptables -t nat -C PREROUTING -i "$ISP_IF" -p tcp --dport "$2" \ -j DNAT --to-destination "$3" 2>/dev/null; then echo "Правило $4 уже есть" else iptables -t nat -A PREROUTING -i "$ISP_IF" -p tcp --dport "$2" \ -j DNAT --to-destination "$3" echo "Добавлено DNAT: $4" fi } # --- 1. Проброс порта testapp --- add_dnat "$ISP_IF" "$TESTAPP_PORT" "$BR_SRV_IP:$TESTAPP_PORT" \ "$TESTAPP_PORT -> $BR_SRV_IP:$TESTAPP_PORT" # --- 2. Проброс порта SSH --- add_dnat "$ISP_IF" "$SSH_PORT" "$BR_SRV_IP:$SSH_PORT" "$SSH_PORT -> $BR_SRV_IP:$SSH_PORT" # --- 3. Сохранение правил --- iptables-save > /etc/sysconfig/iptables systemctl enable --now "$IPTABLES_SERVICE" 2>/dev/null \ || echo "ПРОВЕРИТЬ: служба $IPTABLES_SERVICE не запустилась" # --- 4. chrony-клиент: сервер = ISP --- echo "--- chrony-клиент (server = $NTP_SERVER) ---" dnf install -y "$CHRONY_PACKAGE" || echo "ПРОВЕРИТЬ: пакет $CHRONY_PACKAGE не установился" if ! grep -qE "^server[[:space:]]+$NTP_SERVER\\b" "$CHRONY_CONF" 2>/dev/null; then sed -i "1i server $NTP_SERVER iburst" "$CHRONY_CONF" echo "Добавлено: server $NTP_SERVER iburst" else echo "Строка server уже есть" fi systemctl enable --now "$CHRONY_SERVICE" \ || { echo "ПРОВЕРИТЬ: служба $CHRONY_SERVICE не запустилась"; systemctl status "$CHRONY_SERVICE" --no-pager; } timedatectl set-timezone "$EXAM_TZ" echo "" echo "=== Самопроверка на BR-RTR ===" echo "Правила DNAT:" iptables -t nat -L PREROUTING -n -v echo "" echo "chronyc sources" chronyc sources 2>/dev/null echo "" echo "Дополнительные проверки вручную:" echo " chronyc tracking (Stratum 6 и источник == адрес ISP)" echo " с ISP: nc -zv <адрес BR-RTR на линке> 8080 и 2027"