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

37 комментариев
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 завершено.

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

Ссылки в шапке страницы.
Заранее всем спасибо!!!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите 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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

37 комментариев
новее
старее большинство голосов
Inline Feedbacks
Просмотреть все комментарии
npucT
npucT
18.10.2023 00:03

Добрый день! Подскажите, 1) данная инструкция актуальна для Ubuntu 18 и 20 версии? 2) по данной инструкции смогу “выпустить” в глобальный интернет свой почтовый сервер ( Mailcow), установленный на домашнем ПК с серым ай пи? ( при этом есть уже VPS с белым ай пи с налаженным Wireguard. на ПК… Подробнее »

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

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

Иван
Иван
Ответить на  webmaster С.
01.12.2023 10:15

Подскажите Ваш телеграмм

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

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

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

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