Ubuntu, fake DNS Server или настройка локального DNS сервера для веб-разработчика

Ubuntu, fake DNS Server или настройка локального DNS сервера для веб-разработчика

Зачем это надо.

На рабочей станции разработчика есть NN локально поднятых проектов. Этот разработчик для каждого проекта проделывает следующее:

    1. Для работы с локальной копией проекта редактирует конфиг своего веб сервера (apache, lighttpd etc.) и указывает в конфиге имя хоста для этого локального проекта.

    2. Потом перезапускает веб сервер.

    3. Потом идет редактировать /etc/hosts Прописывает там имя нового хоста и локальный ip.

    4. Потом выясняет что этот прописанный хост перекрывает тот, что внезапно нужен в интернете, или он ошибся когда прописал имя в конфиге веб-сервера или в hosts.

В итоге всего этого занудства как правило тратится драгоценная нервная энергия которую можно потратить более эффективно на что-то поинтереснее.

Что я предлагаю сделать.

Я предлагаю сделать локальный домен (в примере .mydev) и сократить процедуру выше до двух шагов:

    1. Прописываем в конфиг веб-сервера новый хост с именем вида projectname.mydev

    2. Перезапускаем веб-сервер

И всё. Радостно начинаем допиливать наш проект по заданному имени.

Что будем делать, TODO

1. Установим DNS сервер.

sudo apt-get install bind9

2. Идем разглядывать собственно конфиги. Принцип этой штуки состоит в том, что на данный момент при обращении к какому-либо хосту (это грубая схема) наша машинка идет на DNS-сервер выданный ему провайдером или прописанный вручную, в соответствии с настройками. Получает собственно у DNS-а IP-адрес хоста ну и отправляется за данными в сторону этого IP. Дальше нам не интересно. Как будет. А будет так: при обращении к какому-либо хосту, мы будем обращаться к локальному DNS серверу, который будет проверять наши правила и если запрос не попадает под наши правила, то наш локальный DNS идет и спрашивает тоже самое у провайдерского DNS-а. И отдает нам уже собственно его (провайдера) ответ. Итак, идем к конфигам

cd /etc/bind

REM: Я пользуюсь mc. Нам понадобятся права суперпользователя, так что либо sudo mc, либо sudo mcedit filename при редактировании каждого файла, вопрос с правами я далее затрагивать не буду.

3. Открываем на редактирование named.conf.options

Тут нас интересует секция forwarders её нам нужно раскомментировать и указать IP адрес(а) DNS сервера провайдера (или может быть роутера, смотря как организован выход в интернет). Сохраняем, выходим.

4. Открываем на редактирование named.conf.default-zones

Тут нам вниз нужно добавить новую зону. Выглядеть новая секция будет вот так:

zone "mydev" {

type master;

file "/etc/bind/db.mydev";

};

5. По указанному пути создаем файлик

sudo cp /etc/bind/db.local /etc/bind/db.mydev

То есть просто делаем копию описания локальной зоны. Нам нужно будет в ней кое-что отредактировать. Итак копию сделали, теперь:

6. Открываем на редактирование db.mydev

Там нам нужно исправить всего несколько строк. В итоге наш db.mydev будет выглядеть вот так:

$TTL 604800

@ IN SOA mydev. root.mydev. (

2 ; Serial

604800 ; Refresh

86400 ; Retry

2419200 ; Expire

604800 ) ; Negative Cache TTL

@ IN NS mydev.

@ IN A 127.0.0.1

* IN A 127.0.0.1

@ IN AAAA ::1

Сравните с оригинальным db.local для того чтоб было понятно что произошло. По сути ничего особенного.

7. Теперь остается только перезапустить наш DNS

sudo /etc/init.d/bind9 restart

8. Ну и проверяем теперь как это работает.

ping 11.mydev

ping 22.mydev

Если работает то IP должен быть тот что вы указали (в примере 127.0.0.1) Но сейчас ничего не работает. Потому что…

9. Забыл рассказать про грабли. NetworkManager автоматически прописывает в /etc/resolv.conf адрес DNS провайдера. Если там будет прописан внешний DNS, то наша поделка работать не будет. Обращения в сеть просто пойдут мимо неё. Чтобы это дело устранить, нужно зайти в свойства текущего подключения к интернету, идем:

«Изменить соединения» => Выбираем наше соединение => «Параметры IPv4»

Тут указываем IP нашего локального DNS (в примере 127.0.0.1), сделать это можно выбрав метод «DHCP, только адрес». Этого должно быть достаточно. После этого через NetworkManager соединение разрываем и снова устанавливаем. Если все ок, то в /etc/resolv.conf мы должны увидеть наш искомый IP, тот что прописали как DNS в NetworkManager.

10. Вот теперь проверяем результат.

Вот собственно и всё. Теперь можно не трогать /etc/hosts

http://habrahabr.ru/blogs/personal/85067/