Hlavní navigace

Pohněme s IPv6: nakonfigurujte si Apache a BIND

19. 10. 2010
Doba čtení: 6 minut

Sdílet

 Autor: 29
Čas pro IPv6 přišel. Náš seriál Pohněme s IPv6 se pokusí pomoci vám jednoduše IPv6 zvládnout. Na vašem linuxovém webserveru stačí udělat pár úprav, abyste byli připraveni. Jak na to?

O tom, zda je přechod na IPv6 opravdu nutností, se vedou dalekosáhlé spory. Zbudou nějaké IP adresy, najde se jiné řešení, jak jejich nedostatek zvládnout, či obejít, o tom se dá mluvit hodně dlouho a na Lupě se o tom také hodně napsalo. Jenže přes tu všechnu diskusi se nám zdá, že lépe je být připraven. IPv4 adresy dojdou a odkládat podporu IPv6 jen proto, že se možná životnost stávajícího prostoru poskytovaného IPv4 ještě nějakým trikem prodlouží, podle nás nedává smysl.

A kde jinde začít, než ve vlastních řadách. Proto vyhlašujeme akci „Pohněme s IPv6“, v níž se vás pokusíme provést nástrahami zprovoznění podpory IPv6 na serverech, klientských stanicích i se vám pokusíme poradit s výběrem hardware vhodného pro domácí připojení, které bude s IPv6 kompatibilní. A sami si s IPv6 hrajeme tak, aby Lupa byla plně použitelná. Snad už je, takže pokud máte IPv6, už vám Lupa „jede nativně“.

Úvod

V tomto článku si ukážeme, jak jednoduše zpřístupnit webové služby prostřednictvím Internetového Protokolu verze 6 neboli IPv6. V první části si popíšeme konfiguraci volně dostupné implementace webového serveru Apache2, druhá část se budě věnovat konfiguraci jmenného serveru BIND9.

Webový server Apache2

Podpora IPv6 byla zařazena od verze 2, pokud tedy provozujete starší verzi, bude potřeba provést aktualizaci nebo se spolehnout na různé záplaty pro verzi 1.x. Doporučujeme však raději zvolit aktualizaci na dvojkovou řadu.

Verzi serveru lze zjistit příkazem ‚apache2 -v‘ (alternativně ‚httpd -v‘).

# apache2 -v
Server version: Apache/2.2.14 (Ubuntu)
Server built: Aug 19 2010 03:21:20

Samotná konfigurace IPv6 v Apache2 je analogie k IPv4 konfiguraci. Pokud má server například tyto IP adresy:

198.51.100.1/24
2001:DB8:AB::1/64

a využívá na jménech založené virtuální hosty, jak ilustruje následující příklad:

Listen 198.51.100.1:80
NameVirtualHost 198.51.100.1:80

<VirtualHost 198.51.100.1:80>
ServerName dobradomena.cz
# ...
</VirtualHost>

bude odpovídající IPv6 konfigurace vypadat takto:

Listen [2001:DB8:AB::1]:80
NameVirtualHost [2001:DB8:AB::1]:80

<VirtualHost [2001:DB8:AB::1]:80>
ServerName dobradomena.cz
# ...
</VirtualHost>

Technologickým garantem seriálu Pohněme s IPv6 je CZ.NIC.

Logo cz nic

Pokud budeme v rámci jednoho virtuálního hosta používat IPv4 i IPv6, tzv. dual stack, tak použijeme následující konfiguraci, která kombinuje obě IP adresy:

Listen 198.51.100.1:80
Listen [2001:DB8:AB::1]:80
NameVirtualHost 198.51.100.1:80
NameVirtualHost [2001:DB8:AB::1]:80

<VirtualHost 198.51.100.1:80 [2001:DB8:AB::1]:80>
ServerName dobradomena.cz
# …
</VirtualHost>

Obdobně bude vypadat konfigurace pro HTTPS na portu 443.

