Перенаправление всего трафика linux

Как перенаправлять порты через шлюз Linux с помощью Iptables

Большое количество компьютеров в сети постепенно начало становиться проблемой, ведь в IPv4 встроена поддержка относительно ограниченного количества хостов. Обойти лимиты получилось при помощи технологии NAT, позволяющей объединять любые офисные сети таким образом, чтобы внутри они работали «как обычно», а для внешних клиентов были доступны по одному IP-адресу (обычно установленному для сетевого устройства, роутера или маршрутизатора).

Оборудование считывает из пакета данных информацию о локальной машине, для которой адресованы переданные блоки, и подменяет IP на реальный. Те же операции доступны и для портов – NAT меняет их значение, эта процедура получила название « проброс портов ». Ее используют при необходимости получения внешнего трафика в частную сеть. На базе платформы Linux управление технологией осуществляется утилитой IPTables.

Принцип работы NAT

Первое и наиболее важное условие для функционирования любой системы – уникальный IP-адрес у каждого компьютера, объединенного в сеть. Но резкий рост количества объединяемых хостов привел к тому, что номеров стало не хватать. И пришлось продумывать варианты, как временно объединить несколько машин под одним адресом – это и стало толчком к появлению технологии Network Address Translation (NAT), так называемому форвардингу портов.

Система функционирует довольно просто. Фактически компьютеры не видны извне, хотя имеют уникальные IP-адреса. Их фильтрует маршрутизатор, который и занимается подменой. Например, локальная машина отправила пакет на внешний ресурс. Тот сначала попадает в память сетевого устройства, которое подменяет адрес отправителя на собственный и отправляет данные дальше. В памяти роутера сохраняется информация, откуда пришел пакет и куда отправлять ответ.

Единственный минус такого подхода заключается в невозможности инициации подключения к ПК напрямую извне. Ведь в таком случае маршрутизатор не знает, какой именно компьютер нужен, и соединение отсекается. Хотя при помощи утилиты IPTables можно настроить NAT , если роутер работает под управлением операционки Debian 10 .

Проброс портов в iptables

Первым шагом активируем режим переадресации трафика, которая будет работать на уровне ядра (возможно, это уже сделано, но лучше убедиться):

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Важно обеспечить сохранение настройки после перезапуска сетевого оборудования:

sudo sysctl -w net.ipv4.ip_forward=1

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

Настройка прохождения пакетов

В начале процедуры требуется включить режим пропуска пакетов сквозь сетевое устройство. В утилите IPTables для этого используют цепочку FORWARD. Настройки по умолчанию предполагают отклонение всех поступающих на маршрутизатор пакетов данных (срабатывает правило DROP). Поэтому нужно разрешить инициализировать новые коннекты, поступающие от eth0 до eth1. Они получают назначение типа conntrack с представлением в виде пакета SYN:

sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT

Внесение правила ACCEPT необходимо для разрешения текущего соединения. Оно имеет действие только на первый поступающий пакет, а ведь еще предстоит давать ответ и отправлять «обратные» пакеты. Поэтому включим возможность коннекта в обе стороны через порт 80, в этом нам помогут правила ESTABLIHED и RELATED:

sudo iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Теперь укажем, что по умолчанию требуется применять политику DROP:

sudo iptables -P FORWARD DROP

Первоначальная настройка завершена – мы включили возможность прохождения трафика на порт 80 и обратно. Но это еще не все, проброс портов пока не работает, потому что нужно настроить еще несколько правил, отвечающих за перенаправление потоков данных.

Читайте также:  Connect function in linux

Модификация пакетов в IPTables

Чтобы сделать это, укажем маршрутизатору, как модифицировать адрес компьютера, для которого предназначены пакеты (Destination) DNAT и адрес отправляющей машины (Source) SNAT. Первые будем настраивать в цепочке PREROUTING в таблице NAT. Процедура изменит адрес на нужный для достижения требуемой цели при прохождении информации между разными сетями. Пакеты же исходящего направления будут автоматом направляться на веб-сервер с IP 192.168.1.2.

Обращение происходит на порт 80:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2

Половина требуемого сделана. Теперь в пакет будет включен изначальный адрес рабочего места, а это означает, что на него уже можно отправлять ответные пакеты. Но локальная машина ожидает их от маршрутизатора, а не от внешнего ресурса, поэтому придется решить еще одну проблему – сетевое оборудование должно менять входящий IP на внутренний, принадлежащий конкретному компьютеру (в нашем случае 192.168.1.1).

sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 192.168.1.2 -j SNAT --to-source 192.168.1.1

При перенаправлении трафика на другой порт, например, 8080, его указывают после IP:

sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 192.168.1.2 -j SNAT --to-source 192.168.1.1:8080

