LINUX.ORG.RU
ФорумAdmin

Bind9 локальная сеть

 , ,


0

1

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

У меня стоит сейчас задача настроить тестовый стенд локальной сети для учебного проекта.

Я настроил зону ns1.virtuallity. Именно зону. Настроил к ней ns1 на виртуальной машине с bridge режимом у сетевого адаптера. Ip адрес сети 192.168.24.0/24 Днс стоит на 192.168.24.200

Запись Soa ns1.virtuallity Первая запись ниже: @ in ns ns1.vivrutallity ns1.virtuallity in a 192.168.24.200

Arpa для сети 192.168.24.0/24 создана для базовой ns записи.

Данная часть при пинге изнутри и внешней машины, на которой стоит гипервизор пингуется/откликается хорошо, как через ping, так и nslookup.

Далее у меня возникли некоторые затруднения. Задача стоит в том, чтобы резолвить имена только в частной сети и только для этого конкретного домена и вебморд, а также тестовых контейнерных приложений. Например для conatainer1 с ip 192.168.24.150.

Я задаю записи, делаю затычки dummy на дебиане для проверки - пингуются и отвечают на лукап.

В роутере микротик вписан днс и отключено use peer dns. Роутер записан для сети записью router in a 192.168.24.1 Nslookup показывает вроде бы окнорм, но стоит зайти по имени router.virtuallity - эффекта нет. Меня перекидывает в гугл. На настройках DHCP мирота стоит днс только мой локальный, но бинд разолвит все в интернет.

Например я делаю вторую вм, задаю ей потенциальный домен dogs в записях зоны: Dogs.virtuallity in a 192.168.24.100

Сетевому интерфейсу через systemd unit присваиваю этот же ip адрес при запуске.

На dogs.virtuallity я конфигурую базовый Nginx с веб мордой для сайта default. Чисто для теста. Слушать его заставляю свой dogs.virtuallity. Стоит мне сделать запрос с другой физической машины. Да и даже с той, где развернут гипервизор - меня все равно кидает в гугл, потому что бинд резолвит все как-то туда.

При этом nslookup на запрос хоста dogs.virtually отвечает его ip адресом. Dogs.virtuallity тоже пингуется через ping отовсюду из локальной сети, как и надо.

Это у меня с bind проблема ?

Плюс я немного не понимаю как в файлах зоны создавать домены со ссылкой на основную зону. Особо в официальной документации бинда об этом мало где пишут.

Например у меня есть корневая зона .virtuality Как мне на ней создать записи домена? Домен ж не равен зоне. Зона это конкретно зона.

Плюс не особо понимаю, как внести www. Пробовал через cname запись по типу Www.dogs.virtuallity cname dogs.virtuallity, Отразило оба имени. Это единственный способ или есть другие ?

Плюс опять же: использовать отдельную вм для локального днс, а другую вм для веб морды - тоже так себе удовольствие.

У меня есть идеи о пробросе еще одной виртуальной сети типа 10.0.12.0/24 для докер контейнеров. Но как тогда бинду задать ссылку для контейнера докер ?) Я вот сделал интерфейс, настроил проброс в контейнер. По ip все ок работает, а вот по домену - запрос уходит в гугл 🤦‍♂️

Запись для контейнера выглядит Container1.virtuallity in a 10.0.12.20 Обратная зона для сети создавалась, но есть нюанс, nslookup имея эту зону говорит, что я мол неправ, и нет такого счастья - я не знаю его. Для прямой зоны запись стоит прям в файле зоны ns1.virtuallity

Машина использует дебиан12 и bind последней stable версии для него.

Файл resolv.conf на вм с биндом отредактирован по типу: Domain ns1.virtuallity Nameserver 192.168.24.100

На машине с веб мордой не трогал resolve.conf

Как вообще правильно задать домен для зоны? Можно ли биндом резолвить на 1 машину домен dogs.virtuallity www.dogs.virtuallity mail.dogs.virtuallity ну и прочие srv с указанием service name protocol in a ip тот же самый, что и для домена.

