У меня есть сервер, на котором запущен 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
Но вроде не работает - я даже не вижу соединений на своем сервере. Я не уверен, что это из-за неправильной конфигурации или из-за каких-то других проблем.
Некоторые вопросы:
ОБНОВЛЕНИЕ: сервер, который фактически обрабатывает трафик, находится на другом компьютере, чем тот, на котором я пытаюсь настроить iptables.
Есть некоторые моменты, которые вы не упомянули в своем описании:
FORWARD
связать политику по умолчанию с ACCEPT
, или разрешив определенный трафик (IP / порт).Чтобы включить переадресацию IP, раскомментируйте следующую строку в /etc/sysctl.conf
:
net.ipv4.ip_forward=1
Затем выполните: sudo sysctl -p
.
Добавление правил с помощью iptables
команда добавит их только в память (после перезагрузки они теряются). Вам нужно сохранить их в текстовый файл, используя iptables-save
и при необходимости восстановить их, используя iptables-restore
.