Инструменты пользователя

Инструменты сайта


system:dns

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

system:dns [2010/12/18 00:56] (текущий)
Строка 1: Строка 1:
 +====== Первоначальная настройка DNS ======
  
 +Сейчас практически не найдется сервиса или службы,​ которые не использовали б в своей работе DNS (англ. Domain Name System — система доменных имён). Поэтому понимание принципов работы DNS является обязательным для любого системного администратора. Итак в этой статье мы рассмотрим первоначальную настройку DNS сервера - [[http://​www.isc.org/​software/​bind | bind]]
 +
 +==== Введение ====
 +
 +DNS  — компьютерная распределённая система для получения информации о доменах. Чаще всего используется для получения IP-адреса по имени хоста (компьютера или устройства),​ получения информации о маршрутизации почты, обслуживающих узлах для протоколов в домене (SRV-запись).
 +
 +Распределённая база данных DNS поддерживается с помощью иерархии DNS-серверов,​ взаимодействующих по определённому протоколу.
 +
 +Основой DNS является представление об иерархической структуре доменного имени и зонах. Каждый сервер,​ отвечающий за имя, может делегировать ответственность за дальнейшую часть домена другому серверу (с административной точки зрения — другой организации или человеку),​ что позволяет возложить ответственность за актуальность информации на серверы различных организаций (людей),​ отвечающих только за «свою» часть доменного имени.
 +
 +Итак, у нас в распоряжении следующая система
 +<cli>
 +# uname -a
 +Linux centos5.sys-adm.local 2.6.18-194.26.1.el5 #1 SMP Tue Nov 9 12:54:40 EST 2010 i686 i686 i386 GNU/Linux
 +
 +# cat /​etc/​redhat-release
 +CentOS release 5.5 (Final)
 +</​cli>​
 +
 +==== Настройка ====
 +
 +Устанавливаем необходимые пакеты
 +
 +<cli>
 +# yum install bind bind-chroot bind-utils bind-libs
 +</​cli>​
 +
 +С учетом того, что мы будет запускать демон в [[http://​ru.wikipedia.org/​wiki/​Chroot | chroot]] окружении,​ то корнем будет папка <color #​006500>​[b]/​var/​named/​chroot/​[/​b]</​color>​. **В дальнейшем,​ все пути будут задаваться относительно этой директории.**
 +
 +Итак создаем основной конфигурационный файл -  <color #​006500>​[b]/​etc/​named.conf[/​b]</​color>​
 +
 +<​code>​
 +// Подключаем ключ, используемый для управляющего канала
 +include "/​etc/​rndc.key";​
 +
 +// Описываем сети, для которых разрешены рекурсивные запросы
 +acl "​trusted"​ {
 +      192.168.127.0/​24;​
 +      127.0.0.0/​8;​
 +};
 +
 +// Список зарезервированных и частных подсетей,​ описанных в RFC 1918 и RFC 5735
 +// Если ваши клиенты используют одну из ниже перечисленных подсетей,​ то ее необходимо удалить из этого списка
 +acl "​bogus_network"​ {
 +    0.0.0.0/8;
 +    10.0.0.0/8;
 +    39.0.0.0/8;
 +    102.0.0.0/​8;​
 +    103.0.0.0/​8;​
 +    104.0.0.0/​8;​
 +    106.0.0.0/​8;​
 +    169.254.0.0/​16;​
 +    172.16.0.0/​12;​
 +    179.0.0.0/​8;​
 +    185.0.0.0/​8;​
 +    192.0.0.0/​24;​
 +    192.0.2.0/​24;​
 +    192.168.0.0/​16;​
 +    198.18.0.0/​15;​
 +    198.51.100.0/​24;​
 +    203.0.113.0/​24;​
 +    224.0.0.0/​3;​
 +};
 +
 +options
 +{
 +        // Put files that named is allowed to write in the data/ directory:
 +        directory "/​var/​named";​ // the default
 +        dump-file ​              "​data/​cache_dump.db";​
 +        statistics-file ​        "​data/​named_stats.txt";​
 +        memstatistics-file ​     "​data/​named_mem_stats.txt";​
 +
 +        // Перечисляем интерфейсы,​ на которых слушать запросы
 +        listen-on { 127.0.0.1; 192.168.127.1;​ 46.4.15.12; };
 +        ​
 +        // Отключаем рекурсию глобально
 +        recursion no;
 +
 +        // Отклоняем запросы и не отвечаем подсетям,​ перечисленным в bogus_network
 +        blackhole { bogus_network;​ };
 +};
 +
 +// Определяем кто сможет использовать управляющий канал. В нашем примере любой хост, который будет аутентифицироваться ключом RNDC
 +controls {
 +    inet * port 953 allow { any; } keys { "​RNDC";​ };
 +};
 +
 +
 +// Описываем логирование событий.
 +logging
 +{
 +        channel default_debug {
 +                file "​data/​named.run";​
 +                severity dynamic;
 +        };
 +};
 +
 +// Далее мы определяем два представления. В external перечисляем зоны, для которых наш сервер является авторитативным.
 +// В internal описываем зоны, которые используются внутри локальной сети
 +
 +view    "​external"​
 +{
 +        match-clients ​          { !trusted; any; };
 +        match-destinations ​     { any; };
 +
 +        allow-query-cache { none; };
 +
 +        zone "​."​ IN {
 +        type hint;
 +        file "​named.root";​
 +        };
 +
 +        zone "​sys-adm.org.ua"​ {
 +                type master;
 +                file "​masters/​sys-adm.org.ua.zone";​
 +        };
 +};
 +
 +view    "​internal"​
 +{
 +        match-clients ​          { trusted; };
 +        recursion yes;
 +
 +        zone "​."​ IN {
 +        type hint;
 +        file "​named.root";​
 +        };
 +
 +        zone "​localhost"​ {
 +                type master;
 +                file "​masters/​localhost.zone";​
 +                allow-update { none; };
 +        };
 +
 +        zone "​0.0.127-in-addr.arpa"​ {
 +                type master;
 +                file "​masters/​0.0.127-in-addr.arpa";​
 +                allow-update { none; };
 +        };
 +
 +        zone "​sys-adm.local"​ {
 +                type master;
 +                file "​masters/​sys-adm.local.zone";​
 +        };
 +
 +        zone "​127.168.192-in-addr.arpa"​ {
 +                type master;
 +                file "​masters/​127.168.192-in-addr.arpa";​
 +        };
 +};
 +</​code>​
 +
 +Основная идея данного конфигурационного файла состоит в создании двух представлений - **internal** и **external**. Клиенты,​ которые попадают в представление **internal** смогут использовать наш сервер рекурсивно,​ в то время как клиенты,​ которые попадают в представление **external** смогут запрашивать информацию о зонах, описанных в данном представлении.
 +
 +Для начала скачиваем свежую версию файла описания зоны корневых серверов
 +
 +<cli>
 +# cd var/named
 +# wget ftp://​ftp.internic.net/​domain/​named.root
 +</​cli>​
 +
 +Теперь создаем непосредственно файлы описания наших зон и выставляем необходимые права.
 +<cli>
 +# mkdir masters
 +# cd masters
 +# touch sys-adm.local 127.168.192.in-addr.arpa 0.0.127.in-addr.arpa localhost.zone sys-adm.org.ua.zone ​
 +# chown -R named:named var/​named/​masters
 +# chmod 770 var/named
 +</​cli>​
 +
 +А теперь производим описание самих зон.
 +
 +<color #​006500>​[b]/​var/​named/​masters/​0.0.127.in-addr.arpa[/​b]</​color>​
 +
 +<​code>​
 +;​0.0.127.in-addr.arpa
 +$TTL 1D
 +$ORIGIN 0.0.127.in-addr.arpa.
 +
 +@       ​IN ​     SOA     ​localhost. root.localhost. ​ (
 +                            2010121501 ​     ; Serial
 +                            10800           ; Refresh
 +                            3600            ; Retry
 +                            604800 ​         ; Expire
 +                            3600 )          ; Minimum
 +
 +@       ​IN ​     NS      localhost.
 +1       ​IN ​     PTR     ​localhost.
 +
 +</​code>​
 +
 +<color #​006500>​[b]/​var/​named/​masters/​localhost.zone[/​b]</​color>​
 +
 +<​code>​
 +;​localhost.zone
 +$TTL 1D
 +$ORIGIN localhost.
 +
 +@               IN SOA  @       root (
 +                            2010121501 ​     ; Serial
 +                            10800           ; Refresh
 +                            3600            ; Retry
 +                            604800 ​         ; Expire
 +                            3600 )          ; Minimum
 +
 +                IN NS           @
 +                IN A            127.0.0.1
 +                IN AAAA         ::1
 +
 +</​code>​
 +
 +
 +<color #​006500>​[b]/​var/​named/​masters/​sys-adm.local.zone[/​b]</​color>​
 +
 +<​code>​
 +;​sys-adm.local.zone
 +$TTL 1D
 +$ORIGIN sys-adm.local.
 +
 +@ IN SOA ns1.sys-adm.local. hostmaster.sys-adm.local. (
 +                            2010121501 ​     ; Serial
 +                            10800           ; Refresh
 +                            3600            ; Retry
 +                            604800 ​         ; Expire
 +                            3600 )          ; Minimum
 +
 +@       ​IN ​     NS      ns1.sys-adm.local.
 +@       ​IN ​     NS      ns2.sys-adm.local.
 +
 +ns1     ​IN ​     A       ​192.168.127.1
 +ns2     ​IN ​     A       ​192.168.127.2
 +
 +@       ​IN ​     A       ​192.168.127.1
 +
 +@       ​IN ​     MX 10   ​mail.sys-adm.local.
 +
 +mail    IN      A       ​192.168.127.1
 +www     ​IN ​     A       ​192.168.127.1
 +
 +</​code>​
 +
 +
 +
 +<color #​006500>​[b]/​var/​named/​masters/​127.168.192.in-addr.arpa[/​b]</​color>​
 +
 +<​code>​
 +$TTL 1D
 +$ORIGIN 127.168.192.in-addr.arpa.
 +
 +@ IN SOA ns1.sys-adm.local. hostmaster.sys-adm.local. (
 +                            2010121501 ​     ; Serial
 +                            10800           ; Refresh
 +                            3600            ; Retry
 +                            604800 ​         ; Expire
 +                            3600 )          ; Minimum
 +
 +@       IN NS           ​ns1.sys-adm.local.
 +
 +1       IN PTR          gw.sys-adm.local.
 +
 +</​code>​
 +
 +
 +<color #​006500>​[b]/​var/​named/​masters/​sys-adm.org.ua.zone[/​b]</​color>​
 +
 +<​code>​
 +;​sys-adm.org.ua.zone
 +$TTL 1D
 +$ORIGIN sys-adm.org.ua.
 +
 +@ IN SOA ns1.sys-adm.org.ua. hostmaster.sys-adm.org.ua. (
 +                            2010121501 ​     ; Serial
 +                            10800           ; Refresh
 +                            3600            ; Retry
 +                            604800 ​         ; Expire
 +                            3600 )          ; Minimum
 +
 +@       ​IN ​     NS      ns1.sys-adm.org.ua.
 +@       ​IN ​     NS      ns2.sys-adm.org.ua.
 +
 +ns1     ​IN ​     A       ​46.4.15.12
 +ns2     ​IN ​     A       ​88.198.57.86
 +
 +@       ​IN ​     A       ​46.4.15.12
 +
 +@       ​IN ​     MX 10   ​mail.sys-adm.org.ua.
 +@       ​IN ​     MX 20   ​mail2.sys-adm.org.ua.
 +
 +mail    IN      A       ​91.200.157.134
 +mail2   ​IN ​     A       ​188.230.122.62
 +
 +www     ​IN ​     A       ​46.4.15.12
 +ftp     ​IN ​     CNAME   www
 +wiki    IN      CNAME   www
 +
 +IN      TXT     "​v=spf1 mx -all"
 +
 +</​code>​
 +
 +Теперь нам необходимо создать ключ RNDC
 +
 +<cli>
 +# cd etc
 +# dnssec-keygen -a hmac-md5 -b 128 -n HOST RNDC.
 +Krndc.+157+60579
 +
 +# cat Krndc.+157+60579.private
 +Private-key-format:​ v1.2
 +Algorithm: 157 (HMAC_MD5)
 +Key: 0wdkY8QOk+VtEEshu/​TjgA==
 +
 +# touch rndc.key
 +</​cli>​
 +
 +Значения поля Key как раз и необходимо использовать как secret в описании ключа
 +<​code>​
 +key "​RNDC"​ {
 +        algorithm ​      ​hmac-md5;​
 +        secret ​         "​0wdkY8QOk+VtEEshu/​TjgA==";​
 +};
 +</​code>​
 +
 +Выставляем необходимые права на файл с ключом.
 +<cli>
 +# chown root:named rndc.key
 +# chmod 640 rndc.key
 +</​cli>​
 +
 +
 +
 +==== Тестирование ====
 +
 +Перед запуском самого демона проверим валидность самих зон
 +
 +<cli>
 +# named-checkzone sys-adm.local sys-adm.local.zone
 +zone sys-adm.local/​IN:​ loaded serial 2010121501
 +OK
 +
 +# named-checkzone 127.168.192.in-addr.arpa 127.168.192.in-addr.arpa
 +zone 207.168.192.in-addr.arpa/​IN:​ loaded serial 2010121501
 +OK
 +
 +# named-checkzone localhost localhost.zone
 +zone localhost/​IN:​ loaded serial 2010121501
 +OK
 +
 +# named-checkzone 0.0.127.in-addr.arpa 0.0.127.in-addr.arpa
 +zone 0.0.127.in-addr.arpa/​IN:​ loaded serial 2010121501
 +OK
 +
 +# named-checkzone sys-adm.org.ua sys-adm.org.ua.zone
 +zone sys-adm.org.ua/​IN:​ loaded serial 2010121501
 +OK
 +</​cli>​
 +
 +А также валидность основного конфигурационного файла
 +<cli>
 +# named-checkconf -t /​var/​named/​chroot/​
 +</​cli>​
 +
 +Если команда ничего не написала,​ то значит синтаксис без ошибок. Иначе вы увидите сообщение наподобие следуюущему
 +
 +<cli>
 +# named-checkconf -t /​var/​named/​chroot/​
 +/​etc/​named.conf:​94:​ missing ';'​ before end of file
 +</​cli>​
 +
 +Запускаем named и проверяем статус
 +
 +<cli>
 +# service named start
 +Starting named: ​                                           [  OK  ]
 +
 +# service named status
 +number of zones: 5
 +debug level: 0
 +xfers running: 0
 +xfers deferred: 0
 +soa queries in progress: 0
 +query logging is OFF
 +recursive clients: 0/1000
 +tcp clients: 0/100
 +server is up and running
 +named (pid  24492) is running...
 +</​cli>​
 +
 +<cli>
 +# cat /​var/​log/​messages | grep named
 +Dec 15 23:12:27 centos5 named[24492]:​ starting BIND 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3 -u named -t /​var/​named/​chroot
 +Dec 15 23:12:27 centos5 named[24492]:​ found 1 CPU, using 1 worker thread
 +Dec 15 23:12:27 centos5 named[24492]:​ using up to 4096 sockets
 +Dec 15 23:12:27 centos5 named[24492]:​ loading configuration from '/​etc/​named.conf'​
 +Dec 15 23:12:27 centos5 named[24492]:​ max open files (1024) is smaller than max sockets (4096)
 +Dec 15 23:12:27 centos5 named[24492]:​ using default UDP/IPv4 port range: [1024, 65535]
 +Dec 15 23:12:27 centos5 named[24492]:​ using default UDP/IPv6 port range: [1024, 65535]
 +Dec 15 23:12:27 centos5 named[24492]:​ listening on IPv4 interface lo, 127.0.0.1#​53
 +Dec 15 23:12:27 centos5 named[24492]:​ listening on IPv4 interface eth0, 192.168.127.1#​53
 +Dec 15 23:12:27 centos5 named[24492]:​ listening on IPv4 interface eth1, 46.4.15.12#​53
 +Dec 15 23:12:27 centos5 named[24492]:​ command channel listening on 0.0.0.0#953
 +Dec 15 23:12:27 centos5 named[24492]:​ zone sys-adm.org.ua/​IN/​external:​ loaded serial 2010121501
 +Dec 15 23:12:27 centos5 named[24492]:​ zone 0.0.127-in-addr.arpa/​IN/​internal:​ loaded serial 2010121501
 +Dec 15 23:12:27 centos5 named[24492]:​ zone 127.168.192-in-addr.arpa/​IN/​internal:​ loaded serial 2010121501
 +Dec 15 23:12:27 centos5 named[24492]:​ zone sys-adm.local/​IN/​internal:​ loaded serial 2010121501
 +Dec 15 23:12:27 centos5 named[24492]:​ zone localhost/​IN/​internal:​ loaded serial 2010121501
 +</​cli>​
 +
 +Если все запустилось без ошибок можно собственно произвести проверку.
 +<cli>
 +# host -t ns sys-adm.org.ua 127.0.0.1
 +Using domain server:
 +Name: 127.0.0.1
 +Address: 127.0.0.1#​53
 +Aliases:
 +
 +sys-adm.org.ua name server ns1.sys-adm.org.ua.
 +sys-adm.org.ua name server ns2.sys-adm.org.ua.
 +
 +# host -t mx sys-adm.org.ua 127.0.0.1
 +Using domain server:
 +Name: 127.0.0.1
 +Address: 127.0.0.1#​53
 +Aliases:
 +
 +sys-adm.org.ua mail is handled by 20 mail2.sys-adm.org.ua.
 +sys-adm.org.ua mail is handled by 10 mail.sys-adm.org.ua.
 +
 +# host google.com 127.0.0.1
 +Using domain server:
 +Name: 127.0.0.1
 +Address: 127.0.0.1#​53
 +Aliases:
 +
 +google.com has address 74.125.87.99
 +google.com has address 74.125.87.104
 +google.com mail is handled by 300 google.com.s9b1.psmtp.com.
 +google.com mail is handled by 400 google.com.s9b2.psmtp.com.
 +google.com mail is handled by 100 google.com.s9a1.psmtp.com.
 +google.com mail is handled by 200 google.com.s9a2.psmtp.com.
 +
 +# host -t mx sys-adm.local 127.0.0.1
 +Using domain server:
 +Name: 127.0.0.1
 +Address: 127.0.0.1#​53
 +Aliases:
 +
 +sys-adm.local mail is handled by 10 mail.sys-adm.local.
 +
 +# host mail.sys-adm.local 127.0.0.1
 +Using domain server:
 +Name: 127.0.0.1
 +Address: 127.0.0.1#​53
 +Aliases:
 +
 +mail.sys-adm.local has address 192.168.127.1
 +
 +# host 192.168.127.1 127.0.0.1
 +Using domain server:
 +Name: 127.0.0.1
 +Address: 127.0.0.1#​53
 +Aliases:
 +
 +1.127.168.192.in-addr.arpa domain name pointer gw.sys-adm.local.
 +</​cli>​
 +
 +На этом проверку нашего днс сервера можно считать завершенной
 +
 +Проверка защиты от заражения кеша ДНС сервера. Слово **GREAT** свидетельствует о хорошей защите,​ в то время как **POOR** наоборот. Основная идея в защите состоит в использование случайных портов при отправке запросов.
 +<cli>
 +# dig +short @127.0.0.1 porttest.dns-oarc.net TXT
 +porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
 +"​46.4.15.12 is GREAT: 26 queries in 4.4 seconds from 26 ports with std dev 20122"
 +</​cli>​
 +
 +А это плохие настройки. Если вы будете использовать опцию вида **query-source address xxx.xxx.xxx.xxx port 53**, т.е. жестко привяжет исходящий порт к определенному значению.
 +<cli>
 +# dig +short @127.0.0.1 porttest.dns-oarc.net TXT
 +porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
 +"​46.4.15.12 is POOR: 26 queries in 4.4 seconds from 1 ports with std dev 0"
 +</​cli>​
 +
 +Более подробно можно прочитать https://​www.dns-oarc.net/​oarc/​services/​porttest
 +
 +~~DISCUSSION~~
system/dns.txt · Последние изменения: 2010/12/18 00:56 (внешнее изменение)