7 Февраля 2010
Поднимаем свой DNS сервер на wl500gp
Погоды нынче в Европах стоят нелётные, все выходные и праздники сидим безвылазно дома, потеплей одевшись. А свитер и многодневная щетина, как известно, располагают к всяческим IT-инновациям.
Прочитал на одном форуме, как прикрутить сервис gmail к своему домену. Регистрируешься на гугле, добавляешь пару DNS записей у себя на хостинге, и получаешь свой собственный gmail по адресу mail.твой_сайт.ру с преферансом и куртизанками. Мысль эта лишила меня покоя и сна. Дело в том, что переехав на личный хостинг, я лишился возможности управлять записями DNS через панель управления хостингом своего бывшего провайдера. По старой дружбе они вписали мой новый айпишник на своём сервере имён, но вот просьбы добавить ещё парочку записей надолго повисли в воздухе. Решено было не ждать милости от кумиров прошлого, а самостоятельно строить светлое будущее. Всего делов-то - поставить и настроить bind на "асусик", на котором крутится этот сайт, и прописать его в качестве сервера имён на nic.ru.
Первая попытка установить bind к успеху не привела: ipkg install bind пишет, что пакет не найден, и предлагает обновиться. Сделал ipkg upgrade. Предлагает обновить порядка 15 пакетов. Согласился, на свою голову. После перезагрузки перестал работать lighttpd...
Через два дня нашёл лекарство - добавил в /opt/etc/lighttpd/lighttpd.conf следующую запись:
server.event-handler = "poll"
Вебсервер ожил, bind поставился, можно продолжать эксперименты.
Я достаточно легко настроил named.conf и зону вот по этому "куроводству". Вот что из этого получилось:
options {
directory "/opt/etc/named";
listen-on {
127.0.0.1;
192.168.1.1;
<внешний IP>;
};
forwarders {
<провайдерский_dns1>;
<провайдерский_dns2>;
};
notify yes;
};
zone "." in {
type hint;
file "/opt/etc/named/root.conf";
};
zone "мой_сайт.ru." in {
type master;
file "/opt/etc/named/мой_сайт.zone";
allow-transfer { any; };
allow-query { any; };
}; Вот так выглядит мой файл зоны со всеми необходимыми записями для гугловских сервисов:
$TTL 3600
@ IN SOA ns1 моя_почта.mail.ru. (
2010012615 ; serial
43200 ; refresh
3600 ; retry
604800 ; expire
3600 ; minimum TTL
)
IN NS ns1
IN NS ns2.trifle.net.
; Адрес домена и поддомены
@ IN A <внешний IP>
www IN A <внешний IP>
ns1 IN A <внешний IP>
ns2 IN A 195.24.128.164
mail IN CNAME ghs.google.com.
docs IN CNAME ghs.google.com.
sites IN CNAME ghs.google.com.
calendar IN CNAME ghs.google.com.
contacts IN CNAME dhs.google.com.
; Почта.
@ IN MX 10 ASPMX.L.GOOGLE.COM.
@ IN MX 20 ALT1.ASPMX.L.GOOGLE.COM.
@ IN MX 20 ALT2.ASPMX.L.GOOGLE.COM.
@ IN MX 30 ASPMX2.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX3.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX4.GOOGLEMAIL.COM.
@ IN MX 30 ASPMX5.GOOGLEMAIL.COM.
Итак, локально сервер заДНСил ))) И даже правильно - mail.volkoff.ru и docs.volkoff.ru смотрят, куда положено - на гугл. Осталось сказать об этом всему остальному миру. Но как известно, чтоб зарегистрировать/изменить регистрацию домена в зоне .ru, необходимо иметь 2 сервера имен, ИЧСХ, в разных подсетях.
Как и рекомендовано в руководстве, я зарегистрировался на бесплатном сервисе, предоставляющем вторичный DNS (ns2.trifle.net). Для этого первичный сервер должен отвечать на запрос синхронизации зоны по 53 порту. Не проблема, порт открыл наружу. Регистрируюсь дальше и получаю вот это:
Ошибка: сервер <мой_IP> не является primary для <мой_сайт.ру> или не отдает AXFR.
Попробовал запросить axfr сам:
dig <имя_зоны> axfr @мой_сайт.ру ;; communications error to <мой_IP>#53: connection reset
И тут до меня доходит: 53 порт возможно занят встроенным DNS/DHCP сервером dnsmasq. Посмотрел лог, и точно, named не может открыть 53 порт:
Jan 27 13:48:48 named[1410]: listening on IPv4 interface lo, 127.0.0.1#53 Jan 27 13:48:48 named[1410]: binding TCP socket: address in use Jan 27 13:48:48 named[1410]: listening on IPv4 interface vlan1, <мой_IP>#53 Jan 27 13:48:48 named[1410]: binding TCP socket: address in use Jan 27 13:48:48 named[1410]: listening on IPv4 interface br0, 192.168.1.1#53 Jan 27 13:48:48 named[1410]: binding TCP socket: address in use
К счастью оказалось, что у dnsmasq можно отключить DNS функциональность, не повредив при этом DHCP. Делается это таким образом: в /tmp/local/etc/dnsmasq.conf добавляем строку port=0, сохраняем флеш традиционным flashfs save; flashfs commit; flashfs enable. Перезагружаем и вуаля. Всё работает, AXFR отдаётся. Вторичный и первичный серверы синхронизировались. Указал их адреса в свойствах своего домена на nic.ru, запустил проверку, и через несколько часов на почту пришло подтверждение, что всё в порядке.
Единственный косяк, обнаруженный позже - перестали ресолвиться локальные имена (в частности, сам роутер по внутреннему имени), но вопрос решился добавлением локальных имён в корневую зону с указанием локальных адресов. Так что, теперь всё замечательно.
Комментарии