Плюс такой момент: можно ли как-то зону, что предназначена для ns1.virtuallity - оставить без лишних записей? Все остальное делать например через какой-нибудь include(вроде слышал, что так делают). Или через что-то еще в отдельном файле с данными указывать ссылку, что корневой зоной будет virtuallity, а вот в отдельном файле .db будет лежать как раз информация о машинах, которые будут использованы в рамках .virtuallity и их доменных именах. Только например в упрощенном формате Dogs - чтоб сразу ссылался на dogs.virtuallity Www cname dogs - чтобы сразу принимало значение www.dogs.virtualllity Ну и так далее. Плюс что важно, как я обозначал - делать резольв именно на 1 машину из второго файлика. Например на машину направить основой домен, его www, почту. Ну и плюс как-то также создать резольв через 3 файлик для домена 3 уровня. Например какой-нибудь lab.dogs.virtuallity Документация у бинда интересная, но я уже 10 дней пытаюсь понять как это сделать, а особо инфы нет. А 3 важных вопроса все еще актуальны.



Последнее исправление: lormi99 (всего исправлений: 1)

Задача стоит в том, чтобы резолвить имена только в частной сети и только для этого конкретного домена и вебморд, а также тестовых контейнерных приложений

  • allow-query
  • allow-recursion

Например для conatainer1 с ip 192.168.24.150.

Контейнеры используют тот dns сервер, который указан в настройках container runtime (для k8s). docker обычно - dns хоста, на котором запускается

но стоит зайти по имени router.virtuallity - эффекта нет. Меня перекидывает в гугл.

Это браузер. Если то, что ты написал, похоже на url - попробует обратиться. Если нет - будет искать

Не забывай указывать протокол, чтобы это был url

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

Надеюсь ты понимаешь, что запрос с другой машины должен как-то попасть на твой bind? DNS - иерархическая система. Если тебе никто не делегировал зону, то твой неофициальный сервер тебе придётся вручную указывать в resolv.conf на других хостах

При этом nslookup на запрос хоста dogs.virtually отвечает его ip адресом. Dogs.virtuallity тоже пингуется через ping отовсюду из локальной сети, как и надо.

Опять же, протокол в браузере. domain и search в resolv.conf

Плюс я немного не понимаю как в файлах зоны создавать домены со ссылкой на основную зону. Особо в официальной документации бинда об этом мало где пишут.

Никак. Адрес DNS верхнего уровня никак не указывается. Наоборот, на вышестоящем DNS тебе нужно явно делегировать зону

Почитай про делегирование зоны в named (bind)

Обратная зона для сети создавалась, но есть нюанс, nslookup имея эту зону говорит, что я мол неправ, и нет такого счастья - я не знаю его.

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

Как вообще правильно задать домен для зоны?

WAT? Зона - это какой-либо домен, делегированый твоему серверу.

router ★★★★★
()

если что, зона делегируется примерно так:

# твоя зона
$ORIGIN domain.com.

# ...
# какие-то адреса в твоей зоне
# ...

ns2 IN 192.168.1.2

; делегируешь дочернюю зону кому-то другому
$ORIGIN user1.domain.com.
@   IN  NS  ns2.domain.com
        NS  ns1.user1.org.
router ★★★★★
()
Ответ на: комментарий от router

Я добавил для контейнеров новую сеть. Настроил маршрутизацию. Прописал обратную зону, но поскольку днс имеет один ns сервер, то выходит так, что при обращение к ip адресу выводится его домен. Если же по домену обращаться, то выходит так, что server faild. В документации к бинд читаю информацию - не могу найти как настроить для второй подсети.

lormi99
() автор топика
Ответ на: комментарий от router

Попробовал делегировать по такому принципу. Bind9 последней версии выдает ошибку при загрузке зоны, ссылаясь на недопустимость. Я ж верно понимаю, что ns сервера в случае делегирования надо разносить на отдельные машины или запускать 2 контейнера с разными настройками IP? И при этом прикручивать еще и для каждого домена 3 уровня отдельный IP ? Тк при попытках обратиться к тому же гитлабу - получаешь ошибку разрешения имен, хотя гит по умолчанию слушает 80 и 443 порты. Nslookup при этом выдает, что имя резолвится ок. Все гайды в интернете уже облазил. Все варианты пробовал и все равно получается билеберда. Nginx при этом ок настроен, ибо я переносил его уже на внешний домен для теста. Там все хорош, а на внутреннем днс проблемы.

lormi99
() автор топика
Ответ на: комментарий от lormi99

Попробовал делегировать по такому принципу. Bind9 последней версии выдает ошибку при загрузке зоны, ссылаясь на недопустимость.

Что ты под этим имеешь в виду? Загрузка зоны (передачи) с другого DNS сервера или запуск с твоим файлом зоны? Покажи сообщение об ошибке.

Я ж верно понимаю, что ns сервера в случае делегирования надо разносить на отдельные машины или запускать 2 контейнера с разными настройками IP

В идеале да, но у тебя же твоя локальная сеть, хватит и одного.

Где у тебя bind запущен, в контейнере или на хост системе?

Тк при попытках обратиться к тому же гитлабу - получаешь ошибку разрешения имен, хотя гит по умолчанию слушает 80 и 443 порты.

Ты в настройках контейнера gitlab, если он в контейнере, прописал этот DNS сервер?

Ничего не понятно, опиши схему. Кто и откуда заходит, где и что запущено, в контейнерах или нет и что прописано в качестве DNS сервера в настройках сети везде.

anonymous
()
Ответ на: комментарий от anonymous

Давай опишу. Есть виртуальная машина Vmvare режим bridge. ip 192.168.88.253 Включена статика юнитом Vmvare, как гипервизор 2 типа поверх виндовс. Есть система Debian 12, которая поднята в Vmvare.ее ip я уже указал.

Контейнеры пока что уберем, ибо их трогать считаю пока рано, ибо проблема есть поверх дебиана. Bind 9 поднят на ip 192.168.88.253.

Создана зона .virt Я ее уже 30 раз перенастраиваю, потому нет смысла публиковать конфиги зоны, ибо я в них уже потерялся.

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

Задача стоит для тестового бинда сделать хост зону .virt Поверх нее развернуть домен 2 уровня. Например example.virt И поверх этого сделать еще один 3 уровень для git.example.virt. Я тут уже с гпт обсуждал варианты - она мне давала кучу конфигов. Суть одна и та же: получается настроить только 1 запись на 1 ip. Те например если я размещаю ns1.virt на IP 192.168.88.253 То разместить поверх него домен 2 уровня уже не получается. Nslookup пишет, что server faild. До 3 домена вообще добраться не могу. Типы в гайдах пишут разное. Кто-то пишет про то, что нужна куча серверов, чтоб такое реализовать, кто-то про делегирование, которое при попытках воспроизвести - не работает. Кто-то вообще какие-то записи выкладывал, где ошибка mxdomain(домен не найден, как я понял). Если делать только запись для хост зоны .virt и ее ns1.virt на ip 192.168.88.253 - nslookup и ping нормально проходят по локальной сети, а все, что пытаюсь дальше настроить - бесполезно. Nginx локальный домен слушает ок. Проксирует ок, проверил на внешнем ip и домене. А с локальным бредятина получается, потому что никак не выходит второй уровень домена и уровень повесить на 1 и тот же IP. Мне уже кажется, что это какая-то нереальная задача)

lormi99
() автор топика
Ответ на: комментарий от lormi99

/etc/bind/db.virt

$TTL    1d ; default expiration time (in seconds) of all RRs without their own TTL value
@       IN      SOA     ns1.virt. root.virt. (
                  3      ; Serial
                  1d     ; Refresh
                  1h     ; Retry
                  1w     ; Expire
                  1h )   ; Negative Cache TTL

; name servers - NS records
     IN      NS      ns1.virt.

; name servers - A records
ns1.virt.   IN      A       192.168.88.253

server1           IN      A       192.168.88.10
server1.domain2   IN      A       192.168.88.20

/etc/bind/named.conf.local

//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";


zone "virt" {
        type master;
        file "/etc/bind/db.virt";
        allow-query { any;};
};

/etc/bind/named.conf.options

acl "int" {
        192.168.88.0/24;
};


options {
        directory "/var/cache/bind";

        allow-query { int ; 172.0.0.0/8; };

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                8.8.8.8;
        };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation no;
        allow-recursion { int; };
        #listen-on-v6 { any; };
};

Проверяем

nslookup server1.virt. 192.168.88.253
nslookup server1.domain2.virt. 192.168.88.253
nslookup server1.virt. 192.168.88.253
dig ns virt. @192.168.88.253
dig ns domain2.virt. @192.168.88.253
dig server1.virt @192.168.88.253
anonymous
()
Ответ на: комментарий от anonymous

Хм…ns1 мы вешаем на ту же машину, где стоит бинд, а два вот этих server1 и domain1: мы их куда направляем, на виртуальные порты на той же машине или на другой хост ? Я мб чего-то не понимаю. Server1.virt - это у нас разве не хост ? У меня nslookup вернул по запросу, что vm1.virt на .10 адресе. git.vm1.virt Соответственно тоже на .20 адресе. В обратной зоне PTR стоят на те же адреса .253 .10 и .20. Как итог вот с этой проблемой и воюю) Настраивал также и до этого) Возвращает всегда любой другой адрес, кроме .253, а задача стоит на .253 все повесить. Если ставить .253 на обратной зоне на ns1.virt, vm1.virt и на git.vm1.virt - прилетает server faild. Или обратную зону для локалки делать не надо?

lormi99
() автор топика
Ответ на: комментарий от lormi99

Хм…ns1 мы вешаем на ту же машину, где стоит бинд

В протоколе DNS есть разные типы записей:

  • NS - запись, указывающая доменное имя сервера, который держит зону, в зоне должна быть сооответствующая A запись для данного доменного имени.
  • A - запись, указывающая соответствие доменного имени и IPv4 адреса
  • CNAME - указатель на другие A записи
  • MX - запись указывающая доменное имя и приоритет выбора почтового сервера для почтового домена;
  • TXT - различные текстовые записи;
  • PTR - запись, указывающая соответствие IPv4 адреса доменному имени, т.е. A записи. Для каждого IP адреса PTR запись может быть только одна не может задаваться соответствие обратного преобразования, что один IP адрес указывает на несколько A записей, доменных имён.
  • прочией записи.

В итоге, если ты настраиваешь DNS сервер, который держит зону, то в NS записи указываешь его доменное имя и создаёшь A запись с указанием на его же IP адрес. Если хочешь указать несколько DNS серверов, которые будут держать DNS зону, то указываешь несколько NS записей и для каждой NS записи создаёшь свою A запись с указанием соответствия доменных имён DNS серверов.

Если ты хочешь делегировать поддомен sub1.virt на другие DNS серверы - описываешь зону sub1.virt, в ней указываешь NS и A записи на нужные другие DNS серверы и IP адреса. На этих других DNS серверах (IP адресах) уже описываешь все записи зоны sub1.virt, в том числе и указываешь NS и соответствующие им A записи на их IPv4 адреса.

а два вот этих server1 и domain1: мы их куда направляем

В примере я указал две A записи:

server1           IN      A       192.168.88.10
server1.domain2   IN      A       192.168.88.20

Это значит, что созданы два DNS имени в зоне virt, а именно:

  • server1.virt будет разрешаться в IP адрес 192.168.88.10
  • server1.domain2.virt будет разрешаться в IP адрес 192.168.88.20, записи поддомена можно указывать в той же DNS зоне, если ты не делегировал её (domain2.virt) на другие DNS серверы.

мы их куда направляем, на виртуальные порты на той же машине

Про какие виртуальные порты ты говоришь? В A записях указывается соответствие доменного имени IP адресу, т.е. создаются доменные имена, какие доменные имена ты создашь и каким адресам ты их сопоставишь - дело твоё.

Server1.virt - это у нас разве не хост ?

server1.virt - доменное имя, указывающее на IP адрес 192.168.88.10.

У меня nslookup вернул по запросу, что vm1.virt на .10 адресе. git.vm1.virt Соответственно тоже на .20 адресе.

Если ты создал такие A записи в зоне:

vm1           IN      A       192.168.88.10
git.vm1   IN      A       192.168.88.20

то всё правильно.

Смотри продолжение ниже.

anonymous
()
Ответ на: комментарий от anonymous

В обратной зоне PTR стоят на те же адреса .253 .10 и .20.

Ничего не понятно. В обратной записи указывается обратное преобразование, IP адресов в DNS, т.е. в A записи. И говорить, что у тебя стоят PTR на 253., 10 и 20 как минимум неправильно и вообще странно. В PTR у тебя стоят указатели:

  • 10 указывает на server1.virt
  • 20 указывает на git.vm.virt

ак итог вот с этой проблемой и воюю)

Я так и не понят с какой проблемой ты воюешь и в чём твоя проблема.

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

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

Создай A записи:

vm1           IN      A       192.168.88.253
git.vm1   IN      A       192.168.88.253

Вместо этого можешь создать CNAME запись, это ссылка с некоторого доменного имени, ссылка на некоторую A запись:

ns1.virt.   IN      A       192.168.88.253

host   IN      A       192.168.88.253
vm1	IN	CNAME	host
gi1.vm	IN	CNAME	host
server2	IN	CNAME	host
server1.domain2	IN CNAME	host

Здесь определяется доменное имя host.virt, указывающее на IP адрес 192.168.88.253 и далее создаются CNAME указатели, ссылающиеся на определённое ранее доменное имя host.virt. Если ты потом изменишь A запись host IN A 192.168.88.253 и укажешь там другой IP адрес, то все определённые ниже CNAME записи будут указывать в итоге на новую A запись и в конце концов на новый IP адрес.

Либо ты можешь определить несколько A записей с указанием на один IPv4 адрес:

ns1.virt.   IN      A       192.168.88.253

host   IN      A       192.168.88.253
vm1	IN	A       192.168.88.253
gi1.vm	IN	A       192.168.88.253
server2	IN	A       192.168.88.253
server1.domain2	IN A       192.168.88.253

Если ставить .253 на обратной зоне на ns1.virt, vm1.virt и на git.vm1.virt - прилетает server faild.

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

Для преобразования доменных имён vm1.virt, git.vm.virt и прочих в IPv4 адреса PTR записи не нужны.

Или обратную зону для локалки делать не надо?

Обратную зону стоит делать, если у тебя есть почтовый сервер и то не всего, если у тебя сложная сеть и ты хочешь в выоде коматры трассировки маршрута видеть DNS имена маршрутизаторов и чтобы узнавать по IP адресу имена серверов, маршрутизаторов, оборудования, но с учётом, что PTR запись для каждого IP адреса может быть только одна.

anonymous
()
Ответ на: комментарий от anonymous

Если ты хочешь делегировать поддомен sub1.virt на другие DNS серверы - описываешь зону sub1.virt, в ней указываешь NS и A записи на нужные другие DNS серверы и IP адреса. На этих других DNS серверах (IP адресах) уже описываешь все записи зоны sub1.virt, в том числе и указываешь NS и соответствующие им A записи на их IPv4 адреса.

Здесь ошибся, правильно так:

$TTL    1d ; default expiration time (in seconds) of all RRs without their own TTL value
@       IN      SOA     ns1.virt. root.virt. (
                  3      ; Serial
                  1d     ; Refresh
                  1h     ; Retry
                  1w     ; Expire
                  1h )   ; Negative Cache TTL

; name servers - NS records
     IN      NS      ns1.virt.

; name servers - A records
ns1.virt.   IN      A       192.168.88.253

server1           IN      A       192.168.88.10

domain2.virt.   NS      ns.domain2.virt.
ns.domain2.virt.	A	192.168.88.252

Здесь домен domain2.virt делегируется на DNS сервер 192.168.88.252 и на нём уже описывается DNS зона.

anonymous
()
Ответ на: комментарий от anonymous

оказалось все еще проще, чем я думал.

для своего домена .virt поскольку тут иерархия подъема и ns сервером выступает та же машина - мне надо было разместить поддомен 2 уровня на той же машине, путем так скажем явного делегирования на тот же IP.

вышло, так: ns1.virt IN A 192.168.2.253 vm1 IN A 192.168.2.253

а затем разместить записи типа, указав в них делегированное внутри машины имя.

$ORIGIN vm1.virt. www IN A 192.168.2.253 git IN A 192.168.2.253

В обратной зоне в BIND9 надо было задать 2 PTR Записи, чтобы все заработало

253 IN PTR ns1.virt IN PTR vm1.virt

теперь я получаю желаемый результат резольвинга в виде: git.vm1.virt или же www.vm1.virt

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

В принципе - без обратной зоны bind9 не резолвит вообще имена на Debian12. зато я понял много чего интересного касательно настройки прямой зоны, делегирования поддомена 2 уровня на локальные машины внутри сети или делегирования каких-либо зон в целом. ну и заодно получит практикум для создания двухсетевых конфигов, потому что проделал аналогичное для контейнеров через bridge и теперь все великолепнейшим образом работает и правильно резолвится. как минимум веб-морда wordpress поднимается из виртуальной сети по доменному имени с cont.virt из виртуальной сети)

anonymous
()
Ответ на: комментарий от anonymous

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

Если тебе нужно, чтобы просто работало преобразование vm1.virt и git.vm1.virt в IP адрес 192.168.2.253, то PTR зону вообще не трогай, она тебе не нужная, можешь её не объявлять.

Только если тебе по каким-то причинам нужно обратное преобразование, из-за функционала сервисов. Например ты поднимаешь почтовый сервер, но даже в этом случае проверку на PTR запись в настройках MTA агента можно отключить.

Так что ты что-то не договариваешь.

anonymous
()