MyDNS, установка, настройка.
MyDNS, простой, не рекурсивный DNS сервер, он предназначен для того, что бы быть первичным, авторитивным сервером, но умеет так же как и PowerDNS перенаправлять свои запросы на внешний рекурсивный сервер и так же он умеет хранить информацию о доменах в базах MySQL и PostgreSQL. Чаще всего MyDNS приходится использовать с вебинтерфейсами управления хостингом, но у него в принципе есть свой вебинтерфейс управления и набор перловых скриптов для добавления,удаления записей.
В портах FreeBSD есть MyDNS и MyDNS-ng, я использую MyDNS-ng:
cd /usr/ports/dns/mydns-ng make install clean |
В начале небольшой диалог настройки сборки:
┌────────────────────────────────────────────────────────────────────┐ │ Options for mydns-ng-mysql 1.2.8.27_1 │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ [ ] PGSQL Build with PostgreSQL backend instead of MySQL │ │ │ │ [X] ALIAS Enable server side aliases │ │ │ │ [ ] OPENSSL Enable OpenSSL (if MySQL is linked with OpenSSL) │ │ │ │ [X] NLS Native Language Support with gettext │ │ ├─└────────────────────────────────────────────────────────────────┘─┤ │ [ OK ] Cancel │ └────────────────────────────────────────────────────────────────────┘ |
В опциях мы указали, что будем использовать поддержку Aliasов и поддержку языков отличных от латиницы. Поддержка aliasов, это специальный патч, позволяющий отдавать информацию о алиасах, как о обычных А и тому подобное записях.
После того, как сборка окончится, нужно создать базу и таблицу MySQL. В первую очередь создадим базу и пользователя:
mysql -uroot -p create database mydns; grant all on mysql.* to 'mydns'@'localhost' identified by 'mydns'; |
Теперь приступим к созданию таблицы MySQL в которой будет хранится вся информация. Для этого, сначала нужно выполнить mydns с ключем —create-table.
mydns --create-table |
И в ответ получим:
CREATE TABLE IF NOT EXISTS soa ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, origin CHAR(255) NOT NULL, ns CHAR(255) NOT NULL, mbox CHAR(255) NOT NULL, serial INT UNSIGNED NOT NULL default '1', refresh INT UNSIGNED NOT NULL default '28800', retry INT UNSIGNED NOT NULL default '7200', expire INT UNSIGNED NOT NULL default '604800', minimum INT UNSIGNED NOT NULL default '86400', ttl INT UNSIGNED NOT NULL default '86400', UNIQUE KEY (origin) ) Engine=MyISAM; -- -- Table structure for table 'rr' (resource records) -- CREATE TABLE IF NOT EXISTS rr ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, zone INT UNSIGNED NOT NULL, name CHAR(64) NOT NULL, data VARBINARY(128) NOT NULL, aux INT UNSIGNED NOT NULL, ttl INT UNSIGNED NOT NULL default '86400', type ENUM('A','AAAA','ALIAS','CNAME','HINFO','MX','NAPTR','NS','PTR','RP','SRV','TXT'), UNIQUE KEY rr (zone,name,type,data) ) Engine=MyISAM; |
А для того, что бы создать эти таблицы достаточно выполнить комбинацию команд:
mydns --create-table| mysql -uroot mydns |
После того, как эти таблицы будут созданы, можно переходить к настройке самого MyDNS.
Файл настроек MyDNS /usr/local/etc/mydns.conf, изменить в нем в принципе надо только настройки доступа к MySQL.
По итогу конфигурационный файл будет выглядеть так:
db-host = localhost # SQL server hostname db-user = mydns # SQL server username db-password = mydns # SQL server password database = mydns # MyDNS database name # GENERAL OPTIONS user = nobody # Run with the permissions of this user group = nobody # Run with the permissions of this group listen = * # Listen on these addresses ('*' for all) no-listen = # Do not listen on these addresses # CACHE OPTIONS zone-cache-size = 1024 # Maximum number of elements stored in the zone cache zone-cache-expire = 60 # Number of seconds after which cached zones expires reply-cache-size = 1024 # Maximum number of elements stored in the reply cache reply-cache-expire = 30 # Number of seconds after which cached replies expire # ESOTERICA log = LOG_DAEMON # Facility to use for program output (LOG_*/stdout/stderr) pidfile = /var/run/mydns.pid # Path to PID file timeout = 120 # Number of seconds after which queries time out multicpu = 1 # Number of CPUs installed on your system recursive = # Location of recursive resolver allow-axfr = no # Should AXFR be enabled? allow-tcp = no # Should TCP be enabled? allow-update = no # Should DNS UPDATE be enabled? ignore-minimum = no # Ignore minimum TTL for zone? soa-table = soa # Name of table containing SOA records rr-table = rr # Name of table containing RR data soa-where = # Extra WHERE clause for SOA queries rr-where = # Extra WHERE clause for RR queries |
Изменения внесены только в параметры:
db-host = localhost # SQL server hostname db-user = mydns # SQL server username db-password = mydns # SQL server password database = mydns # MyDNS database name |
Все, теперь можно запускать MyDNS, для этого нужно сначала разрешить его запуск.
echo 'mydns_enable="YES"' >> /etc/rc.conf |
И запустим MyDNS:
/usr/local/etc/rc.d/mydns start |
Теперь можно переходить к добавлению доменов.
Добавлять можно либо перловым скриптом, либо с помощью php скрипта.
Начнем с перлового скрипта. Тут я кстати наступил на небольшие грабли, если у вас пароль содержит -, как люблю делать я, то вся часть пароля начиная с -, будет утеряна. Поэтому применяйте только те пароли, что нравятся скрипту и все будет хорошо. Сам скрипт /usr/local/share/doc/mydns-ng/contrib/create_domain.pl, нуждается в небольшой настройке. В первую очередь нужно указать путь к конфигурационному файлу MyDNS.
В скрипте он описан как:
$config_file="/etc/mydns.conf"; |
Нужно изменить путь:
$config_file="/usr/local/etc/mydns.conf"; |
И далее внести настройки первичного и вторичного DNS:
$master_dns="ns1.hilik.org.ua"; #default hostname of your primary dns server $slave_dns="ns2.hilik.org.ua"; #default hostname of your secondary dns server |
И теперь можно создавать запись:
perl /usr/local/share/doc/mydns/contrib/create_domain.pl --domain=hilik.org.ua --ip=89.252.34.107 --creat |
Если в ответ увидите:
Creating... Checking for domain hilik.org.ua. No hit found on hilik.org.ua. Proceding with creation Added hilik.org.ua. and got id : 1 Adding NS ns1.hilik.org.ua. Adding NS ns2.hilik.org.ua. Adding MX to 127.0.0.1 Adding localhost Adding A record Adding mail record Adding www record Adding Catch all record All done |
Запись создана корректно.
Проверить можно так же с помощью dig:
dig @localhost hilik.org.u |
и в ответ:
; <<>> DiG 9.4.3-P2 <<>> @localhost hilik.org.ua ; (2 servers found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54712 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;hilik.org.ua. IN A ;; ANSWER SECTION: hilik.org.ua. 86400 IN A 127.0.0.1 ;; AUTHORITY SECTION: hilik.org.ua. 86400 IN NS ns1.hilik.org.ua. hilik.org.ua. 86400 IN NS ns2.hilik.org.ua. ;; ADDITIONAL SECTION: ns1.hilik.org.ua. 86400 IN A 127.0.0.1 ;; Query time: 56 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Sep 2 17:51:55 2009 ;; MSG SIZE rcvd: 98 |
Теперь разберемся с вебинтерфейсом управления, тут все значительно проще, скрпт admin.php находится там же, где и перловый скрипт /usr/local/share/doc/mydns-ng/contrib/admin.php.
Его можно скопировать в какой нибудь виртуальный вебсервер и немного поправить настройки. То есть прописать атрибуты доступа к MySQL:
$dbhost = "localhost"; $dbuser = "mydns"; $dbpass = "mydns"; $dbname = "mydns"; |
После этого в браузере admin.php будет выглядеть так:

С помощью этой панели можно полностью управлять записями доменов в MyDNS.


By Борис, 22.11.2009 @ 23:10
Добрый день, скажите пожалуйста а данный MyDNS это тоже самое что и BIND. Проблема такая я хочу утановить шлюз + LAMP
By hilik, 23.11.2009 @ 00:21
MyDNS для шлюза не годится. Он не является рекурсивным DNS сервером, то есть умеет только отвечать о тех доменах, что прописаны у него. Правда он умеет рекурсивные запросы перенаправлять на рекурсивный сервер, на тот же Bind, который является как рекурсивным, так и авторитивным сервером, или на powewDNS recursor, он чисто рекурсивный сервер. Но вам помимо MyDNS прийдется настраивать еще что то, для рекурсивных запросов.
By Lovator, 16.02.2010 @ 14:06
А можно использовать MyDNS для поднятия корпоративного сервера FTP/WEB/Mail который выходил бы в мир (тоесть можно было зайти с инета на этот сервак)