none
Как заставить ДНС выдавать в ответ на запрос только определенный IP-адрес? RRS feed

  • Вопрос

  • Ситуация. Есть лес. Родительский домен - Папа. Два дочерних домена - Сына и Доча. Соединены с Папой и между собой через маршрутизаторы. Тут все хорошо. Все друг друга видят и реплицируются. Проблемная у нас Внуча. Она соединены с Дочей через коммутатор. Контроллеры домена у Внучи имеют по два сетевых интерфейса. Один в сети 10.10.10.3, второй в сети 192.168.1.1. Сеть 10.10.10.3 доступна с любого другого контроллера домена в лесу. Сеть 192.168.1.1 недоступна ниоткуда. Проблема заключается в том, что когда происходит DNS-запрос IP-адреса Контроллера домена Внучи со всех остальных КД в лесу, в ответ получаем оба IP-адреса. Из обоих подсетей. Причем ответ выдается раундробином. То есть создается впечатление, что домен Внуча то доступен, то нет.

    Вопрос. Как сделать так, чтобы при запросах со всех контроллеров домена DNS сервер Внучи выдавал только адрес из подсети 10.10.10.3?


    • Изменено Kostiki Dmitriev 8 сентября 2015 г. 6:27 Добавил картинку
    8 сентября 2015 г. 6:26

Ответы

  • Выключать Round Robin не требуется: он меняет адреса местами только внутри одной группы адресов - из локальной для клиента продсети и не из локальной - на которые разбивается список адресов с помощью Netmask Ordering.

    А вот что считать локальной подсетью для клиента (точнее, маску этой подсети) - это можно настроить. По умолчанию локальной подсетью для клиента считаются адреса из значения записей А, совпадающие в первых 24 битах с адресом клиента, с которого отправлен запрос. Это соответствует маске 0x000000ff в шестнадцатеричном виде (биты установленные в 0 входят в маску, в 1 - нет). Изменить эту маску можно через параметр LocalNetPriorityNetMask (он документирован здесь) - например, командой

    dnscmd /config /LocalNetPriorityNetMask новая_маска

    или через Powershell (через графический интерфейс этот параметр не меняется).

    В качестве примера: маска, включающая в определение подсети только первый октет (группу цифр до точки) IP-адреса имеет значение 0x00ffffff и команда будет выглядеть

    dnscmd /config /LocalNetPriorityNetMask 0x00ffffff

    После выдачи этой команды Netmask Ordering для всех клиентов с адресами 10.x.y.z будет выдавать первым адрес "Внучи" 10.10.10.3, а для клиентов с адресами 192.x.y.z - 192.168.1.1.

    Параметр, естественно, нужно поменять на всех серверах MS DNS, к которым может быть направлен запрос адреса "Внучи".

     PS Некоторые интересные подробности можно найти вот в этой записи в блоге Technet (на английском).

     


    Слава России!



    • Изменено M.V.V. _ 8 сентября 2015 г. 14:34
    • Помечено в качестве ответа Kostiki Dmitriev 8 сентября 2015 г. 15:10
    8 сентября 2015 г. 14:32

