Kategorie: Linux

Pełna konfiguracja serwera BIND i DNS na nowym serwerze

Po wykupieniu serwera dedykowanego czy VPS u jakiegoś dostawcy zwykle otrzymujemy adres IP i nazwę hosta, która bardziej przypomina kolejny numer porządkowy, w domenie dostawcy. Natomiast dziś przedstawię w jaki sposób zainstalować i skonfigurować serwer BIND do obsługi domen.

CEL:
Konfiguracja serwera DNS.
Podstawowy będzie na moim serwerze VPS, natomiast do stworzenia zapasowego wykorzystam jeden z darmowych serwisów utrzymywania DNS freedns.42.pl.

Zmiana nazwy hosta

Nazwę nowego serwera można sprawdzić komendą:

hostname -f

Konfiguracja hostname:

Edytujemy plik nano /etc/hosts

nano nano /etc/hosts

Plik powinien wyglądać następująco:

127.0.0.1       localhost.localdomain   localhost
185.38.250.250   node.serwerweb.pl     node

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

kolejnym krokiem to edycja pliku nano /etc/hostname

nano nano /etc/hostname 

I wpisujemy nasz hostname node

Dokonujemy restartu serwera.
Po ponownym zalogowaniu do konsoli całość możemy zweryfikować poleceniami:

hostname
hostname -f
root@node:/tmp# hostname
node
root@node:/tmp# hostname -f
node.serwerweb.pl

Przechodzimy do głównej konfiguracji Binda.

Na początku należy się upewnić, że jest zainstalowany serwer nazw BIND. W razie jakby go jeszcze nie było, to instalacja wygląda tak:

apt-get install bind9

Zabezpieczenie BINDa

BIND jest dość powszechnym programem, dlatego w dobrym tonie jest zastosowanie zabezpieczeń, a mianowicie zamknięcie go w chrootowalnym środowisku. Najpierw należy zatrzymać całą usługę

/etc/init.d/bind9 stop

Następnie należy edytować plik /etc/default/bind9 i zmienić w nim wartość parametru OPTIONS, żeby wyglądała tak jak poniżej:

OPTIONS="-u bind -t /var/lib/named"

Dalej trzeba stworzyć nowe katalogi i poprzenosić domyślnie utworzone przez program katalogi do nowych lokalizacji:

# Utworzenie katalogów
mkdir -p /var/lib/named/etc
mkdir -p /var/lib/named/var/cache/bind
mkdir /var/lib/named/var/run
mkdir /var/lib/named/dev
# Przeniesienie plików konfiguracyjnych BINDa
mv /etc/bind /var/lib/named/etc

Pozostawiam w razie czego w miejscu przeniesionych katalogów link symboliczny:

ln -s /var/lib/named/etc/bind /etc/bind

Niezbędne jest również utworzenie urządzeń null i random oraz nadanie odpowiednich praw:

# Urządzenia
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
# Uprawnienia do plików i katalogów
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind

BIND jest już zamknięty w chrootowalnym środowisku. Pozostaje jeszcze rozwiązanie problemu logowania zdarzeń. Aby zdarzenia były logowane do systemowych logów należy nieco zmodyfikować plik /etc/default/syslogd. Należy tam znaleźć linię z parametrem SYSLOGD i zmodyfikować ją, żeby wyglądała tak:

SYSLOGD="-a /var/lib/named/dev/log"

Teraz pozostaje tylko zrestartowanie usługi sysklogd oraz uruchomienie bind9.

/etc/init.d/sysklogd restart
/etc/init.d/bind9 start

W logu /var/log/syslog można sobie podejrzeć czy wszystko się uruchomiło prawidłowo.
A teraz można przejść do ustawień właściwych

Na początku należy sprawdzić plik /etc/bind/named.conf
W moim przypadku widać, że jest on podzielony na podrzędne części includowane z plików: named.conf.options i named.conf.local

Zaczynamy od sprawdzenia pliku named.conf.options, gdyż w zasadzie w moim przypadku domyślne ustawienia są na razie jak najbardziej wystarczające, a wygląda to mniej więcej tak:

