Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

iptables, DNAT и как увидеть сервер изнутри сети

Практика



Итак, у нас есть роутер на Linux с файерволом iptables, на одном интерфейсе которого - интернет, а на другом - внутрисеть. Например, белых IP у нас немного (в худшем случае вообще только один) и нам нужно перенаправить трафик по определенному порту белого IP на сервер, находящийся внутри сети.
Тобишь, вот так:

пакет -> белый_ip:80 --> серый_ip:80

Или, если смотреть в примере, то:
  • белый адрес: 11.22.33.44
  • адрес сервера внутри сети: 10.0.0.5
  • внутрисеть: 10.0.0.0/24
  • IP роутера на внутрисетевом интерфейсе: 10.0.0.1
  • все, что ломится на 11.22.33.44 по порту 80 - перенаправлять на 10.0.0.5 (тоже порт 80)

Задача тривиальная и решается вот такой строчкой:
iptables -t nat -A PREROUTING -p tcp -d 11.22.33.44 --dport 80 -j DNAT --to-destination 10.0.0.5:80


Но вот задача посложнее. Из-вне то мы веб-сервер увидели. Но вот изнутри сети он все-равно не виден. Что делать?

Простых вариантов 2:
1) Внутри сети, если есть внутрисетевой DNS сервер, например, от Active Directory - переопределить нужные зоны DNS и сказать, что www.myhost.ru - топать не на 11.22.33.44, а на 10.0.0.5. Минусы очевидны: нужно иметь внутрисетевой DNS-сервер и нужно вовремя править и добавлять зоны на нем. Ну и это грабли.
2) Настроить iptables так, чтобы он DNAT-ил не только снаружи, но и изнутри сети. Таким образом мы будем ломиться на 11.22.33.44:80 изнутри сети и нас будет прокидывать на 10.0.0.5:80, как будто мы делаем это из-вне.


Если рассмотреть правило PREROUTING, описанное выше, то видно, что у нас не указывается - откуда именно должен прилететь пакет, чтобы его швырнуло на 10.0.0.5. Но почему-то ведь не работает?

Разгадка здесь в следующем: когда клиентский компьютер отправляет пакет на 11.22.33.44, роутер на самом деле успешно пакет D-NAT'ит на 10.0.0.5. Т.е. до сервера то пакет доходит. Но вот когда сервер отправляет ответ - он видит, что трафик пришел изнутри сети, соответственно ответ он отправляет:
а) Со своего внутрисетевого адреса (10.0.0.5);
б) Напрямую, без использования маршрутизатора, ибо клиент находится внутри его подсети;

Клиент же не ожидает такой пакет: он не готов к тому, что ответ придет от 10.0.0.5, а не с 11.22.33.44. Причем, даже выдернув сервера в отдельную подсеть, у Вас, скорее всего, ничего не получится, т.к. клиент все-равно будет ждать ответ от 11.22.33.44, а не от внутреннего IP, пусть даже трафик пройдет через роутер - S-NAT'а то не произойдет.


Решение - это замаскарадить трафик между внутрисетью и серверами, глядящими во-вне.

Для этого, оставляя неизменным правило выше, добавим еще одно, в раздел POSTROUTING:
iptables -t nat -A POSTROUTING -d 10.0.0.5 -s 10.0.0.0/24 -j SNAT --to-source 10.0.0.1

Таким образом мы выполняем S-NAT для всего трафика, который, по факту, топает на наш сервер 10.0.0.5. И ответ будет уже после маскарадинга - с 11.22.33.44, как и ожидает клиентский компьютер.
создано: 2017-05-10
обновлено: 2021-03-13
746



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Операционная система LINUX

Термины: Операционная система LINUX