stawiamy własny dns serwer

własny dns serwer

Powiem na początek ,że poszedłem na zupełną łatwiznę wykorzystując panel keyhelp jako serwer master i dwa kolejne serwery oparte o NSD jako serwery slave. Mogłem wszystko oprzeć o NSD ale z racji że jestem leniwy nie miałem ochoty pamiętać za każdym razem by zmienić numer seryjny po każdej aktualizacji rekordów dla konkretnej domeny. Co nie zmienia faktu że i taki zestaw posiadam który obsługuje zaledwie dwie domeny przy pewnym projekcie. Natomiast w tym przypadku opierając serwery zapasowe o NSD musiałem na sztywno stworzyć wstępną konfigurację jednak mi to nie przeszkadza ponieważ jest to serwer DNS pod konkretny prywatny projekt do którego nie zamierzam tak często dopisywać nowych domen a jedynie nowe rekordy. Chyba że nagle przybędzie mi przyjaciół, którzy nagle nie mają gdzie trzymać poczty i stron internetowych 😉 Pominę to że musiałem utworzyć i przenieść ponad 80 domen bo dla tych co nie wiedzą strefy na serwerze zapasowym same się w tym przypadku nie tworzą! Zgodnie z tym co pisałem w temacie zapasowy dns dla mailinabox ,opiszę dziś co i jak w odniesieniu do postawienia własnego serwera DNS z pominięciem Mail-in-a-Box ale w połączeniu Keyhelp panel. Tak Keyhelp panel!

dns server login panel keyhelp

Taka konfiguracja nie wspiera DNSEC ponieważ panel Keyhelp go jeszcze nie obsługuje i raczej się nie zapowiada by to się zmieniło. W innym przypadku jest to jak najbardziej możliwe do wykonania ponieważ NSD z automatu przyjmie rekordy jeżeli mu w tym pomożemy ale dziś nie jest to przedmiotem wpisu. Więc od początku. W moim przypadku posiadam trzy serwery typu VPS utrzymywane w różnych lokalizacjach – Sweden , Netherlands , Germany. Ale posiadające dokładnie takie same parametry w odniesieniu do CPU / RAM / HDD.  W podstawowej konfiguracji te małe serwery posiadają jedynie 1vCPU , 1GB RAM i 25GB HDD. Jednak z racji że najwięcej będzie się działo na głównym serwerze – czyli master na czas konfiguracji dodałem dodatkowo 1vCPU i 1GB RAM ,które następnie zresetuję do pierwotnych ustawień ponieważ uważam że na moje potrzeby zupełnie wystarczą. A panel keyhelp to nie jakiś wariat ,który rozpycha się łokciami zwłaszcza kiedy wyłączymy mu obsługę poczty bo mój serwer DNS przy takiej ilości domen poczty nie używa ze względu na obsługę hostów zdalnych. Oczywiście każdy z tych serwerów posiada adres IP w różnych klasach i różnych AS. Takie zaplecze – elementy składowe było / jest dla mnie ważne ponieważ wiedziałem że przyjdzie dzień w którym postawie coś swojego nawet jak by to wyglądało dość niedbale – w tym konkretnym przypadku tylko czas jest wykładnikiem użytego rozwiązania zwłaszcza że jestem wstanie podmienić główną konfigurację w dowolnej chwili i mam na to powiedzmy że około cztery tygodnie. Tak ustawiłem docelowo odświeżanie strefy DNS. System operacyjny jaki wybrałem dla tych trzech serwerów to ubuntu 22.04. Myślałem o systemie debian ze względu na panel keyhelp ,ale jakoś przez lenistwo nie miałem ochoty ponownie przeinstalowywać serwerów ,które dawno temu otrzymały system ubuntu. Dla potomnych powiem że ubuntu 22.04 jest wspierane również przez panel keyhelp bo wielu o tym zapomina. Więc zaczynamy! Na wstępie przyjmuje że osoby czytające ten poradnik posiadają minimalnie dwa serwery przeznaczone do obsługi DNS. Serwery oparte są o system Ubuntu 22.04 a ich minimalna specyfikacja to:

Serwer master / główny 1vCPu , 1GB RAM , 10GB HDD dla Keyhelp (IP dla tego serwera: 10.10.10.10 – ns1.jakasdomena.pl)

Serwer slave / zapasowy 1vCPU , 0,5GB RAM , 5GB HDD dla NSD (IP dla tego serwera: 11.11.11.11 – ns2.jakasdomena.pl)