options {
        directory "/var/cache/bind";
 
        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113
 
        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.
 
        // forwarders {
        //      0.0.0.0;
        // };
 
        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

W dalszej kolejności trzeba będzie już coś napisać i edytować plik named.conf.local, gdzie definiuje się strefy obsługiwane przez serwer. Na końcu pliku dopisuje moją strefę:

zone "serwerweb.pl" {
        type master;
        file "/etc/bind/serwerweb.pl";
        notify yes;
        allow-transfer { 
                195.80.237.194;
                193.70.13.218;
        };
};

Type master oznaczna, że jest to typ podstawowy.
File wskazuje plik ze szczegółami dla tej domeny. Podany tutaj jest adres bezwzględny do pliku, który będzie trzeba za chwilę stworzyć. Podając tutaj samą nazwę pliku, katalogiem gdzie powinien się ten plik znaleźć jest katalog podany w pliku named.conf.options w parametrze directory.
Notify yes powoduje, że o wszelki zmianach we wpisie podstawowym powiadamiane są również zapasowe DNSy.
Allow-transfer określa adresy IP, które będą miały pozwolenie na pobranie tej strefy, tutaj akurat są konkretne adresy serwerów DNS z wspomnianego na początku serwisu freedns.42.pl, które będą stanowić tutaj serwery zapasowe (secondary)

Następnie należy utworzyć wskazany powyżej plik z wpisami dla domeny /etc/bind/serwerweb.pl

nano /etc/bind/serwerweb.pl
$TTL 86400
$ORIGIN serwerweb.pl.
@ IN SOA ns1.serwerweb.pl. boss.serwerweb.pl. (
        2018040301 ;; serial
        10800      ;; refresh
        3600       ;; retry
        604800     ;; expire
        10800      ;; TTL
)
@               IN NS           ns1.serwerweb.pl.
@               IN NS           ns2.serwerweb.pl.
@               IN NS           ns3.serwerweb.pl.
 
@               IN A            XX.XX.XX.XX
ns1             IN A            XX.XX.XX.XX
ns2             IN A            193.70.13.218
ns3             IN A            195.80.237.194
 
;; poczta
@               IN MX 10        mail
mail            IN A            XX.XX.XX.XX
 
;; serwer www
www             IN A            XX.XX.XX.XX
 
ftp             IN CNAME        @

W skrócie:

$TTL – określa czas ważności rekordów (w sekundach)
$ORIGIN – nazwa domeny. W dalszej części @ oznacza właśnie tą wartość.
Gdy gdzieś w pliku pojawia się nazwa domeny to trzeba zakończyć ją kropką, gdyż w przeciwnym wypadku doklejana jest nazwa domeny (wartość $ORIGIN)
@ IN SOA… – Start Of Authority informuje o podstawowym serwerze DNS i kto nim zarządza (e-mail zapisany z kropką w miejscu małpy)

Jak wynika z pliku zdefiniowałem dla swojej domeny aż trzy serwery DNS. W zupełności wystarczyłyby tutaj dwa.
Pierwszy ns1.serwerweb.pl podstawowy obsługiwany przez mój serwer, na którym będzie domena również zainstalowana, dwa kolejne (ns2.serwerweb.pl i ns3.serwerweb.pl) to adresy zapasowe utworzone w serwisie freedns.42.pl.

Przed przejściem do konfiguracji strefy zapasowej, należałoby zatwierdzić dokonane zmiany restartując usługę bind9

service bind9 restart

Można jeszcze sprawdzić czy wszystkie dokonane przed chwilą wpisy dla strefy są poprawne wywołując taki program:

named-checkzone serwerweb.pl /etc/bind/serwerweb.pl
zone serwerweb.pl/IN: loaded serial 2018040301
OK

Jakby się coś nie zgadzało albo popełniona została jakaś drastyczna literówka to program poinformuje, gdzie mniej więcej szukać błędu.

Ponadto poniższą komendą można sobie sprawdzić czy domena została poprawnie dodana (powinna się pojawić po wykonaniu)
1

named -g 2>&1 | grep loaded

To wszystko, mamy poprawnie w pełni skonfigurowany serwer BIND.

Linux

Zobacz komentarze

  • named-checkzone sysadmin.info.pl /etc/bind/sysadmin.info.pl
    dns_rdata_fromtext: /etc/bind/sysadmin.info.pl:14: near 'XX.XX.XX.XX': bad dotted quad
    dns_rdata_fromtext: /etc/bind/sysadmin.info.pl:15: near 'XX.XX.XX.XX': bad dotted quad
    dns_rdata_fromtext: /etc/bind/sysadmin.info.pl:21: near 'XX.XX.XX.XX': bad dotted quad
    dns_rdata_fromtext: /etc/bind/sysadmin.info.pl:24: near 'XX.XX.XX.XX': bad dotted quad
    zone sysadmin.info.pl/IN: loading from master file /etc/bind/sysadmin.info.pl failed: bad dotted quad
    zone sysadmin.info.pl/IN: not loaded due to errors.

    Jak to naprawić?

    • XX.XX.XX.XX zastapilem publicznym adresem IP od dostawcy uslug internetowych (ISP). Dziala.

      • Hej,

        Tak jak najbardziej jednak zalecał bym ci kupić serwer w jakiejś konkretnej firmie wtedy masz stały adres ip i pewność że się on nie zmieni .
        O ile twój ISP jest w stanie dać stały to nie ma problemu możesz sobie tak działać.

  • root@node:/# systemctl status bind9.service
    ● bind9.service - BIND Domain Name Server
    Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Sat 2020-10-10 02:50:03 CEST; 13s ago
    Docs: man:named(8)
    Process: 1659 ExecStart=/usr/sbin/named $OPTIONS (code=exited, status=1/FAILURE)

    paź 10 02:50:03 node named[1660]: couldn't mkdir '//run': Permission denied
    paź 10 02:50:03 node named[1660]: could not create //run/named/session.key
    paź 10 02:50:03 node named[1660]: failed to generate session key for dynamic DNS: permission denied
    paź 10 02:50:03 node named[1660]: sizing zone task pool based on 5 zones
    paź 10 02:50:03 node named[1660]: could not configure root hints from '/usr/share/dns/root.hints': f
    paź 10 02:50:03 node named[1660]: loading configuration: file not found
    paź 10 02:50:03 node named[1660]: exiting (due to fatal error)
    paź 10 02:50:03 node systemd[1]: bind9.service: Control process exited, code=exited, status=1/FAILUR
    paź 10 02:50:03 node systemd[1]: bind9.service: Failed with result 'exit-code'.
    paź 10 02:50:03 node systemd[1]: Failed to start BIND Domain Name Server.

    • Zrobiłeś wszystkie kroki na pewno jak być powinny?

      paź 10 02:50:03 node named[1660]: couldn’t mkdir ‘//run’: Permission denied
      paź 10 02:50:03 node named[1660]: could not create //run/named/session.key

      Już pierwszy komunikat wskazuje że nie masz uprawnień i nie możesz stworzyć piku.

Udostępnij
Opublikowane przez
Linux

Najnowsze wpisy

KeePass2 2.52 w Ubuntu 22.04

Poniższy poradnik opisuje sposób instalacji KeePass w systemie Ubuntu. Całość wykonamy za pomocą kilku poleceń…

2 lata temu

Instalacja Master PDF editor w Ubuntu 22.04

Master PDF Editor to wszechstronny program PDF, który zawiera wiele funkcji. Oprócz tworzenia i edycji…

2 lata temu

iotop – monitorowanie pamięci

Iotop jest prostym narzędziem dla systemów Uniksowych umożliwiającym monitorowanie użycia dowolnego nośnika pamięci flash/hdd/ssd w…

2 lata temu

Uruchomienie wiele poleceń w jednym zadaniu Cron

Możesz oddzielić dwa lub więcej poleceń za pomocą średników (;), Średnik (;): służy do oddzielania…

2 lata temu

Zmiana danych exif zdjęcia w terminalu Linux

Poniższy poradnik opisuje w jaki sposób za pomocą konsoli możemy dokonać edycji danych zdjęcia exif.…

2 lata temu

Instalacja Rocket.Chat Server w systemie Rocky Linux 8

Poniższy poradnik opisuje sposób instalacji Rocket.Chat W systemie Rocky Linux 8 Całość bardzo prosto zainstalujemy…

2 lata temu