Проксирование с помощью iptables

Обычно проксирование трафика на сайты делается с помощью NGINX. Но если нужно перенаправить абсолютно весь трафик с определённого порта сервера на другой сервер, то логичнее использовать функции iptables.

Для перенаправления трафика на другой сервер нужно сначала включить такую возможность в ядре Linux. Это можно сделать несколькими способами. Если нужно сохранить функцию проксирования даже после перезагрузки сервера, то в файл /etc/sysctl.conf надо добавить добавляем строку:
net.ipv4.ip_forward=1
После чего выполнить команду:
sudo sysctl -p
Но если нужно испытать проксирование только для текущего сеанса, то можно выполнить такую команду:
echo "1" > /proc/sys/net/ipv4/ip_forward
или такую:
sysctl net.ipv4.ip_forward=1
После чего можно начать прописывать правила для iptables для перенаправления. Всего правил будет три. Они позволят перенаправить весь трафик с одного порта принимающего сервера на другой порт удалённого сервера.

Первое правило перенаправит весь трафик с одного порта сервера на другой сервер (и определённый порт на нём). При этом DNAT изменяет сетевой адрес получателя (то есть передаст пакет дальше). Команда для консоли выглядит так (это очень длинная команда):

iptables -t nat -A PREROUTING -i интерфейс -p tcp --dport порт_принимающий -m state --state NEW -j DNAT --to ip_куда_направить:порт_куда_направить

- не забудьте поменять в этой команде "интерфейс", "порт_принимающий", "ip_куда_направить" и "порт_куда_направить" на нужные.

Второе правило разрешает уже установленные соединения:

iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j ACCEPT

И третье правило изменит сетевой адрес отправителя. Команда:

iptables -t nat -A POSTROUTING -p tcp -m tcp --dport порт_принимающий j SNAT --to-source ip_этого_сервера

В этих командах "порт_принимающий" - это порт на проксирующем сервере (который посередине), на который будет приходить запрос. "порт_куда_направить" - это порт на удалённом сервере (конечная станция), куда будет передаваться запрос.

После внесения изменений не забудьте сохранить правила iptables, чтобы они загрузились при следующем старте системы. Для CentOS 8 это будет команда:
iptables-save > /etc/sysconfig/iptables
для 7-ой это команда:
service iptables save
Если оба сервера не имеют белых ip, то стоит вместо последнего правила с SNAT использовать такую команду:
iptables -A POSTROUTING -t nat -j MASQUERADE
SNAT можно применять только если оба сервера имеют белы ip адреса. Правило с SNAT работает быстрее, чем MASQUERADE, потому что последний непрерывно спрашивает у сетевой карты её ip адрес.

Если использовать SNAT, то при непродолжительном обрыве соединения есть вероятность, что пакет не будет отброшен и дойдёт до адресата. Но с MASQUERADE пакет будет отброшен даже если соединение восстановится.
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб

⇡ наверх