1

Итак, задача - настроить локальный DNS.
Взят стандартный BIND, на нем поднят кэширующий DNS-сервер. Нут и master-сервер, для поддержки компьютеров локальной сети. Имя DNS-домена, имеющегося в Интернете в настоящее время, скажем, будет corp.ru. Домен локальной сети, не мудрствуя,  назовем local.corp.ru.  Под это дело и произведена настройка "локального" DNS-сервера. Прямая зона описана без затей:

$TTL 38400
local.corp.ru. IN SOA iNetServer. root.iNetServer.local.corp.ru. (
2010031701 ; serial
108000 ; refresh
1800 ; retry
1209600 ; expiry
604800)

local.corp.ru.         IN NS     iNetServer.
mail.local.corp.ru. IN A      192.168.42.2 ; HELO/EHLO = mail.corp.ru 
local.corp.ru.         IN MX 30  iNetServer.local.corp.ru.
local.corp.ru.        IN TXT    "v=spf1 a:mail.corp.ru -all"

iNetServer        IN A        192.168.43.2
FileServer        IN A        192.168.43.4
DBServer          IN A        192.168.43.6
Server2003        IN A        192.168.43.9
Server            IN A        192.168.43.3
www               IN CNAME    iNetServer

Естественно, что запрос nslookup -type=mx local.corp.ru выдает нам искомое имя iNetServer.local.corp.ru.

В настоящее время почта конторы собирается до кучи на сервере провайдера и забирается  для раздачи юзерям программой M-Daemon. Поставлена задача перенести этот почтовый сервер на свои ресурсы, то есть на iNetServer.local.corp.ru. Как это сделать в Интернете я представляю, надо сделать на нашем роутере со статическим белым IP-адресом "виртуальный" почтарь, открыть по NAT доступ к 25му порту iNetServer и поросить провайдера внести в глобальный DNS нужную MX запись на адрес нашего роутера. За пару суток оно расползется по всему миру.

А вот что надо вписать в локальную прямую зону, чтобы локальный запрос к локальному DNS-серверу
nslookup -type=mx corp.ru выдавал нам тоже iNetServer.local.corp.ru я не очень представляю.  Сделал запись

corp.ru.         IN MX 30  iNetServer.local.corp.ru. 

и рестартовал bind. Но эту запись перебивают значения глобального DNS и nslookup возвращает хосты провайдера.
Коллеги, научите, как настроить правильно локальный DNS, чтобы в нем запрос к MX-записи "глобального" домена возвращал локальный сервер, а в Интернете, при этом - глобальная MX запись показывала на наш статичный IP.  Как поставить приоритет локального DNS перед глобальным кэшем?

2

Cruiser78 пишет:

Как поставить приоритет локального DNS перед глобальным кэшем?

такое чудо не ведомо мне.

уточнение - это только локальный ДНС? или провайдер отдаст вам управление зоной corp.ru полностью?
блин пять раз перечитал и окончательно запутался в объяснениях.

тк, судя по IP сервер локальный кеширующий только. ок, в чем проблема?
у провайдера 2 ДНС
он делает так:

corp.ru.         IN MX 30  iNetServer.local.corp.ru.
и
в файле 43.168.122..in-addr.arpa.
2 PTR  iNetServer.local.corp.ru.

ок, ваша проблема только открыть порт 25 на роутере и натить в локалку.
представляться  iNetServer.local.corp.ru но иметь локальный IP.
у себя нарисовать

local.corp.ru.         IN MX 30 локальный IP iNetServer.local.corp.ru

и открыть приём с локального IP.

это всё что я смог понять из вашей аллегории, поправьте пожалуйста

3

system-root пишет:

такое чудо не ведомо мне.

Если бы оно было ведомо мне, разве я бы спрашивал?

system-root пишет:

уточнение - это только локальный ДНС? или провайдер отдаст вам управление зоной corp.ru полностью?

Нет, зона corp.ru остается под управлением провайдера. Там еще наш веб-сервер на хостинге сидит. А тащить его к себе я не готов. Технически. Каналы у нас ADSL, а это значит, что вход не равен выходу по пропускной способности. Пусть веб сидит у провайдера на его скоростных линиях. А вот почтовый сервер надо забрать себе. Со стороны провайдера это делается просто:

corp.ru.         IN MX 30  IP нашего router'а 
и, соответственно подправить в обратной зоне.

