Drugi artykuł z cyklu Konfigurujemy VPS. Tym razem zajmę się konfiguracją DNS - czyli zapewnieniem naszej maszynie sensownej nazwy.
Aby nie używać na okrągło zaimków, powiedzmy, że chcemy mieć
supersajt.pl
(a także blog.supersajt.pl
, mail.supersajt.pl
i parę
innych).
Planowana konfiguracja
Działający DNS wymaga dwóch elementów:
- kupionej domeny i jej hostingu
- obsługi delegacji, tj. odpowiadania na zapytania DNS dotyczące naszej domeny.
Pierwszy z tych elementów zapewnia nam firma rejestrująca domeny. Jej
usługa z grubsza działa tak: ilekroć ktoś będzie szukał supersajt.pl
czy blog.supersajt.pl
, poinformuje ona go, że informacje o tej
domenie są dostępne pod takimi a takimi adresami IP (delegacjami) i
tam trzeba pytać. Owe adresy ustawiamy u rejestratora domeny (zwykle przy
pomocy jakichś formularzy webowych), możemy je zmieniać.
Właściwie żadnej swobody - poza wyborem firmy świadczącej usługę - tu nie mamy.
Drugi element to uruchomienie faktycznego serwera DNS, odpowiadającego na zapytania o naszą domenę. A dokładniej - kilku. Jednego głównego, gdzie faktycznie wbijamy wszystkie adresy i pokrewne informacje i choć jednego (najlepiej paru) zapasowych (secondary), które będą regularnie kopiować dane z głównego i go odciążać (oraz zastępować w okresach niedostępności).
Te puzzle można układać różnorodnie. Czasami główny i/lub secondary DNS hostowany przez providera dostaniemy jako bonus kupując VPS, czasem usługę taką sprzeda firma zajmująca się rejestracjami domen, czasem ktoś jeszcze inny. Ja obecnie lubię następujące podejście:
Główny serwer DNS dla domeny uruchamiam na naszym własnym VPS. Tam wpisuję wszystkie adresy i inne informacje o domenie. Mam większą kontrolę, niż robiąc to przez ewentualne webowe interfejsy, a przede wszystkim … tak jest znacznie wygodniej.
Do tego jednak, korzystam z bonusa mojego dostawcy VPS - Linode świadczy (bez dopłat) zapasowy DNS na czterech różnych serwerach. Skonfiguruję je tak, by kopiowały dane z mojej maszyny. Dodam też zapasowy DNS grzecznościowo świadczony mi przez firmę, w której pracuję.
Po tym wszystkim, jako delegacje u rejestratora ustawię jedynie serwery zapasowe, głównego w ogóle tam nie podając. W ten sposób ruch związany z zwykłymi zapytaniami DNS nie obciąża mojej maszyny, jest ona jedynie od czasu do czasu (zależnie od ustawień czasu ważności) odpytywana o strukturę domeny przez zapasowe serwery.
To rozwiązanie jest możliwe, bo Linode daje mi aż cztery zapasowe DNSy. Gdybym dostał tylko jeden (albo miał tylko jeden zapasowy DNS użebrany u kolegi), oczywiście podałbym mój własny serwer jako delegację.
Rejestracja domeny
Nie będę się mądrzył na temat wyboru firmy rejestrującej, bo szczegółowego przeglądu nie robiłem. Warto tylko pamiętać, że wszelkie domeny za złotówkę kosztują tyle wyłącznie przy pierwszej rejestracji, odnowienie na następny rok kosztuje już kilkadziesiąt złotych.
Swoją domenę kupiłem na domeny.org ale nie rekomenduję, mają nieprawdopodobnie niewygodny interfejs do zarządzania delegacjami.
Tak czy siak - kupujemy domenę (by ją zaklepać), nie konfigurujemy jeszcze delegacji i przechodzimy do następnego punktu.
Skonfigurowanie serwera DNS
Konfiguracja serwera DNS uchodzi za trudną i nieprzyjemną, a usługa za istotnie obciążającą maszynę. Winny temu jest BIND - kawał koszmarnego oprogramowania z historycznych względów wciąż najpopularniejszy przy tym zastosowaniu. Nie będziemy go używać.
Zamiast tego zainstalujemy MaraDNS - serwer malutki, sprawny i wymagający raptem paru linijek konfiguracji.
Instalacja programu (w ujęciu Debian/Ubuntu):
$ sudo apt-get install maradns
Następnie musimy stworzyć/przeedytować dwa pliki w katalogu /etc/maradns
.
Pierwszy to /etc/maradns/mararc
. Powinien wyglądać jakoś tak:
# Wpisujemy własny adres IP maszyny i 127.0.0.1
ipv4_bind_addresses = "207.192.73.20,127.0.0.1"
chroot_dir = "/etc/maradns"
csv2 = {}
# Obsługiwane domeny. Z lewej nazwa domeny (uwaga
# na końcową kropkę) z prawej nazwa pliku z adresami.
# W tym przykładzie domena jest tylko jedna.
csv2["supersajt.pl."] = "db.supersajt.pl"
# Tu wpisujemy adresy wszystkich zapasowych DNSów,
# bez tych wpisów nie będą mogły pobrać informacji
# o domenie. Zostawiłem niżej autentyczne adresy
# serwerów Linode
# (http://www.linode.com/forums/viewtopic.php?t=3319)
recursive_acl = "127.0.0.1,67.18.186.57,207.192.70.10,75.127.96.10,65.19.178.10,69.93.127.10"
zone_transfer_acl = "67.18.186.57,207.192.70.10,75.127.96.10,65.19.178.10,69.93.127.10"
hide_disclaimer = "YES"
# Do poprawienia zgodnie z "id maradns"
maradns_uid=108
maradns_gid=114
Drugi to /etc/maradns/db.supersajt.pl
(czy jak tam go nazwaliśmy
wyżej, w linijce z csv2
). Może wyglądać np. tak:
supersajt.pl. 207.192.63.20
www.supersajt.pl. CNAME supersajt.pl.
mail.supersajt.pl. CNAME supersajt.pl.
blog.supersajt.pl. CNAME supersajt.pl.
feeds.supersajt.pl. CNAME feeds.feedburner.com.
dom.supersajt.pl. 212.46.29.135
supersajt.pl. MX 10 mail.supersajt.pl.
Co tu mamy? Kilka explicite zapisanych mapowań nazwy na adres IP
(supersajt.pl
to 207.192.63.20, dom.supersajt.pl
to 212.46.29.135),
kilka aliasów (np. www.supersajt.pl
ma być aliasem do supersajt.pl
).
Do tego MX
- czyli informacja, jaka maszyna przyjmuje maile kierowane
do naszej domeny (tu - mail do janek@supersajt.pl
zostanie skierowany
do serwera SMTP działającego na mail.supersajt.pl
).
I tyle wystarczy. Można tu dodać parę innych rzeczy (np. rekordy TXT
z tekstowymi opisami, czy rekordy SPF
, o których napiszę przy okazji
konfiguracji poczty), można poustawiać parametry typu TTL (czas
ważności - domyślna wartość w MaraDNS to 1 dzień), ale nie jest to
konieczne - powyższa konfiguracja w zupełności wystarczy. Szczegółowy
opis formatu tego pliku zawiera man csv2
.
Po edycji (tej, a także po każdej korekcie wpisów) restartujemy:
$ sudo /etc/init.d/maradns restart
Skuteczność zmian możemy nastychmiastowo testować nakazując poleceniom
typu host
czy nslookup
używać naszego serwera, np (z vpsa):
$ host supersajt.pl localhost
czy (z domu/pracy, oczywiście dając poprawny adres IP):
$ host mail.supersajt.pl 207.192.63.20
$ dig @207.192.63.20 supersajt.pl
Oczywiście te adresy nie są jeszcze widoczne publicznie, aby tak się stało - potrzebujemy poprawnie ustawić delegacje (jeśli ich skonfigurowanie zajmie nam trochę czasu, możemy na razie ustawić delegację skierowaną na naszą maszynę).
W przyszłości, gdy będziemy robić zmiany, będziemy też spotykać opóźnienia. DNS jest wielopoziomowo cacheowany i rozpowszechnienie informacji o zmianie delegacji czy adresów trwa. Jeśli przewidujemy częste korygowanie niektórych adresów, możemy im wpisać krótszy TTL, np.
test.supersajt.pl. +7200 A 110.11.12.15
(dwie godziny zamiast domyślnego dnia, 7200 to czas ważności w sekundach).
Na czas zmiany delegacji (czyli przenoszenia serwerów DNS na inne adresy) niestety nie mamy wpływu, przy ostatnich przenosinach normowało mi się to około dwóch dni (tj. jeszcze po dwóch dniach trafiały się zapytania do serwera, który nie był już ustawiony jako delegacja).
Skonfigurowanie zapasowego DNS
Konfiguracja zapasowego DNS wymaga tylko dwóch informacji:
- nazwy domeny (tu -
supersajt.pl
), - adresu IP na którym działa główny serwer (tu -
207.192.63.20
, czyli adres naszej maszyny)
Sposób jej wprowadzenia ... może być różny. Koledze grzecznościowo robiącemu nam zapasowy DNS wyślemy te dwie informacje mailem. Podobnie postąpimy jeśli usługę świadczy nasz VPS ale obsługuje ją ręcznie.
W przypadku Linode wystarczy użyć zakładkę DNS Manager
i dodać nową zapasową (slave
) domenę (Add a new domain zone
,
po czym wpisujemy nazwę domeny, wybieramy typ Slave
i podajemy
IP naszego głównego serwera). W efekcie wszystkie cztery
serwery DNS udostępniane przez Linode (ns1.linode.com
,
ns2.linode.com
, ns3.linode.com
i ns4.linode.com
) zaczną
obsługiwać naszą domenę (regularnie pobierając aktualne
dane od naszego głównego serwera).
Aha: nie ma ścisłych reguł ile powinno być zapasowych DNSów. Dobrze, jeśli domena ma choć trzy delegacje, najlepiej w różnych lokalizacjach (nawet w przypadku takim jak Linode warto sobie załatwić jakiś zapasowy DNS w Polsce).
Ustawienie delegacji
Jak już pisałem wyżej, jeśli mamy kilka wydajnych zapasowych
DNSów, warto wywalić główny serwer z listy delegacji i wpisać
tam tylko zapasowe. Zaoszczędzimy odrobinę pasma - nasza
maradns
będzie używana wyłącznie do transferów, delegowane
maszyny będą też wydajniejsze.
Szczegółowej instrukcji nie podaję, bo zależy od rejestratora domeny.
Odwrotny DNS
Ostatnim krokiem konfiguracji DNS jest ustawienie poprawnego reverse DNS, czyli zwrotnego mapowania adresu IP na nazwę. Tym mapowaniem zarządza dostawca VPS (podobnie jak reverse DNS naszej domowej maszyny zarządza dostawca internetu).
Reverse DNS nie jest absolutnie niezbędny, ale jeśli go nie ustawimy, możemy mieć trochę problemów - wiele serwerów mailowych wywali do kosza pocztę wysyłaną z naszej maszyny, niektóre usługi sieciowe mogą mieć opóźnienia (nawet w trakcie logowania) itp.
Dobre VPSy pozwalają ustawić reverse DNS przy pomocy aplikacji
webowej. Na Linode wchodzimy do szczegółów maszyny, wybieramy
zakładkę Network
, klikamy Reverse DNS
i dajemy się
prowadzić wizardowi.
Gorsze VPSy mogą wymagać mailowej korespondencji z administratorem.
Aktualizacja nazwy hosta i lokalnych informacji
Na koniec, wpisujemy właściwą nazwę (tu - supersajt.pl
) do pliku
/etc/hostname
(tworząc go, jeśli go nie było). Znowu - nie jest
to konieczne, ale ma wpływ na zawartość logów, prompt shella itp.
Przeglądamy też /etc/hosts
(umieszczenie mapowania nazwy na IP
także tam nie jest niezbędne, ale trzeba usunąć ewentualne
błędne mapowanie).
Podsumowanie
Po wykonaniu opisanych tu operacji mamy poprawnie skonfigurowany DNS i odwrotny DNS. W szczególności, nie musimy już używać adresu IP przy logowaniu się via ssh, zadziała
$ ssh tadeusz@supersajt.pl
Dopisek
W ostatnich latach popularyzuje się także inny lekki serwer DNS – NSD. Konfiguracja również nie jest trudna – np. patrz ten tutorial.