DNS сервер

BIND — DNS сервер

Вместо файла hosts в Windows — проще установить свой DNS сервер BIND, управлять которым (и, главное — добавлять новые домены/субдомены) намного проще.
Иногда изменения в hosts применяются только после рестарта системы, не смотря на ipconfig /flushdns и другие попытки его «оживить». Но и в нормальном режиме, этого может быть не достаточно. Особенно, если необходимо открывать имена с соседних компьютеров в локальной сети. Или еще интересней открывать страничку с телефона(смарфона).

Загружаем BIND https://www.isc.org/downloads.

Распаковываем, и запускаем BINDInstall.exe:

Редактируем переменные окружения:

В свойствах системы, необходимо найти «Дополнительные параметры системы»

И далее на вкладке «Дополнительно» -> «Переменные среды»

В PATH добавляем C:\Program FilesISC\BIND\9bin:

Запускаем cmd от имени администратора (ConEmu в данном примере):

Генерируем ключ для управления BIND:

C:Userssetevoy>rndc-confgen -a
wrote key file «C:\Program Files\ISC BIND 9\etcrndc.key»

Переходим в каталог BIND-а:

C:Userssetevoy>cd  c:\Program Files\ISC BIND 9\
В каталоге etc создаём файл named.conf:

c:\Program Files\ISC BIND 9 > notepad named.conf

Вписываем настройки в этом файле:

options {
  directory "c:\Program Files\ISC BIND 9\etc";
  listen-on { 192.168.1.146; 127.0.0.1; };
  allow-transfer { 192.168.1.1; };

  forwarders {
  192.168.1.1;
  8.8.8.8;
  };

};

logging {
  channel default-log {
    file "c:\Program Files\ISC BIND 9\etc\named.log";
    severity debug;
    print-severity yes;
    };
  category default {
    default-log;
    };
};

Кратко параметры:

listen-on — на каких адресах слушать, 192.168.1.146 — адрес Win-машины;
allow-transfer — кому разрешено выполнять рекурсивные запросы, в данном примере 192.168.1.1 — домашний роутер со своим DNS;
forwarders — адреса DNS-серверов, на которые пересылать запросы о неизвестных зонах (провайдер, например);
Сохраняем, закрываем.

Перезапускаем, что бы проверить что конфиг правильный:

C:Userssetevoy>rndc reload
server reload successful

Синтаксис файла можно проверить так:

c:\Program Files\ISC BIND 9\bin>named-checkconf  ..\etc\named.conf

В случае ошибки, получите : named.conf : syntax error
А в случае правильного синтаксис, сообщений не будет вовсе.

 

В случае ошибки перезапуска

C:Userssetevoy>rndc reload
rndc: ‘reload’ failed: permission denied

Причиной, может быть отсутствие доступа к лог файлу named.log
Создаём пустой файл:

C:Userssetevoy>type NUL > «c:\Program Files\ISC BIND 9\etc\named.log»
Кликаем по нему правой кнопкой — Свойства > Безопасность, жмём Изменить:

Потом — Добавить:

Дополнительно:

Поиск:

Находим named:

И устанавливаем полный доступ:

 

Теперь, для настройки любой системы на наш локальный DNS сервер, можно сделать следующее:

Переходим в настройки сети и добавляем 127.0.0.1 в список DNS-серверов:

Если же нужно настроить другой компьютер в локальной сети, на наш локальный сервер DNS, то укажите, в этот альтернативный раздел, IP адрес компьютера на котором установили сервер . А еще лучше, будет указать альтернативный DNS в настройках роутера. Это позволит всем устройствам локальной сети, включая мобильные телефоны, использовать локальные имена доменов.

 

Переходим в Управление:

Находим ISC BIND и запускаем:

Проверяем порт:

c:\Program Files\ISC BIND 9>netstat -a -b | find "127.0.0.1:53"
TCP 127.0.0.1:53 setevoy-main:0 LISTENING
^C^C
c:\Program Files\ISC BIND 9>netstat -a -b | find "192.168.1.146:53"
TCP 192.168.1.146:53 setevoy-main:0 LISTENING

 

