MySQL DNS · 5 min read · Oct 02, 2025

Запуск DNS-сервера на базе MySQL: MyDNS

Это “копировать и вставить” руководство! Самый простой способ следовать этому учебнику — использовать клиент командной строки/SSH-клиент (например, PuTTY для Windows) и просто копировать и вставлять команды (за исключением случаев, когда вам нужно предоставить собственную информацию, такую как IP-адреса, имена хостов, пароли и т. д.). Это помогает избежать опечаток.

Запуск DNS-сервера на базе MySQL: MyDNS

Версия 1.0
Автор: Фалко Тимме
Последнее редактирование: 01/02/2006

В этом учебнике я опишу, как установить и настроить MyDNS, DNS-сервер, который использует базу данных MySQL в качестве бэкенда вместо конфигурационных файлов, таких как, например, Bind или djbdns. Это имеет преимущество в том, что вы можете легко использовать веб-интерфейсы для администрирования ваших DNS-записей. Вы даже можете написать свой собственный интерфейс, например, используя PHP, для взаимодействия с базой данных MyDNS. MyDNS просто считывает записи из базы данных, и его не нужно перезапускать/перезагружать, когда DNS-записи изменяются или зоны создаются/редактируются/удаляются! Это большое преимущество.

Я также покажу, как настроить вторичный DNS-сервер, но я не буду использовать обычные передачи зон для получения записей с первичного на вторичный DNS-сервер; вместо этого я буду использовать репликацию базы данных MySQL. Я просто реплицирую данные с первичного на вторичный сервер.

Существует несколько веб-интерфейсов для MyDNS. Конечно, вы можете использовать phpMyAdmin для администрирования MyDNS, или вы можете использовать веб-интерфейс, который поставляется с MyDNS (который не подходит для новичков, так как в нем отсутствуют описания полей), или вы можете использовать MyDNSConfig, инструмент, написанный мной. Я покажу, как установить каждый из них.

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

Я использовал систему Debian Sarge для этой настройки. Однако большинство шагов, описанных здесь, также должны применяться к другим дистрибутивам, таким как Fedora, SuSE, Mandriva и т. д.

Я хочу сначала сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот путь, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!

1 Установка MySQL и MyDNS

Сначала убедитесь, что у вас есть рабочая базовая установка Debian, как описано на https://www.howtoforge.com/perfect_setup_debian_sarge и https://www.howtoforge.com/perfect_setup_debian_sarge_p2 (пожалуйста, обратитесь к соответствующему документу “Идеальная настройка” на HowtoForge, если вы используете другой дистрибутив).

Затем установите MySQL:

apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin

Вам будет задано несколько вопросов:

Включить suExec? <– Да
Какой веб-сервер вы хотите автоматически перенастроить? <– apache, apache2
Хотите, чтобы я сейчас перезапустил apache? <– Да

Установите пароль root для MySQL следующим образом:

mysqladmin -u root password yourrootsqlpassword

Установка MyDNS проста. Просто следуйте этим шагам:

cd /tmp/
wget http://mydns.bboy.net/download/mydns-1.0.0.tar.gz
tar xvfz mydns-1.0.0.tar.gz
cd mydns-1.0.0/
./configure
make
make install

Теперь нам нужно создать базу данных MyDNS (называемую mydns) и пользователя базы данных MyDNS (также называемого mydns, с паролем mydns_password):

mysql -u root -p
Введите пароль:

Теперь, в оболочке MySQL, мы создаем базу данных mydns и пользователя mydns:

CREATE DATABASE mydns;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.
TO ‘mydns’@’localhost’ IDENTIFIED BY ‘mydns_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns. TO ‘mydns’@’localhost.localdomain’ IDENTIFIED BY ‘mydns_password’;
FLUSH PRIVILEGES;
quit;

Вернувшись в обычную оболочку, мы создаем таблицы в базе данных mydns:

mydns –create-tables | mysql -u root -p mydns
Введите пароль:

Если вы видите ошибки, такие как эти:

mydns[14287]: ошибка загрузки gid для группы nobody' mydns[14287]: использование gid 65534 от пользователяnobody’

не беспокойтесь, вы можете забыть об этом.

Затем мы добавляем еще два столбца в таблицу soa базы данных mydns:

mysql -u root -p
Введите пароль:
ALTER TABLE mydns.soa ADD COLUMN active ENUM(‘Y’,’N’) NOT NULL;
ALTER TABLE mydns.soa ADD INDEX (active);
ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255) NOT NULL;
quit;

С помощью столбца active вы можете просто включать/выключать зоны позже, а столбец xfer может использоваться для передачи зон (которые нам не нужны, потому что мы будем использовать репликацию базы данных MySQL для передачи данных на вторичный DNS-сервер, но я упоминаю это для полноты) (если вы хотите использовать передачи зон вместо репликации базы данных, то столбец xfer должен содержать один или несколько IP-адресов, разделенных запятыми. Эти IP-адреса будут разрешены для передачи зоны.).

Теперь мы создаем конфигурационный файл MyDNS /etc/mydns.conf, выполнив эту команду:

cd /tmp/mydns-1.0.0/
make conf

Затем мы редактируем /etc/mydns.conf, чтобы он выглядел так:

| ## ## /etc/mydns.conf ## Пт Окт 21 16:36:32 2005 ## Для получения дополнительной информации смотрите mydns.conf(5). ## # ИНФОРМАЦИЯ О БАЗЕ ДАННЫХ db-host = localhost # Имя хоста SQL-сервера db-user = mydns # Имя пользователя SQL-сервера db-password = mydns_password # Пароль SQL-сервера database = mydns # Имя базы данных MyDNS # ОБЩИЕ ПАРАМЕТРЫ user = nobody # Запуск с правами этого пользователя group = nogroup # Запуск с правами этой группы listen = * # Слушать на этих адресах ('*' для всех) # ПАРАМЕТРЫ КЭША zone-cache-size = 1024 # Максимальное количество элементов, хранящихся в кэше зон zone-cache-expire = 60 # Количество секунд, после которых кэшированные зоны истекают reply-cache-size = 1024 # Максимальное количество элементов, хранящихся в кэше ответов reply-cache-expire = 30 # Количество секунд, после которых кэшированные ответы истекают # ЭЗОТЕРИКА log = LOG_DAEMON # Услуга, используемая для вывода программы (LOG_*/stdout/stderr) pidfile = /var/run/mydns.pid # Путь к файлу PID timeout = 120 # Количество секунд, после которых запросы истекают multicpu = 1 # Количество ЦП, установленных в вашей системе allow-axfr = no # Должен ли быть включен AXFR? allow-tcp = yes # Должен ли быть включен TCP? ignore-minimum = no # Игнорировать минимальный TTL для зоны? soa-table = soa # Имя таблицы, содержащей SOA-записи rr-table = rr # Имя таблицы, содержащей данные RR |

Убедитесь, что вы заполнили правильные данные базы данных, а также позаботьтесь о группе. В Debian группа nobody — это nogroup, что отличается от значения по умолчанию в /etc/mydns.conf (также nobody), поэтому убедитесь, что вы изменили это! Также установите allow-tcp в yes.

Теперь мы создаем инициализационный скрипт MyDNS /etc/init.d/mydns:

| #! /bin/sh # # mydns Запустить сервер MyDNS # # Автор: Фалко Тимме <[email protected]>. # set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=mydns DAEMON=/usr/local/sbin/$NAME DESC="DNS-сервер" SCRIPTNAME=/etc/init.d/$NAME # Корректно выйти, если пакет был удален. test -x $DAEMON || exit 0 case "$1" in start) echo -n "Запуск $DESC: $NAME" $DAEMON --background echo "." ;; stop) echo "Остановка $DESC: $NAME." kill -9 `pidof $NAME` &> /dev/null ;; restart) echo "Перезапуск $DESC: $NAME." $0 stop && sleep 1 $0 start ;; *) echo "Использование: $SCRIPTNAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0 |

Затем мы делаем его исполняемым и запускаем MyDNS:

chmod 755 /etc/init.d/mydns
/etc/init.d/mydns start

Если вы хотите, чтобы MyDNS запускался автоматически во время загрузки системы, вам нужно создать необходимые ссылки для загрузки системы. В Debian вы делаете это так:

update-rc.d mydns defaults 21 22

В Fedora или RedHat вы бы выполнили это:

chkconfig –levels 235 mydns on

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.