Проброс портов (port forwarding) в Linux используя iptables

32 комментария
linux-logo

В этой статье поговорим о том, как можно перенаправить трафик с IP адреса (белого) на другой IP адрес (серый) использую утилиту iptables.

Начальные данные

У нас имеется компьютер под управлением linux, выступающий в роли маршрутизатора с одним внешним интерфейсом enp0s3 для доступа в Интернет (80.81.82.83) и внутренним enp0s8 интерфейсом Локальной сети (10.0.7.1). Требуется пробросить tcp порт (2222) с белого ip-адреса на серый ip-адрес Локальной сети порт (22).

Чаще всего проброс трафика используется, если мы находимся в локальной сети и от внешнего мира отделены шлюзом. Для того, чтобы открыть доступ для локальных служб (ssh, web, ftp и т.д.), нам необходимо пробросить порты. Поскольку в качестве шлюза мы будем использовать сервер на Linux, то осуществлять данные действия будем с помощью утилиты iptables.

Алгоритм проброса портов в iptables.

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

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Для автоматического включения открываем файл /etc/sysctl.conf и ищем там строку #net.ipv4.ip_forward=1, убираем знак комментария.

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1

Настройка port forwarding на Linux

Итак, приступим. Для выполнения поставленной задачи, перенаправление порта 2222 на порт 22 другой машины, необходимо добавить следующие правила iptables:

sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT

Это правило разрешает прохождение входящих пакетов внутрь сети.

Теперь опишем форвардинг (forwarding) пакетов:

sudo iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 --dport 2222 -j DNAT --to-destination 10.0.7.2:22
sudo iptables -t nat -A POSTROUTING -p tcp --sport 22 --dst 10.0.7.2 -j SNAT --to-source 80.81.82.83:2222
  • Первая строка подменяет IP адрес приемника (белый IP) на внутренний (серый IP)
  • Вторая адрес отправителя (серый IP) на внешний (белый IP).
  • 10.0.7.2 – IP адрес машины в локальной сети, на который перенаправляет трафик.
  • 80.81.82.83 – внешний IP адрес нашего сервера.
  • 22 – внутренний порт локальной машины
  • 2222 – внешний порт для подключения.

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

Если есть необходимость проброса всего трафика, то выполним следующее правило.

iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 -j DNAT --to-destination 10.0.7.2
iptables -t nat -A POSTROUTING -p tcp --dst 10.0.7.2 -j SNAT --to-source 80.81.82.83

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

sudo nano /etc/nat

содержимое файла по первому примеру:

#!/bin/sh 
# Перенаправляем ssh с 2222 на 22 IP-10.0.7.2 
iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 --dport 2222 -j DNAT --to-destination 10.0.7.2:22 
iptables -t nat -A POSTROUTING -p tcp -dst 10.0.7.2 --sport 22 -j SNAT --to-source 80.81.82.83:2222

Далее открываем файл interfaces

sudo nano /etc/network/interfaces

И добавляем в конце следующую строчку:

pre-up /etc/nat

Данное выражение подгрузить правила iptables после перезагрузки системы.

Как посмотреть правила iptables

Посмотреть текущие правила iptables можно с помощью команды:

sudo iptables -L -t nat

Пример:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             80.81.82.83       tcp dpt:2222 to:10.0.7.2:22
Chain POSTROUTING (policy ACCEPT)
SNAT       tcp  --  10.0.7.2          anywhere             tcp spt:ssh to:80.81.82.83:2222

Вот и все, на этом рассмотрение проброса портов в операционных системах под управлением Linux с помощью iptables завершено.

Если есть вопросы, то пишем в комментариях.

Также можете вступить в Телеграм канал, ВКонтакте или подписаться на Twitter. Ссылки в шапке страницы.
Заранее всем спасибо!!!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Русифицируем Ubuntu Server 16.04/18.04/20.04 LTS
linux-logo

Сегодня в статье настроим и русифицируем Ubuntu Server 16.04/18.04/20.04. Чтобы поддерживался русский язык, и перевод системы стал русским

Вносим CAA запись в DNS (bind9)
dns_bind9

Начиная с сентября 2017 года удостоверяющим центрам предписано обязательно проверять CAA-записи в DNS перед генерацией сертификата

Обновления Ubuntu Server 16.04 до 18.04
linux-logo

В этой статье рассмотрим пример обновления Ubuntu Server 16.04 до Ubuntu Server 18.04 Все наши действия нам придется выполнять из Читать

Защита OpenVPN с помощью Fail2Ban
fail2ban-logo

В связи с последними блокировками IP-адресов Роскомнадзором, встала необходимость завести свой собственный VPN сервер. Если VPN у вас ещё не Читать

