Dnsmasq telepítése (Jessie)

A AdminWiki wikiből

Ez a leírás egy helyi (azaz publikus szolgáltatást nem nyújtó, csak a szervergépet kiszolgáló) cache-only DNS kiszolgáló telepítését írja le. A DNS gyorsítótár szolgáltatást rutinszerűen telepíthetjük minden publikus levelező szerverre, webkiszolgálóra, stb. (általában minden olyan standalone kiszolgálóra, amelyik működése közben jelentős mennyiségű DNS lekérést generál).

Tartalomjegyzék

Telepítés

Erre a feladatra, a kvázi ipari szabvány Bind9 DNS kiszolgáló helyett, a kisebb és egyszerűbb Dnsmasq kiszolgálót fogjuk használni, amelyet a szokott módon, Debian csomagból telepítünk:

apt-get install dnsmasq dnsutils # + dependens könyvtárak, köztük Bind9 könyvtárak is

A Dnsmasq egyben DHCP kiszolgáló is, szerencsére a telepítéskor ez a szolgáltatás (amelyet nem fogunk használni) nem indul el. Noha maga a dnsmasq.service a root nevében fut, a konkrét lekéréseket a telepítéskor létrehozott dnsmasq rendszer felhasználó nevében nevében szolgálja ki.

Beállítások

A Dnsmasq beállításai

A Dnsmasq beállításait egy overlay állományban adjuk, meg, amelyben:

  • felsoroljuk a tényleges névfeloldásra használandó (forwarder) publikus DNS szervereket;
  • előírjuk, hogy a kiszolgáló csak a loopback interface-en és a localhost-on figyeljen;
  • nem foglalkozunk a /etc/hosts tartalmával és nem próbálunk feloldani nyilvánvalóan hibás lekéréseket;
  • a szolgáltatás naplóüzeneteit a syslog helyett dedikált naplóállományba írjuk (csak a journaling használata: TODO!).
-rw-r--r-- root root /etc/dnsmasq.d/cacheonly.conf

# Tiny dnsmasq configuration for local, cache-only, DNS-only (no DHCP) service.
# Don't forget the /etc/resolv.conf setting to activate:
# nameserver 127.0.0.1

# Don't want dnsmasq to read /etc/resolv.conf or any other
# file, getting its servers from this file instead 
no-resolv
no-poll
server=IP.IP.IP.IP  # Forward #1
server=IP.IP.IP.IP  # Forward #2
server=8.8.8.8      # Google

# Bind only the loopback interface
interface=lo
listen-address=127.0.0.1
bind-interfaces

# Don't want dnsmasq to read /etc/hosts
no-hosts
# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces
bogus-priv

# Logging to a file instead of the syslog
log-queries
log-async=100
log-facility=/var/log/dnsmasq.log

Ne felejtsük el a server IP címeket kitölteni! A beállításokat a dnsmasq újraindításával érvényesíthetjük:

systemctl restart dnsmasq; tail -f /var/log/dnsmasq.log

siker esetén a létrejövő naplóállományban nem lesz hibaüzenet. Egy teszt DNS lekéréssel ellenőrizzük a tényleges működést:

dig @localhost www.debian.org; tail -f /var/log/dnsmasq.log

illetve azt, hogy a kérés bekerül a naplóállományba is.

Siker esetén gondoskodjunk az új napló rotálásáról:

-rw-r--r-- root root /etc/logrotate.d/dnsmasq

/var/log/dnsmasq.log {
    daily
    rotate 7
    compress
    missingok
    create 0640 dnsmasq root
}

A Dnsmasq bejegyzése a Tiger által ismert démonok közé

A DNS szolgáltatásnak állandóan futnia kell, és jogosan figyel a TCP/UDP:53 porton, így a biztonsági figyelmeztetések elkerülése érdekében be kell azt jegyezni a tigerrc állományba:

-rw-r--r-- root root /etc/tiger/tigerrc

[...]
Tiger_Listening_ValidProcs='[...]|dnsmasq|[...]'
[...]
Tiger_Running_Procs='[...] /usr/sbin/dnsmasq [...]'
[...]

A DNS gyorsítótár monitorozása a Muninnal

TODO! Ne vedd komolyan!

Ez a Munin plugin sajnos nem jó. Hint:

cat /var/log/dnsmasq.log | echo $(grep -A1 'query') | sed "s/--/\n/g" | grep -c 'cached'
cat /var/log/dnsmasq.log | echo $(grep -A1 'query') | sed "s/--/\n/g" | grep -c 'forwarded'

Template lehet az exim_mailstats Perl plugin.

A gyorsítótár hatékonyságát az időegység alatt (5 percenként) a cache-ből kiszolgált illetve továbbadni kényszerült DNS lekérdezések száma jól mutatja, ezt érdemes lehet monitorozni. Amennyiben telepítve van a munin-addons csomag, a monitorozás az alábbi parancsokkal vehető használatba:

cp -p /usr/local/share/munin/plugin-conf.d/dnsmasq_hits /etc/munin/plugin-conf.d/dnsmasq_hits
ln -s /usr/local/share/munin/plugins/dnsmasq_hits /etc/munin/plugins/dnsmasq_hits
systemctl restart munin-node

Gyorsteszt:

dig @localhost www.debian.org
telnet localhost 4949
[...]
fetch dnsmasq_hits

A DNS gyorsítótár használatba vétele

A fenti beállításokkal a Dnsmasq azonnal használható DNS gyorsítótárként, ha névkiszolgálóként történő használatát előírjuk a /etc/resolv.conf állományban:

-rw-r--r-- root root /etc/resolv.conf

[...]
nameserver 127.0.0.1
[...]

Ezután kérjünk egy DNS feloldást a dig paranccsal, pl.

dig www.debian.org
[...]
;; Query time: 62 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
[...]

A válasz végén látható, hogy az valóban a helyi névkiszolgálón keresztül érkezett (127.0.0.1) és megfigyelhető a válaszidő is. A kérés ismételt kiadása esetén ez a válaszidő (közel) 0 lesz, jelezve, hogy a feloldás immár a helyi gyorsítótárból történt.

Amennyiben a telepítés alatt álló gép DHCP-n keresztül kap(hat) IP-címet, érdemes előírni a DHCP kliensnek, hogy ezt a beállítást hagyja meg elsőként használatos nameserver-nek (ellenkező esetben a következő IP lease megújításnál bejegyzésünk felülíródhat). Ehhez módosítsuk a /etc/dhcp/dhclient.conf állományt (vegyük ki a commentet az alábbi sor elől):

-rw-r--r-- root root /etc/dhcp/dhclient.conf

[...]
prepend domain-name-servers 127.0.0.1;

Ezzel a helyi DNS gyorsítótárat beállítottuk; mivel publikus szolgáltatást nem nyújtunk, a csomagszűrő tűzfal beállításait nem kell módosítani.