91 lines
3.8 KiB
Bash
91 lines
3.8 KiB
Bash
#!/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="Asia/Yekaterinburg" # по заданию — Екатеринбург
|
||
|
||
# ============ Проверка заполнения переменных ============
|
||
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"
|