5 6 голоса
Рейтинг статьи

Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

32 комментариев
новее
старее большинство голосов
Inline Feedbacks
Просмотреть все комментарии
Zöhrab əmi
Zöhrab əmi
25.07.2023 21:27

Данная инуструкция не действовала .
Вот тут

 iptables -t nat -A POSTROUTING -p tcp --sport 22 --dst 10.0.7.2 -j SNAT --to-source 80.81.82.83:2222

поменял на

 iptables -t nat -A POSTROUTING -p tcp --sport 22 --dst 10.0.7.2 -j SNAT --to-source  [основной шлюз локальной сети ]
Антон
Антон
16.06.2023 19:44

Здравствуйте могу ли я с вами связаться нужное настроить кое что за оплату у самого не получается

Alexey
Alexey
28.07.2022 13:13

Доброго дня! У меня задача: ” разрешить прохождение исходящих udp-пакетов по порту 55777; настроить портфорвардинг (перенаправление) входящих udp-пакетов по порту 55777. Пакеты udp:55777 (по умолчанию), приходящие на внешнюю карту Proxy из Интернета, нужно переадресовывать на компьютер в локальной сети с установленным ViPNet (в заголовке таких пакетов нужно изменить destination: IP-адреса… Подробнее »

Последний раз редактировалось 1 год назад by Alexey
Alexey
Alexey
Ответить на  webmaster С.
28.07.2022 17:40

Спасибо за подсказку! Если можно разъяснить по этой части: Где 10.10.10.1 — ip адрес машины для входящих пакетов10.5.5.2 — ip адрес vipnet в локальной сети у меня есть входящий белый айпи компании условно 63.23.123.154 есть адрес шлюза на входе – 192.168.1.1 (iptables in Fedora Linux) и локальный ПК с установленным… Подробнее »

s1111
s1111
02.04.2022 11:15

sudo echo 1 > /proc/sys/net/ipv4/ip_forward – включаем форвардинг пакетов sudo nano /etc/sysctl.conf – для авто включения net.ipv4.ip_forward=1 sudo iptables -A FORWARD -i eno3 -o eno4 -j ACCEPT – разрешаем вход. траффик и делаем проброс портов sudo iptables -t nat -A PREROUTING -p tcp -d xxx.xxx.xxx.xxx. –dport 80 -j DNAT –to-destination 192.168.0.254:30080  sudo… Подробнее »

J D
J D
11.06.2021 16:27

sudo iptables -t nat -A PREROUTING -p tcp -d 172.20.100.141 –dport 58080 -j DNAT –to-destination 172.20.100.17:58080 sudo iptables -t nat -A POSTROUTING -p tcp –sport 58080 –dst 172.20.100.17 -j SNAT –to-source 172.20.100.141 в итоге набираю 172.20.100.141:58080 = на выходе не попадаю на 172.20.100.17 и проброса в принципе никакого нет, делаю… Подробнее »

Егор
Егор
12.01.2021 13:47

Подскажите как удалить это прописанное правило?

Виталий Зуев
Виталий Зуев
25.09.2020 09:13

Зравствуйте, что бы перебросить порты для того чтобы подключиться по рдп из вне на локальную сеть, алгоритм тот же?

Радик
Радик
11.12.2019 00:18

Спасибо помогло. Да при наборе route появилась строчка
192.168.1.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
Спасибо маршруты заработали!!!!

Радик
Радик
11.12.2019 00:09

192.168.1.0

Радик
Радик
11.12.2019 00:08

Самое интересное, что да. Настроил по вашей статье и заходил. Пробовал на двух серверах сделать. Потом перестало работать, и заново уже не получается. Пытался причину понять. У себя все перегружал

Радик
Радик
11.12.2019 00:07

впн подключен, я не могу зайти в офисную сеть

Радик
Радик
11.12.2019 00:05

есть офис где интернет 4g. Нужно обеспечить доступ удаленный к ней. 4g за nat поэтому делаем впн и заходим в офисную сеть через впн. вход впн роутер сеть

Радик
Радик
11.12.2019 00:03

vpn на 1194. vpn подключен и работает, я его делал что бы снаружи заходить во внутреннею сеть, которая на 4g стоит. т.е вся эта катавасия для получения белого айпи

Радик
Радик
10.12.2019 23:14

проброс портов на vds где стоит openvpn на мой роутер
делал по вашей статье и все работало, неделю назад перестало работать и уже не могу настроить, не пойму в чем дело

Радик
Радик
10.12.2019 23:11

Добрый день. Консультации оказываете?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: