Вместо файла 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 FilesISC BIND 9etcrndc.key"
Переходим в каталог BIND-а:
C:Userssetevoy>cd c:Program FilesISC BIND 9
В каталоге etc
создаём файл named.conf
:
c:Program FilesISC BIND 9>notepad etcnamed.conf
Вписываем настройки:
options { directory "c:Program FilesISC BIND 9etc"; 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 FilesISC BIND 9etcnamed.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 FilesISC BIND 9>named-checkconf etcnamed.conf etcnamed.conf:29: syntax error near '}'
В случае ошибки:
C:Userssetevoy>rndc reload rndc: 'reload' failed: permission denied
Создаём пустой файл:
C:Userssetevoy>type NUL > "c:Program FilesISC BIND 9etcnamed.log"
Кликаем по нему правой кнопкой – Свойства > Безопасность, жмём Изменить:
Потом – Добавить:
И устанавливаем полный доступ:
Переходим в настройки сети и добавляем 127.0.0.1
в список DNS-серверов:
c:Program FilesISC 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 FilesISC BIND 9>netstat -a -b | find "192.168.1.146:53" TCP 192.168.1.146:53 setevoy-main:0 LISTENING
Проверяем работу самого BIND:
c:Program FilesISC 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
добавляем:
zone “domain.local” { type master; file “c:Program FilesISC BIND 9etcdomain.local.txt”; };
Полное содержимое файла:
09:51:45 [setevoy@setevoy-main ~] $ cat /cygdrive/c/Program Files/ISC BIND 9/etc/named.conf options { directory "c:Program FilesISC BIND 9etc"; 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 FilesISC BIND 9etcnamed.log"; severity debug; print-severity yes; }; category default { default-log; }; }; zone "domain.local" IN { type master; file "c:Program FilesISC BIND 9etcdomain.local.txt";
Создаём файл:
c:Program FilesISC BIND 9>notepad etcdomain.local.txt
В него добавляем:
$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 FilesISC BIND 9>named-checkzone -d domain.local etcdomain.local.txt loading "domain.local" from "etcdomain.local.txt" class "IN" zone domain.local/IN: loaded serial 10 OK
Перегружаем зоны BIND:
c:Program FilesISC BIND 9>rndc reload server reload successful
Проверяем:
c:Program FilesISC 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 FilesISC 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
Вроде всё.
Настройка ничем не отличается от настройки на Linux/FreeBSD, кроме установки.
После настройки – уровень логгирования можно изменить на warning
:
severity warning;
Ссылки по теме