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

Как применить переадресацию портов с помощью iptables к существующим соединениям?

В целях балансировки нагрузки наши серверы иногда перенаправляют запросы на другой порт; Порт по умолчанию для нашей службы - 5000.

Это используемый код: iptables -t nat -A PREROUTING -p tcp --dport 5000 -j REDIRECT --to-port 5001

После применения этого кода переадресация портов отлично работает для новых запросов.
Новые запросы на порт 5000 перенаправляются в нашу службу на порт 5001. Однако существующие соединения остаются подключенными к порту 5000, как показывает netstat.

Мой вопрос: как заставить это правило iptables немедленно применяться ко всем соединениям, как новым, так и существующим (установленным) - без предварительного разрыва всех соединений?

заранее спасибо

Существующие подключения остаются подключенными, потому что iptables NAT отслеживает состояние подключений, т. Е. «С отслеживанием состояния».

Инструменты iptables не позволяют изменять состояние существующих подключений. Даже если бы ты мог как-то измените существующие подключения в таблице отслеживания подключений NAT iptables, как бы вы предупредили удаленных клиентов об изменении порта, с которым они общаются? В том-то и дело - в протоколе TCP нет функции, которая сообщала бы удаленному клиенту «сменить номер порта ###». Это просто не является частью протокола (и, поскольку это не так, iptables не имеет причин позволять вам делать то, о чем вы просите).