Pamiętaj że jeżeli chcesz mieć własny serwer DNS dla swoich domen internetowych to musisz ustawić GlueRecords!!! Zgodnie z tym co napisałem wyżej instalujemy panel Keyhelp na pierwszym serwerze a na drugim i ewentualnie na kolejnych instalujemy NSD. Panel keyhelp instalujemy wydając polecenie:

wget --no-check-certificate https://install.keyhelp.de/get_keyhelp.php -O install_keyhelp.sh ; bash install_keyhelp.sh ;

Całego procesu instalacji panelu przedstawiać nie będę bo nie jest on tematem wpisu na blogu , tak samo jak pominę zabezpieczenie serwerów w postaci logowania do SSH za pomocą klucza bo dziś również nie jest to przedmiotem wpisu na blogu. Z kolei na serwerze zapasowym instalujemy NSD wydając polecenie jak poniżej:

apt install -y nsd dnsutils lnav

Logujemy się do naszego panelu keyhelp i przechodzimy do ustawień serwerów DNS: /Configuration/DNS Server/

dns_server_keyhelp

Dopisujemy tam nasze serwery DNS dla których ustawiliśmy wcześniej GlueRecords.  Najlepiej jak domena która jest częścią naszego DNS będzie utrzymywana na tym samym głównym serwerze ale nie jest to konieczne. Jeżeli taka domena będzie jedynie wskazywała na IP serwera głównego i zapasowego / zapasowych będzie się to wiązało z dodatkowym późnieniem przy odczytaniu strefy. Ale nie ma co się aż tak przejmować bo to opóźnienie wynosi  nie więcej jak 2 /ms ,ale warto o tym wiedzieć.

Kolejnym krokiem skoro jesteśmy już w panelu keyhelp to ustawienie Firewall tak by dopuścić serwer / serwery zapasowe na porcie 53 TCP:

firewall keyhelp dns tcp 53

Specjalnie dopisałem kolejny adres IP 12.12.12.12 by ułatwić konfigurację w przypadku kiedy stosujemy więcej jak jeden serwer zapasowy. Adresy IP należy oddzielić przecinkiem. Następnie logujemy się przez SSH do serwera głównego (na tym samym serwerze mamy zainstalowany panel Keyhelp) i przechodzimy do lokalizacji jak poniżej:

cd /etc/bind

i edytujemy plik keyhelp_domain.conf:

nano keyhelp_domain.conf

by wyglądał jak poniżej:

;
; Zone file for KeyHelp control panel domain ns1.jakasdomena.pl
;

$TTL 86400

@ IN SOA ns1.jakasdomena.pl. dns.jakasdomena.pl. (
2024050502 ; serial
14400 ; refresh
1800 ; retry
2419200 ; expire
3600 ; negative caching
)

; Name servers
@ IN NS ns1.jakasdomena.pl.
@ IN NS ns2.jakasdomena.pl
@ IN NS ns3.jakasdomena.pl

; Glue
ns1 IN A 10.10.10.10
ns2 IN A 11.11.11.11
ns3 IN A 12.12.12.12

; Mail
@ IN MX 10 mail
@ IN TXT "v=spf1 a mx -all"

; Host information
@ IN A 10.10.10.10
* IN A 10.10.10.10

; EOF

keyhelp_domain.conf

Zone file for KeyHelp control panel domain ns1.jakasdomena.pl – znaczy że hostname / nazwa hosta jest ustawione na ns1.jakasdomena.pl ale nie jest to oczywiście konieczne zwłaszcza kiedy serwer z panelem keyhelp bedzie pełnił rolę standardowego serwera stron internetowych i poczty. Dopisałem również jako przykład kolejny zapasowy serwer DNS ns3.jakasdomena.pl z adresem IP 12.12.12.12. To tylko przykład jeżeli jak wspomniałem chcecie mieć więcej jak jeden zapasowy serwer. Warto również wspomnieć o rekordzie SOA, a dokładnie o wartości przedstawionej poniżej:

2419200     ; expire

Tą wartość będziecie musieli ustawić manualnie ponieważ podczas testu np na mxtoolbox otrzymacie komunikat jak poniżej:

SOA Expire Value out of recommended range

To dotyczy każdej domeny jaką dodacie, niestety nie znalazłem gdzie domyślnie jest to zapisane ale mogę jedynie podejrzewać że jest zakodowane w jakimś pliku funkcyjnym w samym panelu.

