Seminář Linux - zimní semestr 96/97, MFF UK

Petr Mitošinka

Domain Name System (DNS)

Kterak nainstalovat DNS na Linuxu?

Virtuální domény

Literatura

Co to je Domain Name System?

Systém DNS nám umožňuje používat symbolická jména (např. www.ms.mff.cuni.cz), která se dobře pamatují, namísto nic neříkajících seskupení čísel (IP adres: 165.240.125.8). Při dotazu na službu DNS provozovanou na počítačích nazývaných name servery je na symbolické jméno nějakého stroje odpovídáno jeho IP adresou; otázka může být případně položena i obráceně. Základem tohoto systému jsou name servery, které tvoří hierarchickou strukturu, jenž kopíruje hierarchickou strukturu domén. Každý name server zná name servery všech svých subdomén, respektive umí na mě poskytnou odkaz. A jako završující element pak existuje několik "kořenových" name serverů, které znají name servery všech domén nejvysší úrovně (jako .com, .cz, .net atd).

Jak to funguje?

Tazatel se obrátí na kořenový name server a ten jej pošle na name server dané domény nejvyšší úrovně. Ten ho odkáže na name server druhé úrovně. A tak dále až se tazatel dostane k name serveru, který je kompetentní mu na jeho dotaz odpovědět.

Příklad:
Q: Pro a.root-servers.net -> jaké je IP stroje www.cuni.cz ?
A: Poptej se na ns.cesnet.cz
Q: Pro ns.cesnet.cz -> IP www.cuni.cz ?
A: Zkus se zeptat na ns.cuni.cz
Q: Pro ns.cuni.cz -> IP www.cuni.cz ?
A: 195.113.0.3

Ve skutečnosti je to ještě trochu komplikovanější - na jedné úrovni je obvykle několik name serverů - primární, sekundarní, ale často i další. Tazatel se taky velmi často neobrací první na kořenový name server, ale na name server, který je mu nejblíže a ten se sám rozhodne, zda bude kontaktovat kořenový name server, či zda použije údaj, který má v cache paměti.
DNS se využívá také například při dopravě elektronické pošty. V DNS existují speciální záznamy, podle kterých se e-maily směrují.

Instalace DNS pouze pro cachování dotazů

Takto používaný systém DNS může mít svůj význam například pro komutovaná spojení - šetří traffic, který prochází po vytáčené lince, protože si pamatuje každý dotaz, který už byl na DNS proveden a pak odpovídá již ze své vyrovnávací paměti.
První co potřebujeme je soubor /etc/named.boot obsahující například:

--------------------------------------------------------------------
;
directory /var/named
; zde budou uloženy soubory s informacemi o DNS
;
;typ		doména			soubor
cache		.			root.cache
primary		0.0.127.in-addr.arpa	pz/127.0.0
;
--------------------------------------------------------------------
V souboru /var/named/root.cache je přehled všech kořenových serverů Internetu ve tvaru (obvykle 9 serverů A-I):
.	518400	NS	d.root-servers.net.
.	518400	NS	e.root-servers.net.
...
...

d.root-servers.net.	3600000 A	128.8.10.90
e.root-servers.net.	3600000 A	192.203.230.10
...
...
V souboru /var/named/pz/127.0.0 jsou záznamy pro reverzní lokalní doménu 127.0.0. POZOR na tečky za adresama - mají význam!!!
--------------------------------------------------------------------
@	IN	SOA	ms.mff.cuni.cz.	hostmaster.ms.mff.cuni.cz. (
			1	; Seriové číslo
			28800	; Refresh
			7200	; Retry
			604800	; Expire
			86400)	; Minimum Time To Live
		NS	ns.ms.mff.cuni.cz.