На роутере тоже проблем организовать входящий доступ серверу с серым, локальным, адресом нет.
Проблема в том, что локальные пользователи дожны видеть MX запись локального уже сервера DNS corp.ru, показывающую не на внешний интерфейс нашего роутера, а на iNetServer.local.corp.ru

system-root пишет:

тк, судя по IP сервер локальный кеширующий только. ок, в чем проблема?

Нет, не только кэширующий. Кэширующий прокидывает вовнутрь только глобальный DNS и не заботится о внутреннем резолвинге. Так? А мастер-сервер как раз поддерживает внутренние зоны и может, по потребности, обратиться к кэшу. Верно? То есть у меня, в этих терминах, кэширующий мастер-сервер. Есть еще и slave-сервера, которые с него информацию тянут. И проблема в том, чтобы записать в локальной зоне имя глобальное и перебить этой записью запись в кэше. 

system-root пишет:

у провайдера 2 ДНС он делает так:
corp.ru.         IN MX 30  iNetServer.local.corp.ru.
и в файле 43.168.122..in-addr.arpa.
2 PTR  iNetServer.local.corp.ru.

И куда пойдет почта интернетная? В Инете же не может быть "local"-ов. iNetServer.local.corp.ru - это локальный компьютер, сидящий на сером адресе, к которому я буду натить с белого адреса роутера. То есть провайдер должен записать то, что я написал выше в этом спиче.

system-root пишет:

у себя нарисовать

local.corp.ru.         IN MX 30 локальный IP iNetServer.local.corp.ru

и открыть приём с локального IP.

Ну, так оно и нарисовано. Прямая зона в старттопике лежит.
Но как будет работать локальная почта, которая должна иметь доменное имя corp.ru, а не local.corp.ru?
я полагаю, что для работы локальной почты запрос к локальному DNS nslookup -type=mx corp.ru должен возвращать адрес локальный, серый, а не белый, роутера. А белый адрес должен возвращаться вопрошающим из сети Интернет.
А если я оставляю в локальном DNS MX-запись local.corp.ru.         IN MX 30.... то адрес почтаря мне вернется по запросу не corp.ru, а local.corp.ru. А я этого не хочу.

4

ок, фиг с ними, с именами, я путаюсь.
будем думать в абстракциях IP:
в локалке пользователь запрашивает MX corp.ru
DNS в локалке отвечает corp.ru IN MX 30 приватный_IP_почтовика

в интернете пользователь запрашивает MX corp.ru
получает то что отдаст провайдер.

и какгбы где подвох? в чем проблема? создайте зону corp.ru у себя, но всё что у вас имеет приватный_IP там замените и всё.

а у вас зона (внимание) local.corp.ru., как вы можете жить  с этой зоной без corp.ru?? все записи local должны существовать в corp.ru. никак иначе вы не можете отправить локального пользователя запросившего MX corp.ru вообще куда-то

я сейчас понял? всё равно путаюсь

5

system-root пишет:


будем думать в абстракциях IP:

Абсолютно верное понятие в этих абстракциях.

system-root пишет:


и какгбы где подвох? в чем проблема? создайте зону corp.ru у себя, но всё что у вас имеет приватный_IP там замените и всё.

Подвох в том, что я хочу забрать их зоны corp.ru только один "хост", одну только почтовую службу. У меня нет проблем поднять зону в ЛВС corp.ru и она будет тогда перебивать зону глобальную. Но в глобальной зоне (у провайдера) у меня остается еще ряд сервисов. И локальные пользователи должны получать на них глобальные адреса. Я не хочу иметь проблем с юзерями, если провайдер решит передвинуть наши сервисы на новые IPшники. Это его право.  Но если, при этом, я продублирую "глобальную" зону у себя, то неизбежно поимею проблемы в таком случае. Я их хочу избежать заранее.
Хотя этот вариант работоспособен и я его проверял. Но он мне не понравился. Хотя, может иного варианта и не будет.

system-root пишет:

а у вас зона (внимание) local.corp.ru., как вы можете жить  с этой зоной без corp.ru?? все записи local должны существовать в corp.ru. никак иначе вы не можете отправить локального пользователя запросившего MX corp.ru вообще куда-то

