Files
uarep-ctl/ip-tables-navigation.sh

68 lines
2.7 KiB
Bash
Raw Permalink 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.

#!/usr/bin/env bash
## Скрипт настраивает дублирование udp-пакетов передаваемых
## в порт IP_PORT_IN на заданный порт IP_PORT_OUT.
## Предназначен для работы в среде Астра 1.6 Смоленск:
## ```bash
## iptables --version
## ```
## > iptables v1.8.2 (nf_tables)
INI_FILE="/opt/5p28/device.ini" ## Путь к INI-файлу 5п28
SECTION_NAME="navigat" ## Название секции INI-файла 5п28
IP_PORT_NAME="port" ## Имя поля INI-файла 5п28 в котором хранится номер порта назначения
IP_PORT_OUT="60000" ## Порт на который направлять дублированные пакеты
SUDO_PASS="12345678" ## Пароль администратора
set -e
if [[ -n "$1" ]]; then
INI_FILE="$1"
fi
if [[ -n "$2" ]]; then
SUDO_PASS="$2"
fi
if [[ -n "$3" ]]; then
IP_PORT_OUT="$3"
fi
# Возвращает значение из INI-файла
read_ini() {
local section="$1"
local key="$2"
# Игнорируем комментарии (# и ;), обрезаем пробелы
awk -F '=' -v section="$section" -v key="$key" '
/^\[/ { current_section = substr($0, 2, length($0)-2) }
current_section == section && $1 ~ /^[[:space:]]*'$key'[[:space:]]*$/ {
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2)
gsub(/^"|"$/, "", $2) # Удаляем кавычки, если есть
print $2
exit
}
' "${INI_FILE}"
}
# Проверка существования файла
if [[ ! -f "${INI_FILE}" ]]; then
echo "ошибка: файл \"${INI_FILE}\" не найден"
exit 1
fi
# Чтение значений из ini-файла
IP_PORT_IN=$(read_ini "${SECTION_NAME}" "${IP_PORT_NAME}")
# Проверка достоверности
if [[ -z "$IP_PORT_IN" ]]; then
echo "ошибка: параметр \"${IP_PORT_NAME}\" не найден в секции [${SECTION_NAME}]"
exit 1
fi
# Дублирование трафика на другой порт. Перенаправить копии входящих UDP-пакетов
# с порта ${IP_PORT_IN} на порт ${IP_PORT_OUT}, чтобы другой процесс продолжал
# работать с портом ${IP_PORT_IN}, а копии пакетов отправлялись на ${IP_PORT_OUT}:
echo "${SUDO_PASS}" | sudo -S iptables -t nat -A PREROUTING -p udp --dport "${IP_PORT_IN}" -j REDIRECT --to-ports "${IP_PORT_OUT}"
echo "${SUDO_PASS}" | sudo -S iptables -A INPUT -p udp --dport "${IP_PORT_IN}" -j ACCEPT
echo "${SUDO_PASS}" | sudo -S iptables -t nat -L -n -v