czwartek, 9 sierpnia 2012

Ubuntu Server 12.04 LTS - Dnsmasq

Usługi DHCP i DNS są zazwyczaj realizowane przez wyspecjalizowane oprogramowanie, takie jak odpowiednio ISC DHCP i ISC Bind, niemniej w małych sieciach, gdzie ta sama maszyna pełni funkcję routera, serwera DHCP i DNS etc. można pomyśleć o alternatywnym rozwiązaniu, czyli Dnsmasq.

Instalacja

sudo apt-get install dnsmasq

Konfiguracja

Wszystkie ustawienia znajdują się w pliku /etc/dnsmasq.conf, chociaż moglibyśmy umieścić je w osobnych plikach w katalogu /etc/dnsmasq.d. Konfiguracja funkcjonalności serwera DHCP i DNS (cache) dla sieci lokalnej na interfejsie 192.168.19.1 (zobacz post nt. konfiguracji Ubuntu Server 12.04 LTS) przedstawia się następująco:
domain-needed
bogus-priv
filterwin2k
# nie korzystaj z pliku /etc/resolv.conf
no-resolv
# serwery DNS, np. naszego ISP
server=208.67.222.222
server=208.67.220.220
# nasza domena
local=/mojadomena.org/
# nasłuchuj na interfejsie
interface=eth1
expand-hosts
domain=mojadomena.org
# zakres adresów
dhcp-range=192.168.19.100,192.168.19.200,255.255.255.0,12h
# przykład rezerwacji adresów stałych
dhcp-host=00:1E:33:49:0E:C2,hostwlanie,192.168.19.14,1h
#
dhcp-option=3,192.168.19.1 # adres routera
# Opcje dla Samby w roli PDC
dhcp-option=19,0           # opcja ip-forwarding off
dhcp-option=44,0.0.0.0     # WINS server(s)
dhcp-option=45,0.0.0.0     # netbios datagram distribution server
dhcp-option=46,8           # netbios node type (hybrid)
dhcp-option=vendor:MSFT,2,1i # zwalnianie przydzielonego adresu DHCP
# serwer autorytatywny
dhcp-authoritative
cache-size=200
W opcjach server podajemy adresy naszych serwerów DNS, w przykładzie powyżej mamy serwery Open DNS, pozostałe opcje są bardzo dobrze opisane w oryginalnym pliku konfiguracyjnym (warto zrobić jego kopię).

Aby wszystko działało, trzeba jeszcze pamiętać o dwóch rzeczach. W pliku /etc/dhcp/dhclient.conf opcja prepend domain-name-servers 127.0.0.1; powinna być odkomentowana. Natomiast w pliku /etc/hosts, który dnsmasq propaguje do wszystkich klientów, powinna znaleźć się linia definiująca adres naszego routera i serwera Samby (bardzo ważne, jeżeli Samba jest serwerem PDC i korzystamy z profili wędrujących):
#127.0.1.1 mojserwer.mojadomena.org mojserwer//to zakomentowujemy
192.168.19.1 mojserwer.mojadomena.org mojserwer
Dnsmasq zużywa o wiele mniej zasobów niż tandem ISC DHCP + ISC Bind, jest też, jak widać prostszy w konfiguracji. Przydzielone adresy zapisywane są w pliku:
cat /var/lib/misc/dnsmasq.leases

Usługę uruchamiamy standardowo, tzn. sudo service dnsmasq start, oczywiście jeżeli wcześniej skonfigurowaliśmy ISC Dhcp i Binda, trzeba je wyłączyć: sudo service isc-dhcp-server stop && sudo service bind9 stop. Żeby ISC Dhcp i Bind nie były uruchamiane podczas startu systemu (załóżmy, że chcemy wypróbować Dnsmasq nie odinstalowując niczego), można zrobić tak:
# poniższe da błędy podczas startu, które można pominąć
sudo chmod a-x /etc/init.d/bind9
# przenosimy linki uruchamiajce isc-dhcp do swojego katalogu domowego
sudo mv /etc/init.d/isc-dhcp-* ./
Po restarcie powinien uruchomić się Dnsmasq.

środa, 1 sierpnia 2012

Ubuntu Server 12.04 LTS - dynamiczna aktualizacja DNS przez DHCP

Chodzi nam o to, aby serwer DHCP na bieżąco aktualizował bazę usługi DNS. Obydwie usługi zainstalowane są na tej samej maszynie i obsługują sieć lokalną (zobacz poprzedni post).
Sieć LAN: 192.168.19.0/24
Adres serwera: 192.168.19.1

Ponieważ serwer Bind9 musi mieć prawo zapisu do plików definiujących naszą strefę lokalną, przenosimy pliki konfiguracyjne i nadajemy odpowiednie uprawnienia, następnie generujemy klucz zabezpieczający dla usługi DHCP:

sudo cp /etc/bind/db.* /var/lib/bind
sudo chown bind:bind /var/lib/bind/*
sudo dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
sudo cat Kdhcp_updater.*.private|grep Key

Ostatnie polecenie wyświetli wygenerowany klucz na ekranie, np. Key: 5FROo2v0qrs5qS3pKL8pS2==, to co po dwukropku, należy skopiować do schowka.
Zmieniamy plik /etc/bind/named.conf.local:

key DHCP_UPDATER {
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  # Poniżej wklej skopiowany wcześniej klucz
  secret "5FROo2v0qrs5qS3pKL8pS2==";
};
# W definicjach stref zmieniamy opcje file oraz dodajemy
# opcje allow-update
zone "lo1cg.org" {
  type master;
  file "/var/lib/bind/db.lo1cg.org";
  allow-update { key DHCP_UPDATER; };
};

zone "19.168.192.in-addr.arpa" {
  type master;
  notify no;
  file "/var/lib/bind/db.192";
  allow-update { key DHCP_UPDATER; };
};

Trzeba jeszcze skonfigurować usługę DHCP. Modyfikujemy plik /etc/dhcp/dhcpd.conf:
# Na początku pliku dodajemy:
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
ddns-domainname "mojadomena.org.";
ddns-rev-domainname "in-addr.arpa.";

# Przed definicją podsieci dodajemy:
key DHCP_UPDATER {
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  # Poniżej wklej skopiowany wcześniej klucz
  secret "5FROo2v0qrs5qS3pKL8pS2==";
};

zone lo1cg.org. {
  primary 127.0.0.1;
  key DHCP_UPDATER;
}

zone 19.168.192.in-addr.arpa. {
  primary 127.0.0.1;
  key DHCP_UPDATER;
}

Reszta bez zmian. Na uwagę zasługuje opcja update-static-leases, którą powyżej włączyliśmy. Odpowiada ona za dopisanie do bazy DNS rekordów dla wszystkich hostów, którym przypisujemy statyczne adresy IP poprzez usługę DHCP. Manual dhcpd.conf ostrzega, że może to generować dużo ruchu wewnątrz sieci, więc trzeba zwrócić uwagę na opcje min-lease-time i max-lease-time oraz przeglądać log systemowy.
Na koniec restartujemy obie usługi i sprawdzamy, czy poprawnie się uruchomiły:
sudo service bind9 restart
sudo service isc-dhcp-server restart
sudo tail -n 50 /var/log/syslog

Po uruchomieniu jakiejś maszyny w sieci LAN (mojhost), możemy sprawdzić, czy baza DNS została zaktualizowana:
host 192.168.19.100 #adres IP mojegohosta
100.19.168.192.in-addr.arpa domain name pointer mojhost.mojadomena.org.