Všimněte si, že se IPv6 adresa uvádí do hranatých závorek. Je to z důvodu rozlišení mezi funkcí dvojtečky jako oddělovač jednotlivých dvou-bajtů IPv6 adresy oproti oddělovači IP adresy a portu, na kterém bude Apache2 poslouchat.

Podobně vypadá konfigurace i u dalších direktiv Apache2, jako je například kontrola přístupu direktivou ‚Allow‘. Zde však už není důvod zapisovat IPv6 adresu či podsíť do hranatých závorek.

...
<Location /admin>
Order deny,allow
Deny from All
Allow from 198.51.100.1/24 2001:DB8:AB::/48
</Location>
...

Pokud nemáme důvod odlišovat, na jakých IP adresách webový server poslouchá, můžeme ponechat výchozí konfiguraci Apache2, která vypadá takto:

NameVirtualHost *:80
Listen 80

<VirtualHost *:80>
# ...
</VirtualHost>

což znamená, že Apache2 bude poslouchat na všech IPv4 a IPv6 adresách daného serveru.

Po přidání konfigurace IPv6 virtuálního hosta, je nutné Apache2 restartovat. Po restartu byste měli mít plně funkční webový server, který umí klienty obsluhovat přes IPv4 i IPv6. Nebylo to nakonec zas až tak těžké, ne?

Pro zajímavost zmíníme, že Apache2 bude dle výchozí konfigurace využívat pouze IPv6 sokety, jak se můžeme přesvědčit z následujícího výpisu příkazu ‚lsof‘ na Debian systému (všimněte si hodnot pátého sloupce), ale bez problémů obslouží také IPv4 spojení a to pomocí IPv4-mapovaných IPv6 adres.

# lsof -i -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 8462 root 4u IPv6 330665 0t0 TCP *:80 (LISTEN)
apache2 8465 www-data 4u IPv6 330665 0t0 TCP *:80 (LISTEN)
apache2 8466 www-data 4u IPv6 330665 0t0 TCP *:80 (LISTEN)

Pro naše účely stačí k IPv4-mapovaným IPv6 adresám říci, že jejich použití je pro uživatele i aplikaci zcela transparentní a převod zajišťuje jádro operačního systému. Jelikož se můžeme ve výpisech logů/aplikací s IPv4-mapovanou IPv6 adresou setkat, uvedeme její možné formáty zápisu.

IPv4 adresa: 203.0.113.2
IPv6-mapovaná adresa – hybrid zápis ::ffff:203.0.113.2
IPv6-mapovaná adresa – šestnáctkový zápis ::ffff:cb00:7102

Apache2 lze také nastavit tak, aby pro IPv4 a IPv6 používal oddělené sokety a to tak, že u direktivy ‚Listen‘ vypíšete jednotlivé IPv4 a IPv6 adresy a tím donutíte Apache2 k používání oddělených soketů pro IPv6 a IPv4.

Listen 198.51.100.1:80
Listen [2001:DB8:AB::1]:80

Ukázka výpisu při výše uvedené konfiguraci:

# lsof -i -n -P
apache2 5285 root 3u IPv4 153748 0t0 TCP 198.51.100.1:80 (LISTEN)
apache2 5285 root 4u IPv6 153750 0t0 TCP [2001:db8:ab::1]:80 (LISTEN)
apache2 5287 www-data 3u IPv4 153748 0t0 TCP 198.51.100.1:80 (LISTEN)
apache2 5287 www-data 4u IPv6 153750 0t0 TCP [2001:db8:ab::1]:80 (LISTEN)
apache2 5288 www-data 3u IPv4 153748 0t0 TCP 198.51.100.1:80 (LISTEN)
apache2 5288 www-data 4u IPv6 153750 0t0 TCP [2001:db8:ab::1]:80 (LISTEN)

Samotné nastavení webového serveru pro akceptaci IPv6 adres nestačí. Musíte tuto skutečnost nějak oznámit světu přidáním IPv6 adresy do systému doménových jmen (DNS). Tuto akci budeme ilustrovat na doméně www.dobradomena.cz.

Jmenný server BIND9

