Portál AbcLinuxu, 5. května 2025 15:07
Před několika lety jsem začal hledat způsob, jak připojit svoji malou síť do IPv6 Internetu. Použil jsem k tomu 6to4 tunel. Dnes jsem se donutil k tomu, abych napsal malé Jak na to.
6to4 je tunelovací mechanismus, který umožňuje propojit IPv6 ostrovy v IPv4 moři. Co jej však rozlišuje od klasických tunelů, je jeho dynamičnost. Tunely totiž vznikají a zanikají zcela automaticky.
Každý 6to4 router má přiřazen 48bitový IPv6 prefix, který je odvozen z jeho IPv4 adresy následovně (pro tyto účely je rezervován rozsah 2002::/16): Nechť router má IPv4 adresu A.B.C.D. Pak je mu také přidělen IPv6 prefix 2002:AB:CD::/48. S IPv6 adresami z tohoto rozsahu si může majitel příslušné IPv4 adresy dělat, co chce. Například rozdělit je na menší skupiny a obšťastnit jimi účastníky sítě schované za svým routerem.
Nejprve probereme směrování do jiných 6to4 sítí. Paket určený pro jinou 6to4 síť poznáme velmi snadno – začíná na 2002::/16. Takový IPv6 paket se vezme, zabalí se do IPv4 paketu (protokol 41) a odešle na IPv4 adresu, která se vypočte z 3. až 6. oktetu cílové IPv6 adresy.
Směrování do IPv6 sítí s nativními IPv6 adresami již není tak dynamické. Formálně vypadá jako statická routa na nějaký jiný 6to4 router, o kterém víme, že je přímo připojen do skutečného, rychlého a krásného nativního IPv6 Internetu.
Ale kde najít IPv4 adresu takového routeru, který je součástí IPv6 Internetu? Budete-li hledat, můžete najít tento seznam (na konci stránky) nebo použít anycastovou adresu 192.88.99.1 (ano, to je jediná oficiální anycastová IPv4 adresa, alespoň podle IANA).
Pokud jste dávali dobrý pozor, všimli jste si, že příchozí provoz je trochu zvláštní. Přichází totiž z různých IPv4 adres. A to často i z těch, kam jste vůbec žádný paket neposlali. Takže tady conntracking nepomůže a budete muset otevřít protokol 41 nad IPv4.
Následuje stručný návod pro OS Linux. Protože jsem líný vymýšlet vzorové IP adresy a protože jsem se tímto tématem zabýval už poměrně dávno a už si nepamatuji, co jsem proč dělal, použiji data z živého systému.
Ujistěte se, že vám funguje IPv6. Pokud máte jeho podporu jako modul, natáhněte modul ipv6.
Vytvořte 6to4 síťové rozhraní:
ip tunnel add tun6to4 mode sit local 147.251.23.18 remote any
Rozhraní se jmenuje tun6to4 a je typu sit, tj. IPv6 nad IPv4. Následuje definice místního a vzdáleného konce tunelu. Místní je 147.251.23.18 a vzdálená je libovolná (any).
Nahodíme rozhraní a přiřadíme IPv6 adresu:
ip link set tun6to4 up ip -6 addr add 2002:93fb:1712::1/16 dev tun6to4
Zde si všimněte jak, se adresa počítá. První dva byty jsou 2002 (hexadecimální u16le) z definice. Následují čtyři byty bitově shodné s binární reprezentací IPv4 adresy 147.251.23.18. Zbylé bity si můžete nastavit dle libosti. Když nad tím tak přemýšlím, nevím, proč by tu nemohly být samé nuly nebo jedničky. (Snad mi to někdo vysvětlí v diskuzi. V tuto denní dobu mi to už nemyslí.). Za zamyšlení stojí délka prefixu (Proč jsem zvolil zrovna 16 bitů?).
Pokračujeme routovací tabulkou:
ip -6 route add 2000::/3 dev tun6to4 via ::139.18.25.33 metric 1
Jak vidíte, definoval jsem routu pro síť 2000::/3, ale žádnou defaultní. Tento rozsah je totiž dnes uvolněn pro veřejné použití. Ostatní část adresního prostoru jsou adresy rezervované pro budoucí použití, případně link scope adresy, multicast adresy apod. Někde jsem četl, že multicast nad 6to4 tunelem není možný.
Dále je uvedené jméno odchozího 6to4 rozhraní a adresa vzdálené 6to4 gatewaye do nativního IPv6 Internetu. Tato adresa musí být formálně IPv6 adresa, protože příkaz definuje IPv6 routu. Proto je použita takzvaná IPv4-kompatibilní adresa. Prostě vezměte IPv4 a doplňte ji zleva 96 nulami. (Mimochodem již při vytvoření tunelu je do routovací tabulky přidán záznam pro ::/96 síť.) Kdo chce, může zkusit anycastovou adresu. Často se uvádí její 6to4 podoba 2002:c058:6301::.
Poslední údaj je metrika tunelu. Prý je to potřeba.
Nakonec pokud máte nastavený IPv4 paketový filtr, povolte v řetězci INPUT pakety s protokolem 41.
iptables -I INPUT -p 41 -j ACCEPT
Budete-li chtít nastavit filtr pro IPv6, použijte na to nástroj ip6tables.
Zde budu vést seznam adres, které by mohli fungovat, protože anycastová adresa není vždy ta nejlepší.
Gateway | Gateway RTT min/prům/max/s.odchylka [ms] | www.cesnet.cz RTT min/prům/max/s.odhychlka [ms] | Měřeno odkud |
---|---|---|---|
::85.116.1.22 (6to4-relay.sov.kewlio.net.uk) | 30.105/31.395/35.142/1.576 | 74.584/75.418/76.304/0.573 | Cesnet |
::139.18.25.33 (6to4.ipv6.uni-leipzig.de) | 20.708/20.835/21.111/0.138 | 65.469/66.087/67.528/0.612 | Cesnet |
Jiný seznam bran je na The IPv6 Portal, seznam autonomních systémů oznamujících anycastovou bránu uvádí BGPmon.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.