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.