[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: nat не натит сеть, которая недоступна напрямую



On Wed, May 29, 2013 at 03:19:46PM +0400, Mikhail A Antonov wrote:
> 29.05.2013 14:27, Eugene Berdnikov пишет:
...
> >  лишнего. Не пишите "! -d 172.16.2.44/32" в правиле SNAT, оно там излишне
> >  потому что пакет с локальным dst_ip в POSTROUTING не попадёт. Но эта
> >  мелочь режет глаз, а с чайниками в netdev никто разговаривать не хочет.
> Замечено следующее - если на сервере запущен какой-то сервис (пусть
> будет почтовый сервер) и пользователь из локальной сети захочет
> подключиться к этому серверу используя внешний адрес - у него ничего не
> выйдет. Если в правиле указать что если dst свой - не натить - то всё
> работает.

 Это странно, потому что, повторю, пакет с локальным dst_ip не должен
 попадать в POSTROUTING. И если указание локального адреса в правиле
 что-то меняет, это уже повод задуматься... Я подозреваю, что в Вашей
 конфигурации где-то дважды отрабатывает conntrack, потому что пакет
 проходит "транзитом" через сетевую подсистему HN два раза, заныривая
 по пути в виртуалку GW. И это обстоятельство может привести к каким-то
 ошибкам (багам) в районе nat'a, потому что для nat'a существеннен факт
 принадлежности пакета уже установленной коннекции.

 Для диагностики этого дела можно дополнить tcpdump и трассировку цепочек
 мониторингом коннекций. Запускайте conntrack -E (-n, -g, -j), кроме того,
 можно нашинковать цепочки iptables логгированием (-j LOG) состояний
 контрака, чтобы выяснить, в какой момент коннекция регистрируется ядром,
 где она переходит из NEW в ESTABLISHED и т.д. Возможно, тогда станет
 ясно, почему в POSTROUTING она неправильно обрабатывается.

> пользователь с ноутом, на котором настроен почтовый клиент, который
> подключается к серверу по имени mail.company.com.
> Он всегда будет получать внешний адрес mail.company.com и пытаться к
> нему подключиться.
> Из внешней сети он нормально будет работать. Из внутренней - нет.

 Вообще говоря, в случае стандартной конфигурации шлюза подключение
 через внутренний интерфейс по внешнему адресу должно работать.

> Можно нагородить костылей в виде заворачивания всех dns-запросов к себе
> и отдавать локальные адреса локальным пользователям, используя view в
> bind, но чем оно лучше?

 Для вьюшек не нужно заворачивать запросы на шлюзе, достаточно просто
 иметь собственный dns. :) Вьюшки это настолько полезный и удобный
 функционал, что я просто не представляю, как без них жить... Но это
 отдельный вопрос, никак не связанный с багами nat'а, a чем вьюшки
 лучше nat'а -- ну, наверное тем же, чем тёплое лучше мягкого. :)
-- 
 Eugene Berdnikov


Reply to: