Как то незаметно дошли руки все таки потрогать BIND10. Для начала немного истории о данном продукте. Первый релиз BIND10 был представлен консорциумом ISC в феврале 2013. 17 апреля 2014 консорциум ISC выпустил последний релиз BIND10 1.2.0, после это передал все наработки сообществу независимых разработчиков. Данного решение было принято в связи с тем что у консорциума нет ресурсов для разработки двух альтернативных проектов. Поэтому они будут развивать только BIND9, а BIND10 полностью переходит в руки сообщества. Для уменьшения путаницы с BIND9, на GitHub был создан новый проект в который перенесли все наработки консорциума по BIND10 и данный проект получил название Bundy.

Ну что же, думаю можно приступать к эксперименту.

Создадим новый контейнер и подключаемся к нему:
$ docker run --name bundy --hostname=bundy -d -i -t sovicua:jessie
$ docker attach bundy


Как обычно обновляемся и устанавливаем нужные пакеты для сборки.
# apt-get update
# apt-get upgrade
# apt-get install git-core g++ make pkg-config python3-dev sqlite3 libsqlite3-dev libbotan1.10-dev liblog4cplus-dev libboost-dev python3-setproctitle dnsutils net-tools autoconf autoconf-archive automake libtool


Получаем исходные коды проекта и выполняем сборку:
# git clone https://github.com/bundy-dns/bundy.git
# cd bundy
# autoreconf --install --warnings=none
# ./configure --prefix=/usr --sysconfdir=/etc --without-werror --enable-experimental-resolver
# make


И получаем ошибку при сборке resolver…
Ошибку получаем из-за того что ветке master отсутствуют некоторые файлы, в частности в папки src/lib/xfr которая нужна для сборки resolver. Если собирать без этой опции то все собирается и работает. Но так как мне хотелось попробовать все, то мне пришлось загрузить исходные коды с другой ветки и собирать все снова.
Дополнительно включаем для сервера DHCP хранение базы в MySQL. В процессе инсталляции нам зададут несколько вопросов на которые думаю не сложно будет ответить.
# wget http://dev.mysql.com/get/mysql-apt-config_0.3.6-1debian8_all.deb
# dpkg -i mysql-apt-config_0.3.6-1debian8_all.deb

Выбираем самую последнюю версию (DRM — Developer milestone releases)
Configuring mysql-apt-config
----------------------------

MySQL APT Repo features MySQL Server along with a variety of MySQL components. You may select the appropriate product to choose the version that you wish to receive.

Once you are satisfied with the configuration then select last option 'Apply' to save the configuration. Advanced users can always change the configurations later,
depending on their own needs.

  1. Server  2. Connector-Python  3. Utilities  4. Apply

Which MySQL product do you wish to configure? 1

This configuration program will detect the current state of your system, check for any installed MySQL Server packages, and try to select the most appropriate version
of MySQL Server to be installed. If you are not sure which version to choose for yourself, do not change the auto-selected version. Advanced users can always change
the version later, depending on their own needs.

  1. mysql-5.6  2. mysql-5.7-dmr  3. none

Which server version do you wish to receive? 2

MySQL APT Repo features MySQL Server along with a variety of MySQL components. You may select the appropriate product to choose the version that you wish to receive.

Once you are satisfied with the configuration then select last option 'Apply' to save the configuration. Advanced users can always change the configurations later,
depending on their own needs.

  1. Server  2. Connector-Python  3. Utilities  4. Apply

Which MySQL product do you wish to configure? 4

Если вы решили использовать стабильную версию, то нужно выполнить команду:
# dpkg-reconfigure mysql-apt-config

… и выбрать требуемую версию ПО которое вы хотите использовать.
После этого обновляем данные репозитория и устанавливаем MySQL сервер.
# apt-get update
# apt-get install mysql-server libmysqlclient-dev libz-dev


Запускаем сервер MySQL
# service mysql start
..
[info] MySQL Community Server 5.7.7-rc is started.
# service mysql status
[info] MySQL Community Server 5.7.7-rc is running.


Теперь мы готовы к повторной сборке, перед этим удаляем каталог с старыми исходниками.
# git clone --branch bundyfork --single-branch https://github.com/bundy-dns/bundy.git
# cd bundy
# autoreconf --install --warnings=none
# ./configure --prefix=/usr --sysconfdir=/etc --without-werror --with-dhcp-mysql --enable-experimental-resolver 
# make


Итак, продолжим наши эксперименты.
После того как закончится сборка, выполняем инсталляцию:
# make install

Подготовка к первому запуску.
По умолчанию сервисы DNS и DHCP не запускаются, их нужно отдельно активировать при помощи утилиты bundyctl. Перед этим нам нужно добавить пользователя от которого мы будем управлять сервисом.
# bundy-cmdctl-usermgr add root

Так же стоит подготовить базу данных для DHCP сервера.
# mysql -u root -p
mysql> CREATE DATABASE bundy;
mysql> CONNECT bundy;
mysql> SOURCE /usr/share/bundy/dhcpdb_create.mysql
mysql> CREATE USER 'bundy'@'localhost' IDENTIFIED BY 'bundy';
mysql> GRANT ALL ON bundy.* TO 'bundy'@'localhost';
mysql> quit

Ну вот и все мы готовы к запуску и посмотреть что же это за зверь такой этот BUNDY O

Поехали...
Из родительской системы выполняем команду запуска, для первого запуска можно даже добавить ключ --verbose
$ docker exec -i -t bundy /usr/sbin/bundy --verbose

В контейнере подключаемся к сервису используя утилиту bundyctl которая позволяет нам управлять и настраивать все сервисы bundy.
# bundyctl
Username: root
Password:
["login success"]
> help

usage: <module name> <command name> [param1 = value1 [, param2 = value2]]
Type Tab character to get the hint of module/command/parameters.
Type "help(? h)" for help on bundyctl.
Type "<module_name> help" for help on the specific module.
Type "<module_name> <command_name> help" for help on the specific command.

Available module names:
    help        Get help for bundyctl.
    config      Configuration commands.
    execute     Execute a given set of commands
    Stats       Stats daemon
    tsig_keys   The TSIG keyring is stored here
    Init        Init process
    Logging     Logging options
    data_sources
            The sources of authoritative DNS data
    Cmdctl      Interface for command and control
    Msgq        The message queue
>

Как я и говорил выше, по умолчанию сервисы DNS и DHCP (и другие) не запущены, для их инициализации есть готовый скрип который выполняет инициализацию авторизированного DNS сервер. Итак, для начала посмотрим какие у нас процессы запущены до начала инициализации.
> Init show_processes
[
    [
        18493,
        "Socket creator",
        null
    ],
    [
        18494,
        "msgq",
        null
    ],
    [
        18496,
        "cfgmgr",
        "ConfigManager"
    ],
    [
        18498,
        "bundy-stats",
        "Stats"
    ],
    [
        18499,
        "bundy-cmdctl",
        "Cmdctl"
    ]
]

Выполняем скрипт инициализации и снова смотрим что у нас теперь с процессами:
> execute init_authoritative_server
adding Authoritative server component
adding Xfrin component
adding Xfrout component
adding Zone Manager component
Components added. Please enter "config commit" to
finalize initial setup and run the components.
> config commit

> Init show_processes
[
    [
        18493,
        "Socket creator",
        null
    ],
    [
        18494,
        "msgq",
        null
    ],
    [
        18496,
        "cfgmgr",
        "ConfigManager"
    ],
    [
        18498,
        "bundy-stats",
        "Stats"
    ],
    [
        18499,
        "bundy-cmdctl",
        "Cmdctl"
    ],
    [
        18559,
        "bundy-xfrout",
        "Xfrout"
    ],
    [
        18560,
        "bundy-xfrin",
        "Xfrin"
    ],
    [
        18561,
        "bundy-zonemgr",
        "Zonemgr"
    ],
    [
        18562,
        "bundy-auth",
        "Auth"
    ]
]

Думаю, что разница заметна :) У нас появились 4 новых процессов:
— bundy-xfrout
— bundy-xfrin
— bundy-zonemgr
— bundy-auth

Проверим работу DNS сервера через запрос его версии.
# dig @127.0.0.1 -c CH -t TXT version.bind

; <<>> DiG 9.9.5-9-Debian <<>> @127.0.0.1 -c CH -t TXT version.bind
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27337
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;version.bind.   CH TXT

;; ANSWER SECTION:
version.bind.  0 CH TXT "bundy 1.2.0"

;; AUTHORITY SECTION:
bind.   0 CH NS bind.

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jul 03 07:39:41 UTC 2015
;; MSG SIZE  rcvd: 79

Ну что же нас можно поздравить — не взирая на всякие препятствия при компиляции, мы смогли запустить и инициализировать авторизированный DNS сервер BUNDY|BIND10. Думаю что на сегодня достаточно буковок.

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

Комментарии (10)


  1. xlin
    03.07.2015 14:27

    То есть предлагаете DNS держать в докер контейнере? А это разумно? Добавляется лишняя простойка в виде докера. Или используете его ради экспериментов и шанс не замусорить хоста?


    1. sovicUA Автор
      03.07.2015 14:48
      +1

      Извини за повтор… еще не освоился :)
      Так как это все я делал на домашней системе, то можно сказать что только для экспериментов, что бы не засорять хост.
      Но с другой стороны все таки в этом есть небольшой плюс, я имею ввиду использования doker.
      Это возможность быстрого и повторного разворачивания установки.
      Если честно, то что бы добиться чистой компиляции я сносил контейнер несколько раз и повторял все заново.


  1. sovicUA Автор
    03.07.2015 14:34

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


  1. 3vi1_0n3
    03.07.2015 15:31
    +1

    После того как закончится сборка, выполняем инсталляцию:
    # make install

    Комментарий о том, что не надо так делать, надо собирать пакет, например, при помощи checkinstall


    1. sovicUA Автор
      03.07.2015 17:09
      +1

      Возможно, но в данном случае я просто хотел потрогать данное ПО, оценить функциональность и возможности.


      1. middle
        03.07.2015 18:00
        +4

        «Но вдруг твой пост увидят дети?» :)


  1. tgz
    03.07.2015 23:15

    Какие то киллер-фичи есть?


    1. aulandsdalen
      03.07.2015 23:18

      > Киллер-фичи
      > Bundy
      Извините, не сдержусь: en.wikipedia.org/wiki/Ted_Bundy


    1. sovicUA Автор
      05.07.2015 00:47

      Основная фича, это то что оно модульное… и все в одном, DNS, DHCP и тд.
      Дальше будем видеть… вот доделать свои эксперименты, нужно будет садится за вторую часть статьи :)


      1. tgz
        06.07.2015 09:02

        Ну я пока вижу только одну фичу, DHCP может работать с SQL базой сам, без ансамбля.
        Но в целом никто почему то этим bundy не пользуется. Подозреваю потому что нестабильно.