Pokud provozujete vlastní NS (Name Server), stačí do odpovídajícího zónového souboru přidat řádek, který se oproti IPv4 zápisu liší pouze v použitém typu zdrojového záznamu. Místo jednoho ‚A‘ se zapisují hned čtyři ‚AAAA‘. Čtyři ‚A‘ byly zvoleny z důvodu, že IPv6 adresa, je co se týče počtu použitých bitů, čtyřikrát větší než IPv4 adresa (IPv4 má 32 bitů a IPv6 128 bitů). Pokud máte DNS servery u svého registrátora nebo na jiném DNS hostingu, tak konfiguraci provedete přes webové rozhraní této služby.

Ukázka IPv4 a IPv6 záznamu k doméně dobradomena.cz a poddoméně www.dobradomena.cz.

$ORIGIN dobradomena.cz.
; ...
@ IN A 198.51.100.1
@ IN AAAA 2001:DB8:AB::1
www IN A 198.51.100.1
www IN AAAA 2001:DB8:AB::1

Přidáním těchto dvou řádků s AAAA záznamy a restartováním BINDu začnete oznamovat do světa, že váš webový server poskytuje služby i přes IPv6. Dobrým pravidlem je však ještě vytvoření reverzní zóny k IPv6 adresám, v určitých případech jako je poštovní server to je dokonce nezbytností pro jeho správnou funkcionalitu. Reverzní záznam k IPv4 adrese se dal poměrně bez problému zapsat z hlavy, u IPv6 to ale tak snadné nebude. Jednoduchý způsob, jak zjistit reverzní zápis pro IPv6, je použití příkazu ‚dig -x‘ nebo ‚sipcalc -r‘.

$ dig -x 2001:DB8:AB::1
...
;; QUESTION SECTION:
;1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR

$ sipcalc -r 2001:DB8:AB::1
...
Reverse DNS (ip6.arpa) -
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa.

Předpokladem pro obsluhu této IPv6 adresy je to, že vám váš poskytovatel hostingu či ISP přidělil IPv6 blok a delegoval správu reverzních adres na vaše servery. Například pro síť 2001:DB8:AB::/48 byste obsluhovali reverzní zónu b.a.0.0.8.b.d­.0.1.0.0.2.ip6­.arpa.

Ukázka definice reverzní zóny v ‚named.conf‘ pro přidělený prefix ‚2001:DB8:AB::/48‘:

zone "b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa" in {
type master;
file "/etc/bind/master/b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa";
};

Odpovídající záznam v reverzní zóně pro IPv6 adresu 2001:DB8:AB::1

# cat /etc/bind/master/b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa
$ORIGIN b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
; ...
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
IN PTR www.dobradomena.cz.

Nyní už zbývá provést kontrolu správné syntaxe BIND9 konfiguračního souboru, syntaxe zónových souborů a jejich znovu načtení.

BRAND24

/etc/bind# named-checkconf named.conf

/etc/bind/master# named-checkzone dobradomena.cz dobradomena.cz.signed
zone dobradomena.cz/IN: loaded serial 1287133382 (DNSSEC signed)
OK

/etc/bind/master# named-checkzone b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa.signed
zone b.a.0.0.8.b.d.0.1.0.0.2.ip6.arpa/IN: loaded serial 1286960585 (DNSSEC signed)
OK
/etc/bind# rndc reload
server reload successful

Závěr

Ukázali jsme si IPv6 konfiguraci webového serveru Apache2 a vytvořili potřebné záznamy na autoritativním NS. Teď už je tedy vše připraveno tak, aby se mohli uživatelé Internetu podívat na výhody vlastní domény také prostřednictvím Internetového Protokolu verze 6.

Zdroj:
Apache HTTP Server Version 2.2 Documentation

Provozujete vlastní server?

Byl pro vás článek přínosný?

Autor článku

Autor je technickým ředitelem CZ.NIC, z.s.p.o. a studentem FSS MU. Zajímá se o DNS, DNSSEC, Linux. Jeho nepočítačový blog najdete na adrese blog.rfc1925.org.
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).