68 lines
2.7 KiB
Bash
68 lines
2.7 KiB
Bash
#!/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
|