net/zadanie2/br-rtr.sh

91 lines
3.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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="" # интерфейс в сторону 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"