Pod minulým článkem o IPv6 se objevila větší diskuze, v které si člověk mohl přečíst dost rozdílné názory od zastánců, tak i odpůrců. Vlastně jako vždy, když se o šestce mluví. Bylo tam i dost zažitých názorů, že je šestka zbytečně složitá. Rovnou napíšu, že osobně jsem měl před mnoha lety podobný názor.
Ve skutečnosti není složitější, jen je prostě jiná a dost správců se k IPv6 snaží přistupovat jako k IPv4, což je chyba. Zkuste na chvíli zapomenout na to, co tu s námi je už několik desetiletí a podívat se na to jinak. Pojďte to prostě zkusit.
V dnešním článku nechci zabřednout do jednotlivých RFC ani se zabývat detaily. Na dvou praktických příkladech chci ukázat základ konfigurace, kterou nastavíte doslova během pár minut. V diskuzi zaznělo i několik zajímavých věcí, zkusím se na ně taky podívat.
Začneme tím nejjednodušším – klienty. Je první věcí, co děláte po instalaci OS, že vypínáte IPv6? Ok, tak teď šestku zapněte. Tím máme klienty vyřešené. Podpora IPv6 na klientech je dnes naprosto bezproblémová. Pokud máte v síti správně nakonfigurovaný směrovač, případně DHCPv6, tak opravdu nemusíte nic dalšího řešit.
Jednoduchá konfigurace na MikroTiku
Nejprve chci ukázat asi nejsnadnější konfiguraci – pomocí prefix delegation získáme prefix od poskytovatele, ten budeme oznamovat do LAN, klienti si prostřednictvím autokonfigurace SLAAC sami zvolí unikátní IPv6 adresy a použijeme i DNS, které nám oznámil poskytovatel. Je to opravdu jednoduché. Pro tuhle ukázku mám MikroTik, jednu malou L2 síť a poskytovatel podporuje DHCPv6 Prefix delegation. Ukážeme si to v terminálu, naklikat v GUI je to ještě snadnější.
Mikrotik má ve výchozí konfiguraci IPv6 vypnutou, začneme zapnutím, restart je nutný:
system package enable ipv6 system reboot
Pak záleží na konfiguraci vašeho firewallu, možná budete muset přidat pravidlo, aby se k vám informace o prefixu dostaly. Prefix delegation je součást DHPCv6. Zdrojový port DHCP je 547, cílový klienta je 546. Pravidlo může vypadat třeba takhle:
/ipv6 firewall filter add action=accept chain=input comment="Povoleni DHCPv6 client" dst-port=546 protocol=udp src-address=fe80::/10
Povolíme přijímání ohlášení směrovače.
/ipv6 settings set accept-router-advertisements=yes
Už jen potřebujeme požádat vašeho poskytovatele. V našem případě žádáme o dvě věci – adresu pro rozhraní WAN (v našem případě ether1) a prefix. Přidělený prefix bude v IPv6 poolu s názvem test_ipv6. Jak bylo zmíněno, PD je součást DHCPv6, takže nakonfigurujeme DHCP klient:
/ipv6 dhcp-client add add-default-route=yes interface=ether1 pool-name=test_ipv6 request=address,prefix
Výsledek by měl vypadat nějak takhle, máme IPv6 adresu na rozhraní ether1 (WAN) i prefix:
/ipv6 dhcp-client> print Flags: D - dynamic, X - disabled, I - invalid # INTERFACE STATUS REQUEST PREFIX ADDRESS 0 ether1 bound address 2a02:7168:2303:81ee::/64, 58w6d17h13m35s 2a02:7168:2300:1e1:0:ffff:a0b:81ee, 58w6d17h13m35s prefix
Je zde mnohem více parametrů, odkážu vás na oficiální dokumentaci k MikroTiku.
Dokonce ani nemusíme žádat o adresu, můžeme fungovat bez ní, jen s prefixem. Ke komunikaci směrovače se zbytkem internetu se pak použije vhodná adresa z jiného rozhraní, která byla přidělena jako součást prefixu.
Takovou adresu přidělíme na bridge (vnitřní rozhraní) jako IP adresu z přiděleného prefixu.
/ipv6 address add address=::1 from-pool=test_ipv6 interface=bridge
Snadno jde ale nastavit jiná, někdo preferuje slovní pojmenování, třeba cafe
, face
a podobně. Můžete si vybrat, stačí upravit parametr address
.
Jak vidíte, povedlo se to:
/ipv6 address> print Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local # ADDRESS FROM-POOL INTERFACE ADVERTISE 0 DL fe80::6e3b:6bff:febf:2cd4/64 bridge no 1 DL fe80::6e3b:6bff:febf:2cd3/64 ether1 no 2 G 2a02:7168:2303:81ee::1/64 test_ipv6 bridge yes 3 DG 2a02:7168:2300:1e1:0:ffff:a0b:81ee/64 ether1
Tak a je to. Pokud vše klaplo, vyzkoušejte test-ipv6.com a za pár vteřin uvidíte, že vám IPv6 funguje. Jak dlouho to celé trvalo? Pět minut? To není tak špatné, ne?
Zkuste si na klientovi vypsat adresy a směrovací tabulku. Možná vás překvapí, že adresa vaší výchozí brány je lokální linková adresa začínající fe80::. Je to tak správně. Ohlášení směrovače přichází z jeho lokální linkové adresy, ta se při autokonfiguraci nastaví do směrovací tabulky.
Jak je to s DNS? Nikde jsme ji nekonfigurovali a funguje. Ano, výchozí nastavení u Mikrotiku jsou tak, že se automaticky získá od poskytovatele a zároveň se i oznamuje klientům v Route Advertisement. To si můžete ověřit zde:
[admin@MikroTik] /ipv6 nd> print verbose Flags: X - disabled, I - invalid, * - default 0 * interface=all ra-delay=3s .... advertise-dns=yes ...
Teď máte šestku funkční, jen si nezapomeňte ještě nastavit firewall.
Než půjdeme na druhou, trochu složitější konfiguraci, lehce rozebereme některé IPv6 možnosti. Na rozdíl od IPv4 je tady více možností konfigurace. Záleží na poskytovateli, jak velký nám přidělí prefix, co vše potřebujeme nakonfigurovat na klientech apod. Začneme s DHCP serverem, ten se od IPv4 liší.
Teď jsme si vyzkoušeli autokonfiguraci bez DHCP serveru. Klienti si sami zvolili IP adresy, informovali jsme je o DNS a to jim k přístupu na internet stačí. Někdy ale chceme víc, třeba ve firemní síti chcete klienty informovat o IP telefonní ústředně, NTP serverech nebo bootovat po síti. Tady už budeme potřebovat DHCP server.
Více o autokonfiguraci
DHCPv6 existuje ve dvou režimech – bezstavové a stavové.
Bezstavové DHCPv6 nepřiděluje IP adresy, poskytne nám pouze ostatní parametry jako adresy DNS serveru a prohledávané domény. Aby klient získal adresu, je tedy nutná ještě autokonfigurace SLAAC. DHCP server tedy adresy neřeší a ani neví, kdo má kterou adresu.
Stavové DHCPv6 se více podobná tomu, co známe ze čtyřky. To už přiděluje adresy, řeší konflikty adres a řeší i další věci jako výše zmiňované NTP, boot server a další.
No a jak je to s výchozí bránou? Můžu ji taky přidělovat pomocí DHCPv6? Může se vám to zprvu zdát nelogické, ale opravdu nemůžete. To vám zařídí pouze ohlášení směrovače. (nebo statická konfigurace)
Ohlášení směrovače (Router Advertisement – RA) bylo použité už v prvním příkladu. Ať budete dělat jakoukoli konfiguraci, vždy se s ním setkáte. Vysílají se periodicky, klient si je ale může i vyžádat pomocí výzvy (Router Solicitation – RS), dělá to při připojení do sítě. V oznámeních směrovač sděluje informace o síti – jak lze získat adresy, jak je to s DHCP. RA obsahují tzv. příznaky (flagy), důležité pro nás jsou příznaky M a O a dále příznak A, který je součástí rozšiřujicí volby obsahující síťový prefix (Prefix Information Option – PIO).
- příznak O (Other Configuration)
- když je nastaven, říká, že je k dispozici použít bezstavové DHCPv6 pro nastavení síťových parametrů jako například DNS serveru
- příznak M (Managed Configuration)
- když je nastaven, klient si má o IP adresu i další parametry říct DHCPv6 serveru (flag O pak ztrácí význam)
- příznak A (Autonomous)
- když je nastaven, říkáme klientům, že pro daný prefix mají použít bezestavovou autokonfiguraci
Vzniká nám tu tedy několik kombinací:
Příznak O | Příznak M | Příznak A | Způsob konfigurace |
---|---|---|---|
0 | 0 | 0 | žádná konfigurace adres, jen nastavení výchozí brány |
0 | 0 | 1 | SLAAC |
1 | 0 | 1 | SLAAC + bezestavové DHCPv6 |
nezáleží | 1 | 0 | pouze stavové DHCPv6 |
nezáleží | 1 | 1 | stavové DHCPv6 a zároveň SLAAC |
Délka prefixu
Další věcí, kterou musím zmínit je délka prefixu. Týká se to hlavně prefixu, který nám přidělí poskytovatel, částečně se to ale projeví i v LAN. Co je správně a proč může být /64 nevhodné? RFC 6177 mluví o tom, každá koncová síť by měla dostat dostatečné množství adres, například /56 pro domácí uživatele a /48 pro ostatní.
Tady nám do toho trochu hážou vidle někteří poskytovatelé, kteří vám přidělí pouze prefix /64. Jasně, ono je to krásných 18446744073709551616 adres, zároveň je to nejmenší blok pro autokonfiguraci. Pokud jste malá L2 síť, není to žádný problém. ISP přidělí /64 a vy tenhle blok použijete v LAN.
Pokud jste složitější síť a chcete IPv6 ve více VLAN, předávat na další směrovač v síti apod., tak SLAAC ani delegované prefixy s přiděleným /64 prefixem nemůžete použít.
Takže sáhnete po IP kalkulátoru a musíte si ručně IP adresy rozplánovat a nakonfigurovat na vašem zařízení. Není to těžké:
2 networks /65 9,223,372,036,854,775,808 addresses 4 networks /66 4,611,686,018,427,387,904 addresses 8 networks /67 2,305,843,009,213,693,952 addresses 16 networks /68 1,152,921,504,606,846,976 addresses
Já se s tímhle trochu trápil. Když jsem pro účel tohoto článku hledal poskytovatele, který dává lepší prefix, měl jsem dost potíže takového najít. Tady na jihu je téměř všude Starnet nebo nějaká z jeho firem a ti prostě dávají /64. Oslovil jsem je a větší prefix nabízí, ale je to placené. Ano, jsou to levné linky, nemůžeme chtít zázraky.
Složitější ukázka s Fortigate
Další ukázka je s firewallem Fortigate, poskytovatel nám přidělí prefix /62 (tedy čtyři prefixy /64) a my jej využijeme v několika VLAN. Pro vlan 40 (řekněme Wi-Fi pro hosty) použijeme SLAAC a DNS servery poskytovatele, pro interní síť stavový DHCPv6 server.
Zmíním tady parametr prefix hint – tím může klient požádat o konkrétní délku prefixu. Server může tento parametr ignorovat, klidně může přidělit jinou délku, než byla požadována. Pak je jen na klientovi, jak se s tím vypořádá.
Nejprve si požádáme o prefix přes rozhraní WAN:
config system interface edit "wan" config ipv6 set ip6-mode dhcp <-- jak získat IP adresu set dhcp6-prefix-delegation enable <-- povolení PD config dhcp6-iapd-list edit 5 set prefix-hint ::/62 next end end end end
Ověříme, že jsme dostali prefix. Z výpisu je vidět, že jsme nedostali IPv6 adresu na WAN rozhraní, ale prefix máme, dostáváme i DNS:
config system interface edit "wan" get ... ipv6: ip6-mode : dhcp nd-mode : basic ip6-address : ::/0 ip6-allowaccess : ping icmp6-send-redirect : enable ra-send-mtu : enable ip6-reachable-time : 0 ip6-retrans-time : 0 ip6-hop-limit : 0 dhcp6-prefix-delegation: enable delegated-prefix iaid 5 : 2001:167c:9594:6000::/62 preferred-life-time : 270 valid-life-time : 300 delegated-DNS1 : 2001:4860:4860::8888 delegated-DNS2 : 2001:4860:4860::8844 ...
Protože máme víc vnitřních vlan, musíme si prefix více rozdělit. Každá VLAN (v našem případě vlan 40 a internal) dostane jinou podsíť o velikosti /64.
Začneme s vlan 40. Prefix, který jsme dostali je 2001:167c:9594:6000::/62. My nepřidělíme první v pořadí, tedy 2001:167c:9594:6000::/64, ale až třetí, tedy 2001:167c:9594:6002/64. Na rozhraní si přidělíme adresu 2001:167c:9594:6002::1.
Toto řeší zápis set ip6-subnet ::2:0:0:0:1/64. Ten říká, že se k našemu prefixu má „přičíst“ tato adresa – jedná se o logický součet (funkci OR) prefixu a námi zadané podsítě.
Nastavíme si adresu na rozhraní a nastavíme zapneme SLAAC:
edit "vlan 40" config ipv6 set ip6-mode delegated set ip6-allowaccess ping set ip6-delegated-prefix-iaid 5 set ip6-send-adv enable <-- povolení zasílání RA set ip6-upstream-interface "wan" set ip6-subnet ::2:0:0:0:1/64 <-- IP adresa na tomto rozhraní config ip6-delegated-prefix-list <-- oznamovaný prefix (teoreticky jich může být i víc) edit 1 set upstream-interface "wan" set delegated-prefix-iaid 5 set subnet 0:0:0:2::/64 <-- tuto podsit budeme oznamovat v RA set rdnss-service delegated <-- zároveň budeme oznamovat i DNS, které nám dal poskytovatel next end end
Výsledek by měl být:
config system interface edit "vlan 40" config ipv6 get ... ip6-address : 2001:167c:9594:6002::1/64 ip6-delegated-prefix-iaid: 5 ip6-send-adv : enable ip6-manage-flag : disable ip6-other-flag : enable ...
Pro interní síť bude řešena jinak – statefull DHCP config system interface
edit "lan" config ipv6 set ip6-mode delegated set ip6-delegated-prefix-iaid 5 set ip6-send-adv enable set ip6-manage-flag enable <-- posíláme M flag set ip6-upstream-interface "wan" set ip6-subnet ::1:0:0:0:1/64 end end
Pro interní síť ještě potřebujeme DHCP server. Ten je možné nakonfigurovat více způsoby. V prvním příkladu nebudeme upřesňovat přidělované IP adresy a použijeme DNS servery poskytovatele.
config system dhcp6 server edit 1 set dns-service delegated set subnet 0:0:0:1::/64 set interface "lan" set upstream-interface "wan1" set ip-mode delegated next end
Druhá ukázka – tady nastavíme vlastní DNS servery a budeme přidělovat jen malý rozsah IP adres.
config system dhcp6 server edit 1 set dns-server1 xxxx set dns-server1 yyyy set domain firma.cz set interface "lan" set upstream-interface "wan1" set ip-mode range config ip-range edit 1 set start-ip 2001:167c:9594:6001::cafe:100 set end-ip 2001:167c:9594:6001::cafe:300 next end end
Máme skoro hotovo. Nezapomeňte nastavit firewall.
V záznamech provozu (traffic log) je po chvilce vidět, že klienti fungují, jsou tu adresy např.: 2001:167c:9594:6002:59d2:163e:f3fa:2a81 a 2001:167c:9594:6001::0:0:cafe:101. Tohle nakonec zabralo taky jen pár minut.
Když máte v síti servery, u těch patrně nechcete autokonfiguraci, tady sáhnete po statické konfiguraci. Někdo zatouží po tom, nastavit si vše staticky. To samozřejmě vždycky možné je.
Konfigurace klientů je hodně podobná IPv4, potřebujete si vymyslet jen nějakou adresu, vědět délku prefixu, vaši výchozí bránu a DNS. Teoreticky pak nepotřebujete ani periodické RA, můžete je na klientech ignorovat (v Linuxu pomocí sysctl).
Ruční konfigurace, třeba ve větší síti, je hrozná práce. Provádět pak změny v celé síti je časově náročné. Tak proč to dělat? Opravdu tohle chcete?
Když už jsme u toho statického adresování: prefix delegation není jediná možnost, jak získat IPv6 od poskytovatele.
Běžně se používá i statické směrování – na rozhraní WAN si nastavíte poskytovatelem přidělenou IP adresu a nastavíte výchozí bránu. Na tuto adresu pak poskytovatel nasměruje prefix nějaké délky, který pak použijete v LAN. Vše lze tedy i staticky.
Za pomoc s korekturou článku děkuji Ondřeji Caletkovi.