Цель: создать собственную доменную зону *.dev Сделать возможным пользование ею по сети. Т.е. чтобы с другого компа по сети можно было открывать сайты типа http://example.dev, http://mysite.dev… Где example.dev и mysite.dev – это name-based виртуальные хосты. Причем каждый раз при создании нового виртуального хоста мне не хочется дополнительно вносить информацию об этом хосте ни в /etc/hosts, ни в конфигурацию dns-сервера bind.
Для начала я опишу процесс установки и настройки bind, а ниже для примера приведу свой пример настройки name-based виртуальных хостов.
Установка и конфигурирование DNS-сервера BIND9
Установка bind9
Тут всё довольно просто:
sudo apt-get install bind9
Настройка bind9
А тут уже веселее.
Редактируем файлик /etc/bind/named.conf.options Я ниже привожу полное его содержание. С выделением жирным добавленных строк:
acl "home" {192.168.1.0/24; 127.0.0.1;};
options {
directory "/var/cache/bind";
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
allow-query {"home";};
};
- acl «home» {192.168.1.0/24; 127.0.0.1;}; – объявляем группу, c ip-адресов которой разрешим делать запросы к нашему dns серверу. Для диапазона 192.168.1.0-255 указываем 192.168.1.0/24
- allow-query {«home»;}; – разрешаем запросы к нашему dns от группы home
Теперь в файл /etc/bind/named.conf дописываем объявление нашей новой зоны
zone "dev" {
type master;
file "/etc/bind/db.dev";
};
Теперь создаём файл /etc/bind/db.dev с таким содержимым:
$TTL 1h
@ SOA dev. root.dev. (
2009050500 ; Serial
3h ; Refresh
1h ; Retry
1w ; Expiry
1d ; TTL
)
@ NS ns1.dev.
@ NS ns2.dev.
@ A 192.168.1.10
* CNAME @
- 192.168.1.10 – это ip моего web-сервера. В принципе это просто моя рабочая машина с установленным веб-сервером и dns-сервером. Но в случае если dns-сервер и web-сервер – это две разные машины, то тогда вместо 192.168.1.10 указываем ip веб-сервера, на котором и находятся наши сайты.
Перезагружаем bind:
sudo /etc/init.d/bind9 restart
Осталось только указать адрес нашего dns сервера для других машин-клиентов (если у вас как и у меня веб-сервер и dns-сервер установлены на той же машине, на которой и работаете, то следующее настройки и для неё надо сделать). Если в сети используется DHCP (лично у меня adsl-модем работает как dhcp-сервер), то на DHCP-сервере в качестве основного dns для раздачи установите ip вашего сервака с bind’ом. Если же ip на всех машинах статически задаётся, то там в качестве основного dns указываем наш сервер.
Если машина-клиент тоже работает под linux, то укажите dns в файле /etc/network/interfaces Типа такого получится:
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
dns-nameservers 192.168.1.10 213.184.225.37 213.184.224.254
Тут после 192.168.1.10 следуют через пробел dns-сервера моего провайдера.
после этого надо перезапустить этот сетевой интерфейс:
sudo ifconfig eth0 down
sudo ifconfig eth0 up
А для надёжности можно и вобще networking перезагрузить: sudo /etc/init.d/networking restart
Пример настройки name-based виртуального хоста
Я использую вот такой конфиг:
<VirtualHost *:80>
ServerName example.dev
ServerAlias www.example.dev
DocumentRoot /var/www/hosts/example/public_html
<Directory /var/www/hosts/example/public_html>
AllowOverride All
Allow from all
</Directory>
ErrorLog /var/www/hosts/example/logs/error_log
CustomLog /var/www/hosts/example/logs/access_log combined
</VirtualHost>
Это у меня находится в файле /etc/apache2/sites-avaliable/example И включаю я этот хост командой:
sudo a2ensite example
sudo /etc/init.d/apache2 reload
В принципе можно было этот конфиг и просто включить в файл /etc/apache2/httpd.conf
Заключение
Ну вот вроде бы и всё. Теперь можно смело создавать виртуальные хосты. И не надо никакой дополнительной информации вносить в /etc/hosts И можно с другого компа легко и быстро получить доступ к нашим сайтам в зоне *.dev
Если есть предложения или замечения – пишите.
PS с начальной настрйокой bind мне помогла статья Быстро поднимаем DNS-сервер (BIND9) под debian
так почему же все таки не надо вносить информацию в /etc/hosts?
Link | Декабрь 29th, 2009 at 10:16
в /etc/hosts ничего не надо вносить потому что ты ведь настраиваешь dns-сервер и теперь хост, на котором размещается определённый ресурс ты получаешь от dns сервера. Ну считай аналогично, как в инете. У тебя ведь не прописаны в /etc/hosts по какмому ip искать каждый сайт. Эта вся инфа тянется с dns серверов.
Link | Декабрь 29th, 2009 at 10:19
сделал как у тебя написано. Создал свою зону lan
$TTL 90
@ IN SOA lan. root.lan(
и т.д.
)
@ IN NS ns.lan
@ IN A 192.168.0.122(ip машины на которой утсновлен bind, на ней же стоит apache и находятся виртуальные хосты)
* CNAME @
дальше создал sites-available/test.conf
ServerName test.lan
DocumentRoot /var/www/test
и т.д.
в файле sites-available/default прописано
ServerName lserver.lan
DocumentRoot /var/www
и т.д
a2ensite и все как положено сделал, хосты видно
при заходе на test.lan вижу корневую папку /var/www/test
при заходе на lserver.lan вижу ту же саму папку
если с другого компа набрать http://192.168.0.122/ то опять вижу ту же самую папку, а не /var/www
и если нарнать что-то.lan, то опять попадаю в папку /var/www/test
пробовал прописывать в /etc/hosts
127.0.0.100 test.lan
и в файле db.lan
test IN A 127.0.0.56
но то же самое, все хосты смотрят в одну и ту же папку
Link | Декабрь 29th, 2009 at 11:34
127.0.0.100 test.lan
и в файле db.lan
test IN A 127.0.0.100
Link | Декабрь 29th, 2009 at 11:51
2pikcher: ты там точки не везде написал. может из-за этого проблемы. напиши вот так:
—
$TTL 1h
@ IN SOA lan. root.lan. (
и т.д.
)
@ IN NS ns.lan.
@ IN A 192.168.0.122
* CNAME @
—
Ну и плюс в конфигах виртуальных хостов у тебя прописаны ErrorLog и CustomLog? если да, то посмотри, что туда пишется.
ну и ты указал свой комп с dns-сервером в качестве dns-сервера на клиентской машине? вывели cat /etc/resolv.conf
Link | Декабрь 29th, 2009 at 23:49
DocumentRoot /var/www/hosts/example/public_html
обычно пишут в Directory то же самое что и в document root чтобы описать правила просмотра папки
у тебя с каким смыслом они разные?
Link | Декабрь 30th, 2009 at 22:13
точки стоят это я так написал здесь.
Link | Декабрь 30th, 2009 at 22:14
так ведь проблема не в прописании dns на клиентской машине, я это сделал, в resolf.conf тоже прописал, видно машину, но как я описал странно идет преобразование, видно что-то одно или root сервера или папку test
Link | Декабрь 31st, 2009 at 00:47
насчет DocumentRoot и Directory – это я очепятался тут. должны быть одинаковыми. я поправил в статье. пасиб)
Link | Декабрь 31st, 2009 at 11:12
видимо что-то с настройками виртуальных хостов тогда. сбрось сюда текст:
cat /etc/apache2/sites-available/test.conf
cat /etc/apache2/sites-available/default
И на всякий случай: после a2ensite test.conf default ты запускал /etc/init.d/apache2 reload ? в папке /etc/apache2/sites-enabled/ появились символические ссылки на твои файлы test.conf и default?
Link | Декабрь 31st, 2009 at 11:19
pikcher, как успехи? решилась проблема? в чём был трабл?
Link | Январь 7th, 2010 at 13:02
проблему решил! Да, это все настройки виртуальных хостов.
Неправильно писал
вместо
ServerName virtualhostname
я писал
ServerName virtualhostname
когда это исправил все заработало. Вместо * можно писать IP адрес сервера.
Link | Январь 17th, 2010 at 23:22
у тебя режутся теги
вместо
VirtualHsot *:80
ServerName virtualhostname
я писал
VirtualHost virtualhostname:80
ServerName virtualhostname
Link | Январь 17th, 2010 at 23:25
пунятн. ну я рад, что всё получилось! ;)
оффтопик: кстати, если у тебя есть теперь live и dev сайт, между которыми тебе иногда надо переключаться побыстрому, то могу порекомендовать плагин для ff: server switcher. мега штука! =) лично мне такого плагина оч не хватало. и осталось только для chrome найти аналогичный и всё будет здорово)
Link | Январь 28th, 2010 at 01:55
Ни как не могу сделать. Помогите плиз!
Link | Июнь 30th, 2011 at 20:06