1		PTR	localhost. 
--------------------------------------------------------------------
A v souboru /etc/resolv.conf doplňte toto:
search ms.mff.cuni.cz, mff.cuni.cz
nameserver 127.0.0.1
V políčku search jsou adresy domén, které se prohledávají, pokud zadané jméno počítače není úplná symbolická adresa. Položka nameserver obsahuje IP adresy name serverů. Dále se ujistěte, že v souboru /etc/hosts.conf je řádka:
order hosts, bind
Pak už stačí jen nastartovat named - proces starající se o DNS. Obvykle se nachází v adresáři /usr/sbin/named. Případná chybová hlášení jsou zapisována do /var/adm/messages. Správnou funkčnost DNS můžeme ověřit programem nslookup. Typy dotazů v nslookupu můžeme měnit příkazem set "q=X", kde X je mx pro poštovní záznamy, či ns pro name servery, anebo any pro všechny typy záznamů. Například vylistování všech záznamů z dané domény provedeme příkazem "ls -d". Další informace naleznete ve (2).

Vlastní doména

Náš už připravený cachovací DNS trochu rozšíříme a zadefinujeme si vlastní doménu. Přidáme tento řádek do /etc/named.boot:

--------------------------------------------------------------------
;
;typ		doména			soubor
primary		ms.mff.cuni.cz		pz/ms.mff.cuni.cz
;
--------------------------------------------------------------------
A do souboru /var/named/pz/ms.mff.cuni.cz vložíme záznamy pro naši doménu. POZOR na tečky za adresama - mají význam!!!
--------------------------------------------------------------------
@	IN	SOA	ms.mff.cuni.cz.	hostmaster.ms.mff.cuni.cz. (
			19970130	; Seriové číslo
			28800		; Refresh
			7200		; Retry
			604800		; Expire
			86400)		; Minimum Time To Live
		NS	ns.ms.mff.cuni.cz.	; primární NS
		NS	sns.ms.mff.cuni.cz.	; sekundární NS
		MX	10 mail.ms.mff.cuni.cz.
		MX	100 sns.ms.mff.cuni.cz.
ns		A	198.210.1.1
sns		A	198.210.1.3
mail		A	198.210.1.5
--------------------------------------------------------------------
Přehled typů záznamů v DNS:
A, CNAME, MX, SOA = nikdy nesmí odkazovat na jiný CNAME, pouze na něco co je A záznam!
Opět můžeme celou akci otestovat pomocí programu nslookup.

Pro dial-up

Pokud používáte komutované spojení je nutné aby named bežel jen pokud jste připojeni, protože jinak Vás očekává časté a poměrně dlouhé sekání programů, které naříklad při startu používají DNS. Jako příklad může sloužit Netscape, sendmail aj. Pak je nutné spouštět named jen na dobu nezbytně nutnou při spojení, tj. nejlépe umístit spuštění namedu do souboru ip-up, který se exekutne při uspěšném navázání spojení a jeho ukončení do ip-down, který děla opak při rušení spojení. Taktéž je nutné upravit /etc/resolv.conf.

Virtuální host pro WWW

Mnoho firem chce svou reprezentační stránku pod co nejlepší Internetovskou adresou a pokud možno pod www.jmeno_firmy.com ci www.jméno_firmy.cz. Pokud by se pro kazdou takovou výkladní skríňku musel dávat nový počítač, bylo by to poměrně nákladné. Naštestí lze sdílet httpd i pro více různých adres. Těmto internetovským adresám, které jsou umístěny na cizím počítači, se říká virtuální domény.
Zde se zmíním o konfiguraci Apache jako nejznámějšího a nejrozšířenějšího http serveru pro Linux. Existují v zásadě dva různe způsoby jak provozovat virtuální WWW doménu na svém stroji. První využívá vlastnosti nových browserů, kteří s dotazem na URL posílají zároveň i jméno stroje (virtuální domény) a tudíž pod jedinou IP adresou může být i více virtuálních domén. V DNS bývají pak zanešeny jako A recordy se stejným IP či jako CNAME na původní počítač. Druhý způsob je univerzálnější a i starší browsery, které ještě nepodporovali posílání kompletního URL ho mohou zpracovat. V tomto případě má každá virtuální doména své vlastní IP číslo; to se aliasuje na jednom stroji, který pak považuje všechny dané IP adresy za sebe.
Pokud budete chtít požívat druhou metodu, musíte mít na Linuxu zkompilované jadro s podporou IP aliasingu a pak jako root zadat příkaz:

/sbin/ifconfig eth0:X alias IP_number
kde X se mění od 0 dále podle počtu aliasovaných adres. Do souboru httpd.conf (konfigurační soubor Apache) vložte:
<VirtualHost linux.mff.cuni.cz>
ServerAdmin root@mff.cuni.cz
DocumentRoot /usr/local/etc/httpd/linux
ServerName linux.mff.cuni.cz
ErrorLog logs/linux_error_log
TransferLog logs/linux_access_log
</VirtualHost>
Pak už stačí restartnout httpd a pokud jsou záznamy v DNS správné Apache naběhne i s novými virtuálními sity. Pokud vám tento zevrubný popis nestačil, podívejte se na (4).

Virtuální elektronická pošta

Poněkud častěji se v poslední době vyskytuje také požadavek aby všechny e-maily směřující na jakoukoliv adresu v dané doméně došli do jednoho mailboxu, kde si je zodpovědná osoba stáhne a rozhodne o jejich dalším osudu. Původně to nebyl jednoduchý úkol a až do sendmail 8.8.4 se to muselo řešit pomocí nových přepisovacích pravidel. Od verze 8.8.5 je podpora pro virtualní maily zabudovaná do sendmailu a její zprovoznění již není tak náročné.
Samozřejmě, že jako první musíte v DNS uložit informace o MX recordech k dané doméně. Tj. například:

firma.cz	MX	10 muj.provider.cz
firma.cz	MX	100 zalozni.provider.cz
Pak vytvoříme nový zdrojový konfigurační soubor pro sendmail ve kterém bude obsažena řádka:
FEATURE(virtusertable, 'dbm /etc/virtusertable')dnl
a pomocí něho necháme vygenerovat novy soubor /etc/sendmail.cf.
Kromě formátu dbm lze použít samozřejmě i jiné - například btree. Poté vytvoříme tabulku virtuálních uživatelů, kde e-maily pro nekdo@firma.cz jsou směrovány na nekdo@ms.mff.cuni.cz, webmaster@firma.cz na nekdo_jiny@ms.mff.cuni.cz a všechno ostatní z *@firma.cz na jiny@ms.mff.cuni.cz:
nekdo@firma.cz		nekdo@ms.mff.cuni.cz
webmaster@firma.cz	nekdo_jiny@ms.mff.cuni.cz
@firma.cz		jiny@ms.mff.cuni.cz
a přeložíme ji do vnitřní formy příkazem:
makemap dbm /etc/virtusertable < /etc/virtusertable
V této chvíli by měli být v adresáři /etc/ kromě virtusertable i další soubory s příponou .db či .dir, .pag. Nyní nezapomeňte přidat doménu firma.cz i do sendmailu (bud položka Cw v /etc/sendmail.cf či soubor /etc/sendmail.cw) aby byl připraven tuto doménu rozpoznat jako domácí.
Kromě příchozí pošty lze měnit a přesměrovávat i odchozí, ale nemyslím si že by to bylo příliš užitečné. Pro další informace odkazuji na (6).

Virtuální FTP

Poměrně dlouho bylo virtuální FTP pouze záležitostí lidí kteří si uměli upravit sami ftpd tak aby po loginu na daný virtuál skočil do toho spravného adresáře. I dnes je třeba tento problém řešit pomocí patche, který je ovšem volně dostupný na ftp://ftp.softhome.net/pub/users/brian/multihomed-wu-ftpd-2.4-23.patch. Podrobný návod jak tento patch instalovat naleznete v (7).

Otázky a připomínky

Pokud byste měli nějaké připomínky k tomuto tématu, případně chtěli něco doplnit, či Vám něco nebylo jasné, neváhejte se na mě obrátit.
Váš Petr Mitošinka

Zdroje na Internetu:

  1. Linux Documentation Project
  2. DNS HOW-TO

  3. Apache HTTP Server
  4. ApacheWeek - Virtual Hosts Feature

  5. SendMail
  6. SendMail Virtual Hosting HOW-TO

  7. WU-FTPD Virtual Mini HOWTO