Назад | Перейти на главную страницу

Как создать UDP-прокси с помощью iptables

У меня есть сервер, на котором запущен UDP-сервер на порте 50000. Этот сервер получает обновления от клиентов и каждые 5 секунд отправляет клиентам ответный запрос к сокету, из которого они были подключены.

Теперь я хочу перенаправить весь трафик на этот UDP-сервер и с него через другой сервер. В основном я хочу установить прозрачный прокси перед этим сервером. Причина в том, что я хочу иметь возможность легко контролировать, какой сервер обрабатывает трафик UDP, без необходимости изменять настройки DNS.

Сначала я попытался создать этот прокси с помощью socat:

socat UDP-LISTEN:50000,fork UDP:myserver:50000

Но, похоже, это хорошо работает для входящего трафика, но обратный трафик с моего сервера клиентам не достигает места назначения. Также кажется, что socat разветвляет другой процесс для каждого соединения, поэтому я могу получить слишком много процессов, а также мертвые процессы, когда клиенты отключают / переключают IP.

Я понял, что могу использовать для этого функцию iptables NAT, но, похоже, у меня это не работает. Конфигурация, которую я пробовал:

sudo iptables -t nat -A PREROUTING -p udp --dport 50000 -j DNAT --to-destination myserver:50000

Но вроде не работает - я даже не вижу соединений на своем сервере. Я не уверен, что это из-за неправильной конфигурации или из-за каких-то других проблем.

Некоторые вопросы:

  1. Нужно ли мне как-то перезапускать iptables после добавления конфигурации nat?
  2. Нужно ли разрешать трафик на входящий порт или достаточно настройки NAT?

ОБНОВЛЕНИЕ: сервер, который фактически обрабатывает трафик, находится на другом компьютере, чем тот, на котором я пытаюсь настроить iptables.

Есть некоторые моменты, которые вы не упомянули в своем описании:

  1. Если вы перенаправляете трафик, полученный машиной iptables, на другую. Вам необходимо включить переадресацию IP. Подробнее см. Ниже.
  2. Кроме того, вам необходимо разрешить прохождение перенаправленного трафика. Это можно сделать, установив FORWARD связать политику по умолчанию с ACCEPT, или разрешив определенный трафик (IP / порт).

Чтобы включить переадресацию IP, раскомментируйте следующую строку в /etc/sysctl.conf:

net.ipv4.ip_forward=1

Затем выполните: sudo sysctl -p.

Добавление правил с помощью iptables команда добавит их только в память (после перезагрузки они теряются). Вам нужно сохранить их в текстовый файл, используя iptables-save и при необходимости восстановить их, используя iptables-restore.