DNS сервер · 3 min read · Jan 09, 2026

Запуск DNS-сервера на базе MySQL: MyDNS - Страница 3

3 Установка dnscache

Одно очень важное, что нужно знать о MyDNS, это то, что он не поддерживает внешние (рекурсивные) DNS-запросы, т.е. MyDNS будет предоставлять ответы только для доменов, для которых он является авторитетным! Если вы хотите разрешать другие домены, такие как, например, www.google.com, вам нужно установить DNS-резолвер, такой как dnscache, на вашей системе, и он должен быть установлен на отдельном IP-адресе. Чтобы узнать, почему DNS-сервер (MyDNS) и DNS-резолвер (dnscache) разделены таким образом, посмотрите здесь: http://cr.yp.to/djbdns/separation.html

Обычно ваш интернет-провайдер предоставляет вам IP-адреса серверов имен, которые вы используете для вашего интернет-соединения дома или в офисе, чтобы ваша рабочая станция могла разрешать имена, такие как www.google.com. IP-адреса серверов имен на самом деле являются IP-адресами DNS-резолверов, таких как dnscache. Теперь, если вы хотите предоставить своим клиентам свои собственные IP-адреса серверов имен, вам необходимо настроить DNS-резолвер и предоставить своим клиентам IP-адрес этого DNS-резолвера.

Теперь, если у вас есть только один IP-адрес на вашем сервере, вы можете сказать: “Хорошо, я привязываю MyDNS к 127.0.0.1 и dnscache к моему публичному IP-адресу, чтобы обойти это узкое место.”. Пожалуйста, прочитайте здесь, чтобы узнать, почему это плохая идея: http://www.fefe.de/djbdns/#sameip

Если вы не хотите устанавливать DNS-резолвер на своей системе, вы можете пропустить этот раздел.

Теперь предположим, что у вас есть два публичных IP-адреса, 1.2.3.4 и 1.2.3.5, и вы хотите, чтобы MyDNS слушал на 1.2.3.4, а dnscache на 1.2.3.5.

Выполните следующие шаги для установки dnscache:

groupadd dns
useradd -M -g dns -s /sbin/nologin -c DNS-Cache-User dnscache
useradd -M -g dns -s /sbin/nologin -c TinyDNS-User tinydns
useradd -M -g dns -s /sbin/nologin -c DNSlog-User dnslog

Создайте инициализационный скрипт для dnscache:

cd /usr/local/sbin
wget http://www.servershak.com/dns/dnsctl
chmod 700 dnsctl
ln -s /usr/local/sbin/dnsctl /etc/init.d/dnsctl

Создайте ссылки для запуска системы:

На Debian:

update-rc.d dnsctl defaults

На Fedora и RedHat:

chkconfig –levels 235 dnsctl on

Затем мы компилируем и устанавливаем dnscache:

cd /usr/local/src
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
tar -zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
make
make setup check

mkdir -p /var/package
chmod 1755 /var/package
cd /var/package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
gunzip daemontools-0.76.tar
tar -xpf daemontools-0.76.tar
rm daemontools-0.76.tar
cd /var/package/admin/daemontools-0.76
package/install

cd /usr/local/src
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
tar -xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
make
make setup check

dnscache-conf dnscache dnslog /etc/dnscache 1.2.3.5
ln -s /etc/dnscache /service
touch /etc/dnscache/root/ip/1.2.3

Теперь dnscache слушает на 1.2.3.5. Теперь мы должны сказать MyDNS, что он должен слушать только на 1.2.3.4. Поэтому мы должны изменить директиву listen в /etc/mydns.conf:

| listen = 1.2.3.4 |

и перезапустить MyDNS:

/etc/init.d/mydns restart

Теперь, если вы попытаетесь разрешить доменные имена на 1.2.3.5, вы должны получить ответ. Например, чтобы разрешить www.google.com, вы можете выполнить

dig @1.2.3.5 www.google.com

Таким же образом вы должны иметь возможность разрешать домены, обрабатываемые MyDNS (например, www.somedomain.com), но на этот раз вы используете 1.2.3.4:

dig @1.2.3.4 www.somedomain.com

4 Получение зон и записей от первичного к вторичному DNS-серверу

Если как первичный, так и вторичный DNS-серверы используют MyDNS, у вас есть три возможности для передачи данных от первичного к вторичному DNS-серверу:

  1. Старомодный способ: вы можете использовать передачи зон. Для этого вам нужно изменить allow-axfr = no на allow-axfr = yes в /etc/mydns.conf и перезапустить MyDNS на первичном DNS-сервере. В дополнение к этому, вы должны указать IP-адрес вторичного DNS-сервера в столбце xfer в таблице soa для зон, которые должны быть переданы. Кроме того, убедитесь, что брандмауэр на первичном DNS не блокирует порт 53 (TCP и UDP).
  2. Как первичный, так и вторичный DNS используют одну и ту же базу данных MySQL. Есть один недостаток этого решения: если сервер MySQL выйдет из строя, то как первичный, так и вторичный DNS выйдут из строя одновременно…
  3. Предпочтительное решение: используйте репликацию базы данных MySQL для передачи данных от первичного к вторичному DNS. Убедитесь, что брандмауэр на первичном DNS не блокирует порт MySQL (обычно 3306).

Я рекомендую использовать репликацию MySQL. Я написал очень точное руководство о том, как это настроить здесь: https://www.howtoforge.com/mysql_database_replication, так что мне не нужно снова охватывать эту тему здесь.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.