А вот здесь у меня совсем иное мнение. Записи local не должны светиться в corp.ru совершенно.  В corp.ru должны сидеть адреса "глобальные", которые должны быть видны всему миру. А вот сколько я сделаю под этим corp.ru local'ов - хоть тыщу - это мое дело и не дело светить локальные адреса-имена (тем более на серых адресах) всему миру.
А отправить куда нужно - главное ответить правильно на запрос: если спрашивают из Инета, то инетный адрес, если из интранета - то интранетный. А дальше сервисы сами разберутся что, кого и куда послать.

6

Cruiser78 пишет:

В corp.ru должны сидеть адреса "глобальные", которые должны быть видны всему миру

ваш ДНС не авторитетен для каких либо зон, вы не можете/да права не имеете отдавать зоны в интернет, а значит я не вижу проблемы в поднятии зоны corp.ru, кроме

Cruiser78 пишет:

если провайдер решит передвинуть наши сервисы на новые IPшники

но есть одно НО, провайдер сделает это только предупредив.

вы можете на создавать хоть тыщу доменов хоть пятого уровня для зоны corp.ru, только прислушайтесь сейчас и взвесьте.
что проще, управление всеми локальными доменами для зоны corp.ru именно из файла самой зоны
или
придумать костыль чтоб не создавать зону  corp.ru но как то отправлять пользователей туда если они запросят эту зону. плюс у вас еще тыща доменов пятого уровня - ими тоже нужно иногда заниматься.



моё видение:
вы создаете зону corp.ru
дублируете туда настройки с ДНС провайдера
меняете прямой IP почтовика на локальный
внутри уже дописываете описание всей локальной сети


как это будет работать?
пользователь запрашивает какой нибудь iNetServer.local.corp.ru
локальный ДНС смотрит у себя зону corp.ru
находит
переходит к  iNetServer.local IN блаблабла
отдает блаблабла


свечение вашего днс всему интернету? так вы сказали у вас роутер, если вы не прокинете 53 порт, то до вашего ДНС не будет доступа с наружи
если вы скажете ДНС слушать только локальный IP, то даже с прямым доступом в интернет он не ответит постороннему


ну и изредка если провайдер гад меняет IP служб, синхронизировать их у себя.

ваши возражения?

7

system-root пишет:

ну и изредка если провайдер гад меняет IP служб, синхронизировать их у себя.

ваши возражения?

Вот собственно это (провайдер-гад) и есть основное возражение. А делать локальной копией глобальную зону и менять в ней нужные адреса на свои, на нужные локальные - я делал. Это работает и глобальную зону кэша в локалке перебивает на раз. Но, вроде это не самое красивое решение - перебивать всю зону. Хотелось бы только по сервисам нужным перебивать...

8

Cruiser78 пишет:

Но, вроде это не самое красивое решение - перебивать всю зону.

я не понимаю где будет перебиваться, если провайдер пишет
сервис IN A IP_провайдера
и вы пишите
сервис IN A IP_провайдера
то где перебивание?
ну вот пример:
у провайдера:

$TTL 86400;
mydomain.ru.    IN    SOA    ns.mydomain.ru. почта_админа.mydomain.ru. (
2009090909
10800
3600
604800
1200 )

A IP_провайдера

NS ns.mydomain.ru. 
NS ns2.mydomain.ru. 

MX 10 webmail

www     A  IP_провайдера

ns     A    IP_провайдера
ns2     A    IP_провайдера
mx     A    IP_провайдера
mx     MX    10 mx
ftp     cname www

а у вас

$TTL 86400;
mydomain.ru.    IN    SOA    ns.mydomain.ru. почта_админа.mydomain.ru. (
2009090909
10800
3600
604800
1200 )

A 10.2.21.100

NS ns.mydomain.ru.
NS ns2.mydomain.ru.

MX 10 webmail

www     IP_провайдера0

ns     A    IP_провайдера
ns2     A    IP_провайдера
mx     A    IP_локальной_машины
mx     MX    10 mx
ftp     cname www

ну и где тут перебивание?
добавьте в эту зону

local         IN NS     iNetServer.
mail          IN A      192.168.42.2 ; HELO/EHLO = mail.corp.ru 

local         IN TXT    "v=spf1 a:mail.corp.ru -all"

iNetServer.local       IN A        192.168.43.2
FileServer.local        IN A        192.168.43.4
DBServer.local         IN A        192.168.43.6
Server2003.local     IN A        192.168.43.9
Server.local             IN A        192.168.43.3
www.local               IN CNAME    iNetServer

и всё чикипуки