Сен 18 2009

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.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • 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 который выходил бы в мир (тоесть можно было зайти с инета на этот сервак)

Other Links to this Post


Украинская Баннерная Сеть