Локальный DNS для разработчика
Итак. У нас море проектов, море виртуалок. И мы хотим как-то удобно с этим всем работать.
Мне по нраву выделять отдельную доменную зону для всех своих виртуалок и подключать к ней нужные адреса.
Предположим, что все проекты у нас будут собраны в доменной зоне *.dev (удобно же).
И каждый из них будет резолвиться по разным адресам.
Составим для себя список хотелок:
- машины поднимаются вагрантом или еще какой системой (это не так уж и важно)
- после появления машины в сети ее ip связывается с доменом проекта, который на ней крутится
- после завершения привязка уделяется
Начинаем хотелки реализовывать.
Ставим named
$ sudo yum install named
Заставляем его слушать только локалхост (он же девелоперский).
Для этого редактируем named.conf и добавляем в раздел options
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
Теперь нам надо подключить нашу новую зону.
Добавляем подключение описания в named.conf
zone "dev" IN {
type master;
file "named.dev";
allow-query {any;};
allow-update {
127.0.0.1;
::1;
};
};
В этом описании мы сразу же видим раздел allow-update, который позволяет удаленно изменять зону при помощи команды nsupdate. Разрешаем правку только с локалхоста.
Теперь непосредственно сам файл зоны прямого преобразования - /var/named/named.dev
$ORIGIN dev.
$TTL 86400 ; 1 day
@ IN SOA dev. rname.invalid. (
4 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dev.
A 127.0.0.1
AAAA ::1
* IN A 127.0.0.1
Последняя строчка нам нужна для того, чтобы все домены, для которых не прописан адрес резолвились на локалхост.
Все. Нам осталось перезапустить.
$ sudo service named restart
Проверяем
$ nslookup test.dev 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: test.dev
Address: 127.0.0.1
Кдасс. А как нам связывать домен с адресом?
Для этого нам нужен скрипт.
#!/bin/bash
TTL=86400
RECORD=$1
IP=$2
(
echo "server dev."
echo "zone dev"
echo "update delete ${RECORD} A"
echo "update add ${RECORD} ${TTL} A ${IP}"
echo "send"
) | /usr/bin/nsupdate
Пробуем
$ ./named.sh test.dev 1.1.1.1
``````shell
$ nslookup test.dev 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: test.dev
Address: 1.1.1.1
Возможные проблемы:
- неправильно установлены права на папку /var/named
- неправильно указан адрес с которого можно обновлять зону
- запрет в selinux - решается выполнением
shell $ sudo setsebool -P named_write_master_zones 1
Теперь можно настроить окружение так, чтобы при запуске виртуалки ее адрес обновлялся в файле зоны через скрипт в автоматическом режиме.
Категории: Разработка HowTo