- Загальні відомості
- Вихідні дані
- установка BIND9
- Параметри (синтаксис) named.conf
- розділ Acl
- розділ Options
- розділ Zone
- Розширені можливості пошуку конфігурації
- Налаштування кешуючого DNS сервера
- Головний (master) сервер зони
- Вторинний (secondary, slave) авторитетний сервер зони
- Налаштування netfilter ( iptables ) Для DNS BIND
- Усунення несправностей
Доброго часу, читачі. Продовжуючи теоретичний матеріал про DNS сервері BIND , В поточній статті хочу розглянути практичний приклад установки і настройки різних конфігурацій сервера BIND. У статті я опишу настройку DNS-кешу і повноцінного DNS master сервера. Почну опис з загальних понять і необхідних кроків для організації будь-якого DNS сервера.
Загальні відомості
Named - це демон, що входить до складу пакету bind9 і є сервером доменних імен. Демон named може реалізовувати функції серверів будь-якого типу: master, slave, cache. На наведеній схемі я постарався максимально прозоро відобразити основний принцип роботи DNS сервера BIND. Бінарник, який виконує основну роботу, розташований в / usr / sbin / named. Він бере настройки з основного конфігураційного файлу, який називається named.conf і розташований в каталозі / etc / bind. В основному конфіге описується робочий каталог асервера, найчастіше це каталог / var / cache / bind, в якому лежать файли опису зон та інші службові файли. Відповідність назви зони і файлу опису зони задає розділ zone з параметром file. Розділ zone так само задає тип відповідальності даного сервера за зону (master, slave і ін.), А так само визначає особливі параметри для поточної зони (наприклад, на якому інтерфейсі обробляти запити для поточної зони). У файлах опису зон містяться параметри зон і записи ресурсів (шляху, зазначені в цьому абзаці можуть відрізнятися, це залежить від дистрибутива Linux або параметрів збірки сервера з початкових кодів ).
Ця загальна схема роботи, яка допоможе в подальшому не заплутатися, при розгляді конкретних конфігурацій.
Формат файлу конфігурації для 4-ої версії програми відрізняється від того, який застосовується в восьмою і дев'ятою версіях BIND. З огляду на, що я розраховую на установку нового DNS сервера, а стару версію сенсу ставити не бачу, тому буду розглядати конфиг нової версії.
Вихідні дані
Для коректної роботи DNS ньому необхідно мати налаштовану мережу . DNS в поточній статті буде налаштований на дистрибутиві Debian, особливості інших дистрибутивів теж будуть відзначені. Конфиг мережі стенду наступний:
dns: ~ # cat / etc / network / interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.152 netmask 255.255.255.0 gateway 10.0.0.254 auto eth1 iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0де 10.0.0.152/24 - зовнішній інтерфейс (підмережа, виділена провайдером), 192.168.1.1/24 - внутрішній (Локальна мережа). Настроюється зона матиме ім'я example.com. У прикладі зі slave сервером, вторинний сервер буде розташований на IP 10.0.0.191.
установка BIND9
Для роботи DNS сервера необхідно встановити пакет bind9 (в деяких дистрибутивах - bind). Як зазначено на схемі - основним конфігураційним файлом BIND є файл named.conf (даний файл може бути розміщений в каталозі / etc, іноді в / etc / bind).
Параметри (синтаксис) named.conf
Синтаксис файлу named.conf дотримується наступних правил:
IP-адреси - список IP повинен бути розділений символом ";" , Можливо вказувати підмережа в форматі 192.168.1.1/24 або 192.168.1.1/255.255.255.0, (для виключення IP перед ним потрібно поставити знак!), Може свідчити імена "any", "none", "localhost" в подвійних лапках.
Коментарі - рядки починаються на #, // і укладені в / * і * / вважаються коментарями.
У файлах опису зон - символ @ є "змінної" зберігає ім'я зони, зазначеної в файлі конфігурації named.conf або в директиві @ $ ORIGIN поточного опису зони.
Кожна завершена рядок параметрів повинна завершуватися символом; .
розділ Acl
Acl (access control list) - дозволяє задати іменований список мереж. Формат розділу: acl "імя_сеті" {ip; ip; ip; };
розділ Options
Розділ Options задає глобальні параметри конфігураційного файлу, керівники всіма зонами. Даний розділ має формат: options {оператори_раздела_Options}; . Options може бути "вкладений" в розділ Zone, при цьому він перевизначає глобальні параметри. Часто використовувані оператори options:
- allow-query {спісок_ip} - Дозволяє відповіді на запити тільки з спісок_ip. При відсутності - сервер відповідає на всі запити.
- allow-recursion {спісок_ip} - На запити з спісок_ip будуть виконуватися рекурсивні запити. Для інших - ітеративні. Якщо не заданий параметр, то сервер виконує рекурсивні запити для всіх мереж.
- allow-transfer {спісок_ip} - Вказує список серверів, яким дозволено брати зону з сервера (в основному тут вказують slave сервера)
- directory / path / to / work / dir - вказує абсолютний шлях до робочого каталогу сервера. Цей оператор допустимо тільки в розділі options.
- forwarders {ip порт, ip порт ...} - вказує адреси хостів і якщо потрібно порти, куди переадресовувати запити (зазвичай тут вказуються DNS провайдерів ISP).
- forward ONLY або forward FIRST - параметр first вказує, DNS-сервера намагатися вирішувати імена за допомогою DNS-серверів, зазначених в параметрі forwarders, і лише в разі, якщо дозволити ім'я за допомогою даних серверів не вдалося, то буде здійснювати спроби дозволу імені самостійно.
- notify YES | NO - YES - повідомляти slave сервера про зміни в зоні, NO - не повідомляють.
- recursion YES | NO - YES - виконувати рекурсивні запити, якщо просить клієнт, NO - не виконувати (тільки ітеративні запити). Якщо відповідь знайдена в кеші, то повертається з кешу. (Може використовуватися тільки в розділі Options)
розділ Zone
Визначає опис зон (и). Формат розділу: zone {оператори_раздела_zone}; Оператори, які найбільш часто використовуються:
- allow-update {спісок_ip} - вказує системи, яким дозволено динамічно оновлювати дану зону.
- file "имя_файла" - вказує шлях до файлу параметрів зони (повинен бути розташований в каталозі, визначеному в розділі options оператором directory)
- masters {спісок_ip} -зазначає список майстер-серверів. (Припустимо тільки в підлеглих зонах)
- type "тіп_зони" - вказує тип зони, описуваної в поточному розділі, тіп_зони може набувати таких значень:
- forward - вказує зону переадресації, яка переадресовує запити, які прийшли в цю зону.
- hint - вказує допоміжну зону (даний тип містить інформацію про кореневих серверах, до яких сервер буде звертатися в разі неможливості знайти відповідь в кеші)
- master - вказує працювати в якості майстер сервера для поточної зони.
- slave - вказує працювати в якості підлеглого сервера для поточної зони.
Розширені можливості пошуку конфігурації
Значення часу в файлах зон за замовчуванням вказується в секундах, якщо за ними не стоїть одна з наступних букв: S - секунди, M - хвилини, H- годинник, D - дні, W - тижні. Відповідно, запис 2h20m5s матиме значення 2 години 20 хвилин 5 секунд і відповідати 8405 секунд.
Будь-яке ім'я хоста / записи, які не закінчуються точкою вважається неFQDN ім'ям і буде доповнено ім'ям поточної зони. Наприклад, запис domen в файлі зони examle.com буде розгорнуто в FQDN-имя domen.examle.com. .
У конфігураційних файлах BIND можуть застосовуватися такі директиви:
- $ TTL - визначає TTL за замовчуванням для всіх записів в поточній зоні.
- $ ORIGIN - змінює ім'я зони з зазначеного в файлі named.conf. При цьому, область дії даної директиви не поширюється "вище" (тобто якщо файл включений директивою $ INCLUDE, то область дії $ ORIGN не поширюється на батьківський)
- $ INCLUDE - включає вказаний файл як частина файлу зони.
Для того щоб локальний Резолвер сервера теж використовував локальний DNS, необхідно привести файл resolv.conf до наступного вигляду:
dns: ~ # cat /etc/resolv.conf nameserver 127.0.0.1Якщо в імені ресурсної записи зустрічається символ "*", то це він означає що замість нього можна мати на увазі будь-яку дозволену послідовність символів. Такий запис називають "wildcard запис". Однак, символ "*" не може бути використаний будь-де. Це може бути тільки перший символ в поле Name поточного домену, відокремлений від решти символом "."
Налаштування кешуючого DNS сервера
Після установки bind, він повністю готовий працювати як кешуючий DNS сервер без додаткової настройки. Єдиний недолік - він обробляє запити на всіх інтерфейсах, що нам абсолютно не потрібно, тому ми трохи подредактіруем настройки сервера.
Для того, щоб BIND працював в якості кешуючого, необхідно мати конфігураційні файли заповнені необхідною інформацією:
- named.conf;
- опис серверів кореневої зони (зона типу hint);
- опис зони 127.in-addr.arpa.
В даному прикладі наведено кешуючий DNS сервер, що обробляє запити зі списку мереж lan, в яку входить тільки одна локальна мережа 192.168.1.1/24 і петлевий інтерфейс. При необхідності можна включити туди і інші мережі. Після визначення списку мереж в директиві acl, в будь-якому місці конфіга можна буде посилатися на цей список по імені (в нашому прикладі ім'я - lan), що, власне і зроблено в розділі options. Більшість параметрів я прокоментував, але окремої уваги вимагає розділ, що описує зону кореневих серверів. У параметрі file заданий відносний шлях до файлу опису кореневих серверів (шлях, щодо робочого каталогу сервера). За оновленнями даного файлу необхідно стежити, хоча він оновлюється досить рідко (звідки брати оновлений файл я писав в теорії DNS ). Як ви помітили, є так само два записи для зони localhost і два записи зворотних зон для бродкаст доменів. Призначення цих зон полягає в тому, щоб уникнути трансляції випадкових запитів імен відповідних IP-адрес на сервери, які обслуговують кореневу зону.
Щоб не вносити плутанину в купі конфігураційних файлів, в статті я наводжу приклади на основі єдиного конфігураційного файлу. Насправді, в останніх версіях Debian (та інших дистрибутивах Linux), файл named.conf виглядає наступним чином:
root @ master: ~ # cat /etc/bind/named.conf // This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, * BEFORE * you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones";Тобто основний файл не містить змін, а включає в себе більш вузько спеціалізовані файли, які відповідають за свої завдання, наприклад named.conf.options - містить глобальні параметри конфігурації, named.conf.default-zones - містить опис localhost і broadcast зон, а named.conf.local містить опису зон, за які відповідає даний сервер.
Далі, хочу звернути увагу на наявність файлів зон в каталозі, вказаному в розділі options в параметрі directory з іменами, відповідними параметрами file в розділах, що описують зони:
dns: ~ # ls -l / var / cache / bind / разом 24 -rw-r - r-- 1 root root 237 Май 28 1:28 0.in-addr.arpa -rw-r - r-- 1 root root 271 Май 28 1:28 127.in-addr.arpa -rw-r - r-- 1 root root 237 Май 28 1:28 255.in-addr.arpa -rw-r - r-- 1 root root 2994 Май 28 1:28 db.root -rw-r - r-- 1 root root 270 Май 28 1:28 localhost dns: ~ # cat /var/cache/bind/127.in-addr.arpa ; ; BIND reverse data file for local loopback interface; $ TTL 604800 @ IN SOA localhost. root.localhost. (1; Serial 604800; Refresh 86400; Retry 2419200; Expire 604800); Negative Cache TTL; @ IN NS localhost. 1.0.0 IN PTR localhost.Розглядати файли "петльових" і бродкастових зон не бачу сенсу, тому що після установки пакета bind настройки задані за замовчуванням в цих файлах цілком прийнятні. Далі, при організації майстер сервера ми розглянемо приклад опису файлу зони. Хочу звернути увагу, що ми налаштовуємо кешуючий сервер, а визначаємо ми його і як master для деяких з зон. У нашому випадку "кешуючий" говорить про те, що наш сервер не підтримує жодну з реально існуючих зон, тобто йому не делеговане прав на таке обслуговування.
Так, мало не забув, демон named повинен бути дозволений для запуску на необхідних рівнях виконання ОС (команда в RedHat - / sbin / chkconfig bind9 on, в Debian - /usr/sbin/update-rc.d bind9 defaults). Після зміни конфігураційних файлів можна додати сервіс в автозавантаження і запустити демон:
dns: ~ # update-rc.d bind9 defaults Adding system startup for /etc/init.d/bind9 ... /etc/rc0.d/K20bind9 -> ../init.d/bind9 /etc/rc1.d / K20bind9 -> ../init.d/bind9 /etc/rc6.d/K20bind9 -> ../init.d/bind9 /etc/rc2.d/S20bind9 -> ../init.d/bind9 / etc /rc3.d/S20bind9 -> ../init.d/bind9 /etc/rc4.d/S20bind9 -> ../init.d/bind9 /etc/rc5.d/S20bind9 -> ../init.d / bind9 dns: ~ # /etc/init.d/bind9 start Starting domain name service ...: bind9.На цьому настройка кешуючого DNS завершена. Всі запити, які потрапляють в кеш DNS сервера він зберігає в оперативній пам'яті комп'ютера і при перезапуску демона ці дані обнуляються. Для перевірки роботи кеша можна виконати команду nslookup mail.ru example.com. , Якщо у відповіді міститься рядок Non-authoritative answer, то адреса прийшов з кешу, а так само якщо виконати dig www.ru. (Або інший домен, якого ще немає в кеші) і через деякий час повторити команду, то час відповіді повинно бути набагато менше.
Давайте розглянемо інші варіанти сервера.
Головний (master) сервер зони
Основний конфиг містить наступні настройки:
dns: ~ # cat /etc/bind/named.conf acl "lan" {192.168.1.1/24; 127.0.0.1; }; options {directory "/ var / cache / bind"; allow-query {any; }; // відповідати на зпроси з усіх інтерфейсів recursion no; // заборонити рекурсивні запити auth-nxdomain no; // для сумісності RFC1035 listen-on-v6 {none; }; // IPv6 нам не потрібен version "unknown"; // не відображати версію DNS сервера при відповідях / * * Розкоментуйте рядки нижче, якщо * хочете дозволити рекрусівние запити * з локальної мережі. * (Так само, необхідно закомментировать * recursion no;) * / # forwarders {// вказуємо DNS сервера для пересилання # 83.239.0.202; // надані провайдером # 213.132.67.110; // бо до них ближче ніж до кореневих #}; # Allow-recursion {lan; }; // рекурсивні запити теж тільки з локальної}; // опис налаштувань кореневих серверів zone "." {Type hint; file "db.root"; }; // описані надалі зони визначають сервер авторитетним для петльових // інтерфейсів, а так само для броадкаст-зон (згідно RFC 1912) zone "localhost" {type master; file "localhost"; }; zone "127.in-addr.arpa" {type master; file "127.in-addr.arpa"; }; zone "0.in-addr.arpa" {type master; file "0.in-addr.arpa"; }; zone "255.in-addr.arpa" {type master; file "255.in-addr.arpa"; }; // опис основної зони zone "example.com" {type master; file "example.com"; allow-transfer {10.0.0.191; }; }; // опис зворотних зон zone "0.0.10.in-addr.arpa" {type master; file "0.0.10.in-addr.arpa"; allow-transfer {10.0.0.191; }; }; zone "1.168.192.in-addr.arpa" {type master; file "1.168.192.in-addr.arpa"; # Allow-transfer {10.0.0.191; }; // зона описує локальну мережу тому її не передали}; // настройки логування logging {channel "misc" {file "/var/log/bind/misc.log" versions 4 size 4m; print-time yes; print-severity yes; print-category yes; }; channel "query" {file "/var/log/bind/query.log" versions 4 size 4m; print-time yes; print-severity no; print-category no; }; category default { "misc"; }; category queries { "query"; }; };Давайте коротко розберемо конфігураційний файл і настройки master сервера: ми налаштовуємо майстер сервер для зони example.com. . Згідно конфіга, наш BIND має робочий каталог / var / cache / bind, сервер відповідає на запити з усіх інтерфейсів (allow-query {any;};), рекурсивні запити обробляє як ітеративні (Recursion no), є майстер-сервером для зони example.com і локальних службових зон (type master). При цьому, якщо необхідно дозволити кешування (тобто рекурсивні запити) для локальної мережі, то необхідно розкоментувати параметри forwarders і allow-recursion і закомментировать recursion no ;.
Так само, для прикладу, я привів можливості BIND Залогуватися все, що відбувається при роботі сервера (можна для цієї мети використовувати syslog ). У розділі logging задаються 2 параметра channel (можна і більше двох - на ваш розсуд), ці параметри дослівно можна назвати "канал" записи. Кожен канал визначає ім'я каналу та налаштування параметрів запису (що записувати, а що - ні і куди писати). Директива category задає яку категорію повідомлень в який канал відправляти. Виходячи з цього, ми маємо: запис стандартної інформації в канал misc, а приходять запити надсилаються в канал query. При цьому, якщо файли журналу досягають 4Мб (size 4m), він перейменовується додаванням до імені .1 і починається запис в новий журнал, числа в кінці інших журналів збільшуються. Журнали з номером, більш зазначеного в version (в нашому випадку 4) видаляються (Керувати ротацією логів можна так само за допомогою logrotate ). Параметри print * визначають заносити в журнал час появи, важливість і категорію інформації. Більш докладно про налаштування розділу logging можна почитати в.
Окремо хочеться описати параметр allow-transfer {10.0.0.191; }; . Даний параметр описує сервери, яким дозволено завантажувати копію зони - т.зв. slave серверів. У наступному прикладі ми розберемо настройку slave DNS.
Для коректної роботи логування необхідно створити відповідний каталог і привласнити необхідні права:
dns: ~ # mkdir / var / log / bind / dns: ~ # chmod 744 / var / log / bind / dns: ~ # ps aux | grep named bind 4298 0.0 3.4 46792 13272? Ssl Jul05 0:00 / usr / sbin / named -u bind root 4815 0.0 0.1 3304 772 pts / 4 S + 18:19 0:00 grep named dns: ~ # chown bind / var / log / bind / dns: ~ # ls -ld / var / log / bind / drwxr - r-- 2 bind root 4096 Лип 6 18:18 / var / log / bind /Давайте далі розглянемо наш файл опису зони example.com. :
dns: ~ # cat /var/cache/bind/example.com $ TTL 3D @ IN SOA ns.example.com. root.example.com. (2011070601; serial 8H; refresh 2H; retry 2W; expire 1D); minimum @ IN NS ns.example.com. @ IN NS ns2.example.com. @ IN A 10.0.0.152 @ IN MX 5 mx.example.com. ns IN A 10.0.0.152 ns2 IN A 10.0.0.191 mx IN A 10.0.0.152 www IN CNAME @а так само в домені in-addr.arpa.
dns: ~ # cat /var/cache/bind/0.0.10.in-addr.arpa $ TTL 3600 @ IN SOA ns.examle.com. root.example.com. (2007042001; Serial 3600; Refresh 900; Retry 3600000; Expire 3600); Minimum IN NS ns.examle.com. IN NS ns2.example.com. 152 IN PTR examle.com. 191 IN PTR ns.example.com. * IN PTR examle.com. dns: ~ # cat /var/cache/bind/1.168.192.in-addr.arpa $ TTL 3600 @ IN SOA ns.examle.com. root.example.com. (2007042001; Serial 3600; Refresh 900; Retry 3600000; Expire 3600); Minimum IN NS ns.examle.com. IN NS ns2.example.com. * IN PTR examle.com.Наша мережа невелика, передбачається, що в мережі зовсім мало машин. Всі сервіси мережі розміщені на одному хості example.com., Тому і master DNS (ns.example.com.) І поштовий сервер (mx.example.com.) Вказує на одну машину (10.0.0.152).
Вторинний (secondary, slave) авторитетний сервер зони
Основна функція slave сервера - автоматична синхронізація опису зони з master сервером. Дане завдання регламентується документом RFC 1034 в розділі 4.3.5. Згідно з цим документом обмін даними між серверами рекомендовано проводити по протоколу TCP , За допомогою запиту AXFR. За цим запитом за одне TCP з'єднання повинна передаватися вся зона цілком (RFC 1035).
Так само, slave DNS-сервер ділить навантаження з master сервером або приймає на себе все навантаження в разі аварії па першому сервері.
Перш ніж приступити до налаштування slave DNS сервера, необхідно перевірити можливість отримання зони вручну із вторинного сервера за допомогою наступної команди:
root @ debian: ~ # dig @ 10.0.0.152 example.com. axfr; << >> DiG 9.7.3 << >> @ 10.0.0.152 example.com. axfr; (1 server found) ;; global options: + cmd example.com. 259200 IN SOA ns.example.com. root.example.com. 2011070801 28800 7200 1209600 86400 example.com. 259200 IN NS ns.example.com. example.com. 259200 IN NS ns2.example.com. example.com. 259200 IN A 10.0.0.152 example.com. 259200 IN MX 5 mx.example.com. mx.example.com. 259200 IN A 10.0.0.152 ns.example.com. 259200 IN A 10.0.0.152 ns2.example.com. 259200 IN A 10.0.0.191 www.example.com. 259200 IN CNAME example.com. example.com. 259200 IN SOA ns.example.com. root.example.com. 2011070801 28800 7200 1209600 86400 ;; Query time: 14 msec ;; SERVER: 10.0.0.152 # 53 (10.0.0.152) ;; WHEN: Fri Jul 8 15:33:54 2011 ;; XFR size: 11 records (messages 1, bytes 258)Отримання зони пройшло успішно. Далі, для настройки підлеглого сервера, алгоритм наступний:
- Скопіювати конфігураційний файл named.conf з master сервера;
- Замінити параметр type master на type slave в тих зонах, для яких він буде вторинним;
- Параметр allow-transfer {10.0.0.191; }; замінити на masters {10.0.0.152;}; в тих зонах, для яких він буде вторинним;
- Видалити зони, що не буде обслуговувати поточний сервер, в тому числі і кореневу, якщо slave не відповідатиме на рекурсивні запити;
- Створити каталоги для логів, як в попередньому прикладі.
Разом, ми отримуємо конфіг slave сервера:
root @ debian: ~ # cat /etc/bind/named.conf options {directory "/ var / cache / bind"; allow-query {any; }; // відповідати на запити з усіх інтерфейсів recursion no; // заборонити рекурсивні запити auth-nxdomain no; // для сумісності RFC1035 listen-on-v6 {none; }; // IPv6 нам не потрібен version "unknown"; // не відображати версію DNS сервера при відповідях}; // описані надалі зони визначають сервер авторитетним для петльових // інтерфейсів, а так само для броадкаст-зон (згідно RFC 1912) zone "localhost" {type master; file "localhost"; }; zone "127.in-addr.arpa" {type master; file "127.in-addr.arpa"; }; zone "0.in-addr.arpa" {type master; file "0.in-addr.arpa"; }; zone "255.in-addr.arpa" {type master; file "255.in-addr.arpa"; }; // опис основної зони zone "example.com" {type slave; file "example.com"; masters {10.0.0.152; }; }; // опис зворотного зони zone "0.0.10.in-addr.arpa" {type slave; file "0.0.10.in-addr.arpa"; masters {10.0.0.152; }; }; // настройки логування logging {channel "misc" {file "/var/log/bind/misc.log" versions 4 size 4m; print-time YES; print-severity YES; print-category YES; }; channel "query" {file "/var/log/bind/query.log" versions 4 size 4m; print-time YES; print-severity NO; print-category NO; }; category default { "misc"; }; category queries { "query"; }; };після перезапуску наш slave сервер благополучно скопіює необхідну йому інформацію з головного сервера, про що буде говорити наявність файлів в каталозі:
root @ debian: ~ # ls -la / var / cache / bind / разом 28 drwxrwxr-x 2 root bind 4096 Лип 8 18:47. drwxr-xr-x 10 root root 4096 Лип 8 15:17 .. -rw-r - r-- 1 bind bind 416 Лип 8 18:32 0.0.10.in-addr.arpa ...... - rw-r - r-- 1 bind bind 455 Лип 8 18:32 example.com ........В принципі, / stroallow-transfer {pngp slave сервер може не зберігати копію зони у себе в файлової системі. Ця копія потрібна тільки в момент старту DNS. Наявність копії зони в файлової системі може позбавити від збою при недоступності master сервера під час запуску slave DNS. Якщо не вказати опцію file в розділі zone, то копія не створюється.
Налаштування netfilter ( iptables ) Для DNS BIND
Власне, налаштувавши роботу сервера, непогано було б його захистити. Ми знаємо, що сервер працює на 53 / udp порту. Почитавши статтю про те, що таке netfilter і правила iptables і ознайомившись з практичними прикладами iptables , Можна створити правила фільтрації мережевого трафіку:
dns ~ # iptables-save # типові правила iptables для DNS * filter: INPUT DROP [7511: 662 704]: FORWARD DROP [0: 0]: OUTPUT DROP [0: 0] -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP # дозволити доступ локальної мережі до DNS сервера: -A INPUT -s 192.168.1.1/24 -d 192.168.1.1/ 32 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT -A OUTPUT -o lo -j ACCEPT -A OUTPUT -p icmp -j ACCEPT -A OUTPUT -p udp -m udp - sport 32768: 61000 -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 32768: 61000 -j ACCEPT -A OUTPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT # дозволити доступ DNS сервера здійснювати вихідні запити -A OUTPUT -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT COMMITЦе типовий приклад! Для завдання правил iptables під Ваші завдання і конфігурацію мережі, необхідно розуміти принцип роботи netfilter в Linux, почитавши вищевказані статті.
Усунення несправностей
Основним джерелом для виявлення проблем з DNS є системний лог . Ось приклад помилок при запуску, коли я помилився з шляхом до файлу зони корових серверів:
Jul 5 18:12:43 dns-server named [4224]: starting BIND 9.7.3 -u bind Jul 5 18:12:43 dns-server named [4224]: built with '--prefix = / usr' '- -mandir = / usr / share / man '' --infodir = / usr / share / info '' --sysconfdir = / etc / bind '' --localstatedir = / var '' --enable-threads '' - enable-largefile '' --with-libtool '' --enable-shared '' --enable-static '' --with-openssl = / usr '' --with-gssapi = / usr '' --with- gnu-ld '' --with-dlz-postgres = no '' --with-dlz-mysql = no '' --with-dlz-bdb = yes '' --with-dlz-filesystem = yes '' - -with-dlz-ldap = yes '' --with-dlz-stub = yes '' --with-geoip = / usr '' --enable-ipv6 '' CFLAGS = -fno-strict-aliasing -DDIG_SIGCHASE -O2 '' LDFLAGS = '' CPPFLAGS = 'Jul 5 18:12:43 dns-server named [4224]: adjusted limit on open files from 1024 to 1048576 Jul 5 18:12:43 dns-server named [4224]: found 1 CPU, using 1 worker thread Jul 5 18:12:43 dns-server named [4224]: using up to 4096 sockets Jul 5 18:12:43 dns-server named [4224]: loading configuration from '/ etc / bind / named.conf 'Jul 5 18:12:43 dns-server named [4224]: reading bu ilt-in trusted keys from file '/etc/bind/bind.keys' Jul 5 18:12:43 dns-server named [4224]: using default UDP / IPv4 port range: [1024, 65535] Jul 5 18:12 : 43 dns-server named [4224]: using default UDP / IPv6 port range: [1024, 65535] Jul 5 18:12:43 dns-server named [4224]: listening on IPv4 interface lo, 127.0.0.1 # 53 Jul 5 18:12:43 dns-server named [4224]: listening on IPv4 interface eth1, 192.168.1.1 # 53 Jul 5 18:12:43 dns-server named [4224]: generating session key for dynamic DNS Jul 5 18: 12:43 dns-server named [4224]: could not configure root hints from '/etc/bind/db.root': file not found Jul 5 18:12:43 dns-server named [4224]: loading configuration: file not found # файл не знайдений Jul 5 18:12:43 dns-server named [4224]: exiting (due to fatal error) Jul 5 18:15:05 dns-server named [4298]: starting BIND 9.7.3 -u bind Jul 5 18:15:05 dns-server named [4298]: built with '--prefix = / usr' '--mandir = / usr / share / man' '--infodir = / usr / share / info' '--sysconfdir = / etc / bind' '--localstatedir = / var' '- -enable-threads '' --enable-largefile '' --with-libtool '' --enable-shared '' --enable-static '' --with-openssl = / usr '' --with-gssapi = / usr '' --with-gnu-ld '' --with-dlz-postgres = no '' --with-dlz-mysql = no '' --with-dlz-bdb = yes '' --with- dlz-filesystem = yes '' --with-dlz-ldap = yes '' --with-dlz-stub = yes '' --with-geoip = / usr '' --enable-ipv6 '' CFLAGS = -fno -strict-aliasing -DDIG_SIGCHASE -O2 '' LDFLAGS = '' CPPFLAGS = 'Jul 5 18:15:05 dns-server named [4298]: adjusted limit on open files from 1024 to 1048576 Jul 5 18:15:05 dns- server named [4298]: found 1 CPU, using 1 worker thread Jul 5 18:15:05 dns-server named [4298]: using up to 4096 sockets Jul 5 18:15:05 dns-server named [4298]: loading configuration from '/etc/bind/named.conf' Jul 5 18:15:05 dns-server named [4298]: using default UDP / IPv4 port range: [1024, 65535] Jul 5 18:15:05 dns-server named [4298]: using default UDP / IPv6 port range: [1024, 65535] Jul 5 18:15:05 dns-server named [4298]: listening on IPv4 interface lo, 127.0.0.1 # 53 Jul 5 18:15: 05 dns-server named [4298]: listening on IPv4 interface eth1, 192.168.1.1 # 53 Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 254.169.IN-ADDR.ARPA Jul 5 18:15:05 dns -server named [4298]: automatic empty zone: 2.0.192.IN-ADDR.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 100.51.198.IN-ADDR.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 113.0.203.IN-ADDR.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 255.255.255.255.IN -ADDR.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 .0.0.0.0.IP6.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 .0.0.0.0.0.0.0.0.IP6.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: DFIP6.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 8.EFIP6.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 9.EFIP6.ARPA Jul 5 18:15:05 dns-server n amed [4298]: automatic empty zone: AEFIP6.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: BEFIP6.ARPA Jul 5 18:15:05 dns-server named [4298]: automatic empty zone: 8.BD0.1.0.0.2.IP6.ARPA Jul 5 18:15:05 dns-server named [4298]: zone 0.in-addr.arpa/IN: loaded serial 1 Jul 5 18:15:05 dns-server named [4298]: zone 127.in-addr.arpa/IN: loaded serial 1 Jul 5 18:15:05 dns-server named [4298]: zone 255.in-addr.arpa/IN: loaded serial 1 Jul 5 18:15:05 dns-server named [4298]: zone localhost / IN: loaded serial 2 Jul 5 18:15:05 dns-server named [4298]: running # запуск пройшов вдалоВідмінним інструментом для діагностики є команди діагностики DNS .
резюме
У поточній статті я описав настройку основних конфігурацій DNS сервера BIND. Метою статті було - дати уявлення про роботу сервера BIND в UNIX. Я практично не торкнувся питання безпеки ДНС і мало торкнувся таких специфічні настройки, як робота сервера в прикордонний режим, коли в різні мережі віддається різна інформація про зону (нах). Для більш глибокого освоєння я надам список додаткових джерел, в яких, я сподіваюся, вдасться отримати потрібну інформацію. На цьому ставлю крапку. До новой зустрічі.
Що читати:
Система доменних імен: http://citforum.ru/internet/dns/khramtsov/
RFC 1034 - Domain Names - Concepts and Facilities: http://tools.ietf.org/html/rfc1034
RFC 1035 - Domain Names - Implementation and Specification: http://tools.ietf.org/html/rfc1035
RFC тисячі п'ятсот тридцять сім - Common DNS Data File Configuration Errors: http://tools.ietf.org/html/rfc1537
RFC тисяча п'ятсот дев'яносто одна - Domain Name System Structure and Delegation: http://tools.ietf.org/html/rfc1591
RFC 1713 - Tools for DNS Debugging: http://tools.ietf.org/html/rfc1713
RFC 2606 - Reserved Top Level DNS Names: http://tools.ietf.org/html/rfc2606
Безпека DNS (DNSSEC): http://book.itep.ru/4/4/dnssec.htm
BIND 9 Administrator Reference Manual: http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.html
Secure BIND Template: http://www.cymru.com/Documents/secure-bind-template.html
Добре розписані параметри конфіга російською: http://www.bog.pp.ru/work/bind.html
Автоматичне створення файлу зони: http://www.zonefile.org/?lang=en#zonefile
Upd 2012.02.14: додав настройку netfilter для DNS
З повагою, Mc.Sim!
Інші матеріали в категорії HOWTO
Org/?