edit SOA dns record keyhelp panel

Ok, więc mamy ustawiony nasz główny serwer DNS. Teraz przechodzimy do ustawienia serwera / serwerów zapasowych. Różnica polega na dodatkowym umieszczeniu kolejnego adresu IP w samej konfiguracji panelu Keyhelp i odpowiednim przygotowaniu serwerów zapasowych! Idąc więc dalej mamy zainstalowany serwer zapasowy oparty na systemie Ubuntu 22.04 i doinstalowany NSD. Logujemy się przez SSH i edytujemy plik przedstawiony poniżej:

nano /etc/nsd/nsd.conf

Dla jasności usuwamy całą zawartość i wklejamy to co poniżej:

server:
ip-address: 11.11.11.11 #adres IP zapasowego serwera DNS
hide-version: yes
verbosity: 2
server-count: 1

zone:
name: twojadomen.pl
zonefile: twojadomen.pl.zone
allow-notify: 10.10.10.10 NOKEY # addres IP serwera master
request-xfr: 10.10.10.10 NOKEY # addres IP serwera master

w przypadku kiedy chcemy dodać więcej domen do naszego zapasowego serwera należy rozszerzyć plik konfiguracyjny o kolejne strefy / zone:

zone:
name: twojadomen.pl
zonefile: twojadomen.pl.zone
allow-notify: 10.10.10.10 NOKEY # addres IP serwera master
request-xfr: 10.10.10.10 NOKEY # addres IP serwera master

zone:
name: twojadomen2.pl
zonefile: twojadomen2.pl.zone
allow-notify: 10.10.10.10 NOKEY # addres IP serwera master
request-xfr: 10.10.10.10 NOKEY # addres IP serwera master

zone:
name: twojadomen3.pl
zonefile: twojadomen3.pl.zone
allow-notify: 10.10.10.10 NOKEY # addres IP serwera master
request-xfr: 10.10.10.10 NOKEY # addres IP serwera master

Analogicznie kiedy usuniecie domenę w panelu Keyhelp warto manualnie usunąć ją z serwera zapasowego ale nie jest to konieczne, jedynie na przyszłość stworzy nam niepotrzebny bałagan! Wspomniałem o tym bo taki zapasowy serwer może obsługiwać więcej serwerów głównych / master dlatego nie ma wpływu czy dana domena jest pozostawiona ponieważ opiera się to na serwerze głównym. Jeżeli nie ma tam konkretnej domeny to zostaje ona pominięta. Gdy plik konfiguracyjny jest gotowy wykonujemy dwa ostatnie polecenia:

nsd-control reconfig

systemctl restart nsd

To ostatnie polecenie:

systemctl restart nsd

praktycznie nie jest konieczne ponieważ po wydaniu pierwszego polecenie serwer jest automatycznie konfigurowany ale z czystej przezorności restart NSD zweryfikuje dodatkowo czy coś jest nie halo. Zaznaczam że nie jest to konieczne! Jeżeli dodasz kolejną nową domenę do panelu Keyhelp to pamiętaj uzupełnić plik konfiguracyjny w zapasowym serwerze DNS i zatwierdzić zmiany poleceniami przedstawionymi i wyjaśnionymi powyżej. W przypadku problemów z synchronizacją warto sprawdzić czy nie pominąłeś otworzyć portu 53 / tcp na serwerze głównym. Skoro wspomniałem o firewall to znaczy że jest to istotne!

Warto zainteresować się tematem na moim blogu: instalujemy tz firewall oparty o UFW na systemie ubuntu 22.04 ,który pozwoli zabezpieczyć zapasowy serwer DNS pozostawiając otwarte tylko te porty których potrzebujemy. W tym konkretnym przypadku:

53 / udp (zapytania z internetu)
53 / tcp (dostęp tylko dla adresu IP serwera master)
22 / tcp (ssh o ile nie został ustawiony inny port)
443 / tcp (niezbędny do aktualizacji serwera za pośrednictwem web z ssl)

Warto jeszcze w naszym zapasowym serwerze ustawić opcję by nasz serwer DNS wstawał samodzielnie po ewentualnym restarcie:

systemctl enable nsd

systemctl restart nsd

Mam nadzieję że poradnik się przyda bo na dziś napisałem go dosłownie na prośbę jednej osoby. To by było chyba na tyle!

A bym zapomniał! Całość jest postawiona na vps2day:

cheap VPS vps2day