Все ответы

  • выдается все правильно

    У внучи то реально 2 адреса

    правильно было бы маршрутизацию выкинуть на коммутатор (если он такое умеет), или на маршрутизатор на внуче сделать одну сетевуху и вопрос отпадет сам собой


    The opinion expressed by me is not an official position of Microsoft

    8 сентября 2015 г. 6:36
    Модератор
  • Это конечно хорошо. Но тогда маршрутизацию мне придется делать не только на коммутаторе, но протягивать ее через все маршрутизаторы, коих конечно же больше двух и раскиданы они по всей нашей родине.

    Неужели нет способа заставить ДНС отдавать определенный IP адрес в зависимости от подсети, с которой пришел запрос? Вроде бы как Microsoft обещал такую вещь сделать в 2016 сервере. Но не очень хочется ждать его выхода :)


    8 сентября 2015 г. 6:57
  • Вы можете в конфигурации TCP/IP на серверах с двумя сетевыми адаптерами настроить только одно из двух подключений, так чтобы оно регистрировало свой IP-адрес в DNS (на другом сбросить флажок Register this connection's address in DNS). Соответственно в DNS-запросе будет выдаваться только один IP-адрес.

     
    8 сентября 2015 г. 9:44
    Модератор
  • Вы можете в конфигурации TCP/IP на серверах с двумя сетевыми адаптерами настроить только одно из двух подключений, так чтобы оно регистрировало свой IP-адрес в DNS (на другом сбросить флажок Register this connection's address in DNS). Соответственно в DNS-запросе будет выдаваться только один IP-адрес.

     

    В таком случае отвалится или Доча или Внуча в зависимости от того какой адрес из ДНС убрать

    The opinion expressed by me is not an official position of Microsoft

    8 сентября 2015 г. 9:52
    Модератор
  • ГЫ только заметил что на картинке у Дочи и Внучи одинаковые адреса, хотя наверное подразумевались одинаковые сети

    Вместо 10.10.10.1(2,3) нужно 10.10.1(2,3).0


    The opinion expressed by me is not an official position of Microsoft


    8 сентября 2015 г. 9:56
    Модератор
  • В таком случае отвалится или Доча или Внуча в зависимости от того какой адрес из ДНС убрать

    В общем случае, согласен. Но тогда можно отключить регистрацию в DNS подключения с адресом 192.168.1.1, включить на этом же сервере маршрутизацию IP-пакетов между сетевыми интерфейсами, а недоступность других сетей настроить средствами Windows Firewall.

    Либо, что, может быть даже лучше, отключить на DNS-сервере Round Robin и включить Netmask Ordering.

    8 сентября 2015 г. 10:22
    Модератор
  • Либо, что, может быть даже лучше, отключить на DNS-сервере Round Robin и включить Netmask Ordering.

    Вот это интересно. Попробовал. Разочаровался. Подскажите, мои руки кривые, или это так и есть.

    Выключил Round Robin на контроллерах домена Внучки. Включил Netmask Ordering на этих же контроллерах. Теперь nslookup Внучка IP_Внучки с компьютера Дочки мне первым выдает IP адрес из сети Дочки. С компьютера Внучки соответственно тоже все правильно выдается.

    НО! nslookup Внучка IP_Дочки все равно продолжает выдавать адрес RoundRobinom. Ибо на ДНС-серверах Дочки RoundRobin остался быть включенным. Выключать RoundRobin на всех DNS серверах в лесу не хочется.

    ДНС в сети настроен следующим образом. На Дочке стоит условная пересылка. Если запрос пришел с именем Внучки, то запрос пересылается на DNS Внучки и полученный ответ отдается клиенту ДНС-сервером Дочки.

    Вопрос: Это так и есть, или я что-то не донастроил?


    • Изменено Kostiki Dmitriev 8 сентября 2015 г. 12:34 Уточнил
    8 сентября 2015 г. 12:14
  • Попробуйте с целью тестирования настроить и другие ваши DNS-сервера аналогичным образом (отключить Round Robin и включить Netmask Ordering).
    8 сентября 2015 г. 13:19
    Модератор
  • Этот тест провел. Так и есть. Выключаю Round Robin на Дочке, включаю там Netmask Ordering. Соответственно запрос с компа из домена Дочки и в ответ первым всегда получаю адрес из сети Дочки. Но запрос с компа Папы все равно получает ответ раундробином :(
    8 сентября 2015 г. 14:13
  • Выключать Round Robin не требуется: он меняет адреса местами только внутри одной группы адресов - из локальной для клиента продсети и не из локальной - на которые разбивается список адресов с помощью Netmask Ordering.

    А вот что считать локальной подсетью для клиента (точнее, маску этой подсети) - это можно настроить. По умолчанию локальной подсетью для клиента считаются адреса из значения записей А, совпадающие в первых 24 битах с адресом клиента, с которого отправлен запрос. Это соответствует маске 0x000000ff в шестнадцатеричном виде (биты установленные в 0 входят в маску, в 1 - нет). Изменить эту маску можно через параметр LocalNetPriorityNetMask (он документирован здесь) - например, командой

    dnscmd /config /LocalNetPriorityNetMask новая_маска

    или через Powershell (через графический интерфейс этот параметр не меняется).

    В качестве примера: маска, включающая в определение подсети только первый октет (группу цифр до точки) IP-адреса имеет значение 0x00ffffff и команда будет выглядеть

    dnscmd /config /LocalNetPriorityNetMask 0x00ffffff

    После выдачи этой команды Netmask Ordering для всех клиентов с адресами 10.x.y.z будет выдавать первым адрес "Внучи" 10.10.10.3, а для клиентов с адресами 192.x.y.z - 192.168.1.1.

    Параметр, естественно, нужно поменять на всех серверах MS DNS, к которым может быть направлен запрос адреса "Внучи".

     PS Некоторые интересные подробности можно найти вот в этой записи в блоге Technet (на английском).

     


    Слава России!



    • Изменено M.V.V. _ 8 сентября 2015 г. 14:34
    • Помечено в качестве ответа Kostiki Dmitriev 8 сентября 2015 г. 15:10
    8 сентября 2015 г. 14:32
  • Вы не управляете родительским доменом, не можете внести там аналогичное изменение?

    8 сентября 2015 г. 14:32
    Модератор
  • От все-таки плохо, когда за дело берется деревенский сисадмин (это самокритика :)). Неделю голову ломаю. И вот забыл совсем, что маска то у Дочи используется 23 бита, а для раундробина маска по умолчанию 24 бита. Выставил на Доче и Внуче маску 16 бит. Стало все хорошо. Типерь осталось сделать тоже самое на всех ДНС серверах в лесу.

    Может кто-нить подскажет, как сие изменение можно сделать групповой политикой? Желательно одной, чтобы она распространилась сразу на весь лес.

    8 сентября 2015 г. 15:15
  • Через Computer Configuration/Preferences/Windows Settings/Registry

    Hive: HKEY_LOCAL_MACHINE

    Key Path: SYSTEM\CurrentControlSet\Services\DNS\Parameters

    Value Name: LocalNetPriorityNetMask

    Value Type: REG_DWORD

    Value Data: то, что вы в команде указали  


    Слава России!

    8 сентября 2015 г. 15:28