Проверяем работу самого BIND:

c:\Program Files\ISC BIND 9>nslookup google.com 127.0.0.1
╤хЁтхЁ: UnKnown
Address: 127.0.0.1

Не заслуживающий доверия ответ:
╚ь : google.com
Addresses: 2a00:1450:400d:806::200e
216.58.209.206

Теперь можно добавим локальный домен.

В конец файла named.conf добавляем:

view source
zone “domain.local” {
  type master;
  file “c:\Program Files\ISC BIND 9\etc\domain.local.txt”;
};

Вот как будет выглядеть полное содержимое файла:

options {
 directory "c:\Program Files\ISC BIND 9\etc";
 listen-on { 192.168.1.146; 127.0.0.1; };
 allow-transfer { 192.168.1.1; };

forwarders {
 192.168.1.1;
 8.8.8.8;
 };
};

logging {
 channel default-log {
 file "c:\Program Files\ISC BIND 9\etc\named.log";
 severity debug;
 print-severity yes;
 };
 category default {
 default-log;
 };
};

zone "domain.local" IN {
 type master;
 file "c:\Program Files\ISC BIND 9\etc\domain.local.txt";
};

 

Создаём файл:

c:\Program Files\ISC BIND 9\etc\domain.local.txt
В него добавляем:

view source
$TTL 604800
@ IN SOA domain.local. root.domain.local. (
          2015030801 ; Serial
          604800 ; Refresh
          86400 ; Retry
          2419200 ; Expire
          604800 ) ; Negative Cache TTL
;

@ IN NS ns1.domain.local.
@ IN NS ns2.domain.local.
@ IN A 192.168.1.146
ns1 IN A 192.168.1.146
ns2 IN A 192.168.1.146
* IN A 192.168.1.146

ВАЖНО: в конце описания зоны должна быть пустая строка.
ВАЖНО: при каждом изменении файла зоны — его Serial необходимо увеличить на 1: 2015030801 > 2015030802 и т.д.
ВАЖНО: при копировании отсюда — проверяйте кавычки — блог (или браузер?) иногда ставит «неправильные» (косые вместо прямых).

 

Проверяем файл зоны:

c:\Program Files\ISC BIND 9>named-checkzone -d domain.local etc\domain.local.txt
loading "domain.local" from "etcdomain.local.txt" class "IN"
zone domain.local/IN: loaded serial 10
OK

Перегружаем зоны BIND:

c:\Program Files\ISC BIND 9>rndc reload
server reload successful

Проверяем:

c:\Program Files\ISC BIND 9>nslookup domain.local 127.0.0.1
╤хЁтхЁ: UnKnown
Address: 127.0.0.1

╚ь : domain.local
Address: 192.168.1.146

 

Нормальным dig-ом:

$ dig @127.0.0.1 domain.local
 
; <<>> DiG 9.10.2 <<>> @127.0.0.1 domain.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31881
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;domain.local. IN A
 
;; ANSWER SECTION:
domain.local. 604800 IN A 192.168.1.146
 
;; AUTHORITY SECTION:
domain.local. 604800 IN NS ns2.domain.local.
domain.local. 604800 IN NS ns1.domain.local.
 
;; ADDITIONAL SECTION:
ns1.domain.local. 604800 IN A 192.168.1.146
ns2.domain.local. 604800 IN A 192.168.1.146
 
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 08 08:48:10 ope 2015
;; MSG SIZE rcvd: 125

 

И пингуем:

c:\Program Files\ISC BIND 9>ping domain.local
 
Обмен пакетами с domain.local [192.168.1.146] с 32 байтами данных:
Ответ от 192.168.1.146: число байт=32 время<1мс TTL=128
Ответ от 192.168.1.146: число байт=32 время<1мс TTL=128

 

Источники:

Bind DNS

VirtualHost