Когда речь идет о пробросе диапазона портов, их указывают следующим образом:

sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 1000:2000 -d 192.168.1.2 -j SNAT --to-source 192.168.1.1

Теперь можно проверить работоспособность перенаправления трафика через IPTables и понять, все ли работает, как предполагалось.

Сохранение настроек IPTables

Далее рекомендуется сохранить внесенные настройки, чтобы при перезапуске оборудования они остались прежними. Выполним это командой:

sudo service iptables-persistent save

Выводы

Мы разобрались, как работает проброс портов в Debian . Процедура предполагает настройку обоих направлений передачи данных. Тогда система поймет, откуда пришел пакет и куда возвращать ответ, если тот поступит на маршрутизатор. В качестве тренировки можно настроить подобный коннект с удаленным сервером, арендованным у провайдера cloud.timeweb.com .

Читайте также:  Linux mint установка телеграмма

Источник

iptables. Отправить трафик на другой сервер

С помощью iptables в Linux можно настроить перенаправление запросов с одного сервера на другой. Расскажу как это делается.

Чтобы перенаправлить трафик с определённого порта на другой сервер, необходимо сначала включить такую возможность у пропускающего сервера. Если нужно, чтобы правило работало даже после перезагрузки, то в файл «/etc/sysctl.conf» добавляем строку:

если нужно только для текущего сеанса, то можно сделать так:

или выполнить такую команду:

После выполнения одной из этих команд, можно приступать к прописыванию правил iptables. А точнее нам нужно выполнить всего три команды на сервере, который будет перенаправлять трафик:

iptables -t nat -A PREROUTING -i интерфейс -p tcp —dport порт_принимающий -m state —state NEW -j DNAT —to 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_этого_сервера

«порт_принимающий» — это порт на текущем сервере, на который будет приходить запрос

«порт_куда_направить» — это порт на удалённом сервере, куда будет передаваться запрос

Первая команда перенаправит трафик (DNAT изменяет сетевой адрес получателя).

Вторая команда будет разрешать уже установленные соединения.

А третья строка изменит сетевой адрес отправителя. Если оба сервера не имеют белых ip, то стоит переписать последнюю строку на

iptables -A POSTROUTING -t nat -j MASQUERADE

SNAT можно применять только если оба ip белые. Он работает быстрее, чем MASQUERADE, потому что последний непрерывно спрашивает у сетевой карты какой у неё IP.

Если использовать SNAT, то при кратковременном обрыве соединения есть вероятность, что пакет всё-таки дойдёт до адресата. Потому что пакет не будет отброшен. А вот с MASQUERADE пакет будет отброшен и не дойдёт, даже когда соединение восстановится.

P.S.
На этом механизме перенаправления можно сделать примитивный балансировщик нагрузки. Он будет распределять запросы между серверами. (в будущем, возможно, напишу статью про это. )

Публикации из этого раздела:

  • YouTube-dl Скачать видео с YouTube — Часто появляется необходимость скачать ролик с YouTube или даже целый плейлист. Для этого можно испо.
  • Blogun. Отзыв на сервис — Предпочитаю честные методы продвижения в интернете. К таким отношу написание статей с полным обзором.
  • Обновление WordPress 4.6.1 — «cURL error» — Наконец то! Вышло обновление WordPress 4.6.1. Почему его так сильно ждали? Версия 4.6 содержала ошиб.
  • Распространение авторизации на поддомены — Иногда требуется распространить авторизацию на все поддомены, включая основной домен. Другими словам.
  • Bitrix. Переход на ядро D7. Как приспособиться к ORM — Люди готовы отказаться от улучшений качества жизни из-за необходимости делать хоть какие-то перемены.
  • Динозавр в Google Chrome — Сегодня у моего провайдера случилась авария. Для меня это фатально, ведь вся работа связана с паутин.
  • Docker и iptables. Закрываем доступ к Docker — Docker динамически прописывает правила в iptables после своей загрузки. Делает он это хитрозакрученн.
  • Кавычки WordPress — По умолчанию WordPress заменяет простые кавычки » » фигурными « ». К сожалению, делает он это неадек.
Читайте также:  Linux mint pulseaudio install

2 комментариев к “ iptables. Отправить трафик на другой сервер ”

При перечислении трёх правил iptables, ближе к концу статьи, вы, видимо, пропустили черточку перед «j».

Источник

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

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

Для перенаправления трафика на другой сервер нужно сначала включить такую возможность в ядре Linux. Это можно сделать несколькими способами. Если нужно сохранить функцию проксирования даже после перезагрузки сервера, то в файл /etc/sysctl.conf надо добавить добавляем строку:

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 пакет будет отброшен даже если соединение восстановится.

Источник

Оцените статью
Adblock
detector