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

В этой статье поговорим о том, как можно перенаправить трафик с 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.

5 4 votes
Рейтинг статьи
Подписаться
Уведомление о
guest

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

23 комментариев
новее
старее большинство голосов
Inline Feedbacks
Просмотреть все комментарии
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

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