В этой статье поговорим о том, как можно перенаправить трафик с 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 --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 адрес нашего сервера.
Перенаправления всего трафика
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 завершено.
Если есть вопросы, то пишем в комментариях.
Подскажите как удалить это прописанное правило?
Вместо большой буквы A прописать букву D
Зравствуйте, что бы перебросить порты для того чтобы подключиться по рдп из вне на локальную сеть, алгоритм тот же?
Здравствуйте. Да тот же
Спасибо помогло. Да при наборе route появилась строчка
192.168.1.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
Спасибо маршруты заработали!!!!
192.168.1.0
Пропишите в настройка впна строчку в конфигурационном файле сервера.
route 192.168.1.0 255.255.255.0 10.8.0.2
Где 10.8.0.2 адрес роутера при подключении к впн.
192.168.1.0 и маска — это сеть за роутером
Также после внесения изменений перезагрузите сервис впн. А также посмотрите на наличия данных адресов в выводе route
Самое интересное, что да. Настроил по вашей статье и заходил. Пробовал на двух серверах сделать. Потом перестало работать, и заново уже не получается. Пытался причину понять. У себя все перегружал
Внутренняя сеть в офисе 192.168.1.0/24 или 192.168.0.0/24?
впн подключен, я не могу зайти в офисную сеть
А до этого могли?
есть офис где интернет 4g. Нужно обеспечить доступ удаленный к ней. 4g за nat поэтому делаем впн и заходим в офисную сеть через впн. вход впн роутер сеть
Хорошо. Сейчас не можете подключится к vpn. Я правильно понял?
vpn на 1194. vpn подключен и работает, я его делал что бы снаружи заходить во внутреннею сеть, которая на 4g стоит. т.е вся эта катавасия для получения белого айпи
Хорошо. Ещё раз, что бы мне понять. Что перестало работать? Так сказать, что необходимо настроить?
Сперва стоит роутер, а за ним уже сервер с openvpn
проброс портов на vds где стоит openvpn на мой роутер
делал по вашей статье и все работало, неделю назад перестало работать и уже не могу настроить, не пойму в чем дело
Вывод iptables-save . Лучше даже фото
А на каком порту vpn работает
Добрый день. Консультации оказываете?
Здравствуйте, по какому вопросу?