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

63 lines
2.6 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.

#!/usr/bin/env bash
## Скрипт предназначен для настройки дублирования udp-пакетов
## назначенных на порт IP_PORT_IN на заданный порт IP_PORT_OUT.
INI_FILE="/opt/5p28/device.ini" ## Путь к NI-файлу п528
SECTION_NAME="navigat" ## Название секции
IP_PORT_NAME="port" ## Имя поля в котором хранится номер порта назначения
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 и iptables -L -n -v