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

Последнее изменение: 31.03.2020

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

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

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

Чаще всего проброс трафика используется, если мы находимся в локальной сети и от внешнего мира отделены шлюзом. Для того, чтобы открыть доступ для локальных служб (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 -s 10.0.7.2 --sport 22 -j SNAT --to-source 80.81.82.83:2222
  • Первая строка подменяет IP адрес приемника (белый IP) на внутренний (серый IP)
  • Вторая адрес отправителя (серый IP) на внешний (белый IP).
  • 10.0.7.2 — IP адрес машины в локальной сети, на который перенаправляет трафик.
  • 80.81.82.83 — внешний IP адрес нашего сервера.

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

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 -s 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.

17
Отправить ответ

avatar
8 Цепочка комментария
9 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
2 Авторы комментариев
РадикOleg Smirnov Авторы недавних комментариев

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

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

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

Радик
Гость
Радик

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

Радик
Гость
Радик

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

Радик
Гость
Радик

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

Радик
Гость
Радик

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

Радик
Гость
Радик

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

Радик
Гость
Радик

192.168.1.0

Радик
Гость
Радик

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

Меню
WhatsApp Вопрос?

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

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

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять