Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


Новые статьи на сайте:

 

Hilik     Настроим все

 http://www.hilik.org.ua/

 

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 будет выглядеть так:
scr1
С помощью этой панели можно полностью управлять записями доменов в MyDNS.

 

 

 Буду рад комментариям, постараюсь ответить на вопросы. Заходите на сайт http://www.hilik.org.ua/
 


В избранное