O2 IPv6 prostřednictvím domácího linuxového routeru

Společnost O2 již delší dobu poskytuje v rámci běžných xDSL připojení IP protokol verze 6. Pokud si běžný domácí uživatel síť zapojí podle instrukcí dodávaných k modemu, nemívá s tím problémy a síť mu pracuje v dual stack režimu, tedy veřejná IPv6 adresa plus NATovaná IPv4.

Horší to ovšem je v situaci, kdy si chce za xDSL modem nainstalovat linuxový počítač se dvěma síťovými kartami sloužící jako router, firewall a třeba i jako univerzální malý serveřík.

V čem je problém? IPv6 protokol byl, jak známo, zaveden kvůli nedostatku adres v původním protokolu IPv4. Proto je adresový prostor následníka IPv4 128 bitový, a poskytuje tak naprosto neuvěřitelné množství adres (cca 340 sextiliónů). Nejmenší síť v IPv6 má takzvaný prefix /64, což znamená, že prvních 64 bitů je určeno pro adresu sítě a zbylých 64 je určeno pro adresy jednotlivých stanic v té síti (jestli se vám to domů vejde, můžete jich tam mít až cca 1,8 x 10^19). Síť s prefixem větším než /64 vpodstatě nelze vytvořit, takže ji nemůžete rozdělit na podsítě. 

A právě to je ve spojení s providerem O2 značný problém. Ačkoliv se to nedoporučuje, přiděluje O2 domácím uživatelům pouze IPv6 adresy s prefixem /64. To znamená, že sice můžete mít doma obrovskou síť, ale právě a pouze jednu jedinou síť. Jakmile si chcete za xDSL modem dát svůj vlastní router, potřebujete ovšem sítě nejméně dvě.

Schéma sítě

Kdyby se O2 chovalo normálně, přidělilo by Vám třeba prefix /60, který by umožňoval si doma zřídit až 16 sítí. Naštěstí, pokud je v roli routeru použit linuxový počítač, lze použít snadnou fintu, pomocí které dual stack provoz za firewallem rozdělíme (viz obrázek). IPv4 budeme normálně routovat (sítí s privátními adresami si můžeme zřídit, kolik se nám zachce). Ovšem IPv6 projde počítačem v režimu bridge, takže si s jedinou /64 sítí vystačíme před ním i za ním.

Postup instalace

Postup popisuji pro distribuci Debian, kterou na domácím routeru používám, ale je tak jednoduchý, že půjde snadno zreplikovat pro téměř kteroukoliv jinou linuxovou distribuci.

  1. Ujistěte se, že máte nainstalované balíčky bridge-utils a ebtables, pokud ne, nainstalujte je příkazem
    # apt-get install bridge-utils ebtables

  2. Pomocí příkazu brctl přidáme bridgovací interface a ifconfigem ho aktivujeme:
    # brctl addbr br0
    # ifconfig br0 up

  3. Přiřadíme mu fyzická rozhraní na kterých má fungovat:
    # brctl addif br0 eth0
    # brctl addif br0 eth1

  4. Nakonec pomocí brtables (obdoba iptables pro režim bridge) přidáme jednoduché pravidlo, které bridgem dovolí projít jen paketům IPv6:
    # ebtables -t broute -A BROUTING -p ! ipv6 -j DROP

A to je celé! Samozřejmě pokud vše bude fungovat tak jak má (z některého počítače ve vnitřní síti vyzkoušejte například ping ipv6.google.com), je vhodné si z těchto příkazů sestavit jednoduchý skriptík, který se spustí hned po startu routeru. Také je vhodné pomocí iptables pečlivě nastavit firewallová pravidla pro IP verze 6, ale o tom třeba někdy jindy v jiném článku...