Jedním z nešvarů při nasazování IPv6 do provozu je neschopnost správců. Jednou z ukázek takové neschopnosti je implementace nasazení IPv6 na webové prezentaci Ministerstva spravedlnosti (dostupné na adrese portal.justice.cz). Pokud patříte mezi uživatele s funkční IPv6 konektivitou, na weby justice.cz se už téměř dva roky nemáte šanci dostat. Pojďme si shrnout příčiny a možné způsoby obejití tohoto problému.
Problém
by se dal charakterizovat tak, že někdy během roku 2010, ve snaze naplnit Usnesení vlády č. 727 ze dne 8. června 2009 (mimochodem, předně dva roky před World IPv6 Day , správce Justice.cz tento portál „zprovoznil“ i pomocí protokolu IPv6. Od té doby je práce s tímto webem doslova utrpením – tedy pokud na svých klientských počítačích máte IPv6.
IPv6 má jak adresa www.justice.cz, tak i skutečná adresa portálu – portal.justice.cz. Adresy se ale liší, ale chování za nimi schovaných serverů je shodné, možná tedy ukazují na jeden počítač s více IPv6 adresami. Nebo na více počítačů se stejně špatným nastavením.
Při přístupu na Justice.cz se objevuje několik problémů:
- MTU problémy: pokud máte IPv6 konektivitu s MTU nižším, než 1500 (jakýkoli tunel, včetně nativního IPv6 poskytovaného přes PPPoE u DSL přípojek), může dojít k navázání spojení, ale data od webserveru k vám nedorazí, protože routery v cestě zahazují ICMPv6. ICMPv6, zejména jeho zprávy Packet too big, jsou ovšem pro správné fungování IPv6 vyžadován. Nesprávné filtrování pak vede k tomu, že data od jedné nebo druhé strany TCP spojením neprojdou. O správném filtrování ICMPv6 si můžete přečíst např. v RFC4890. Tento problém se u webserveru Justice.cz vyskytoval dřív, dneska už je, zdá se, opraven (alespoň něco).
- Problémy s navázáním spojení: pokud si tcpdumpem zachytíte pokus o přenos úvodní stránky justice.cz, můžete zaregistrovat chování, kdy data začnou přicházet právě 21 sekund po odeslání GET požadavku. Tato prodleva napovídá, že na straně justice.cz existuje problém s navazováním spojení (např. od webserveru k backend serveru), kdy po 21 sekundách dojde k přepnutí z jednoho IP protokolu na druhý. 21 sekund je timeout, který pro navázání TCP spojení existuje ve Windows. A justice.cz používá právě servery na platformě Windows. Data chodí v podivných 536 bajtových blocích, hluboko pod hodnotou minimálního IPv6 MSS. Zajímavé je, že tenhle problém se neprojeví při pokusu o stažení z Linuxu, kde se ale projevuje následující:
- Problémy s „blokovým“ přenosem dat od serveru: tento problém jsem zaregistroval na tunelovaném i nativním připojení. Pokud se připojíte telnetem k IPv4 adrese portal.justice.cz, tcp port 80, a zašlete GET požadavek na adresu /Justice2/Uvod/uvod.aspx (úvodní stránka portálu Ministerstva spravedlnosti), data k vám dorazí během mrknutí oka.Pokud to samé ale zkusíte po IPv6, budete pozorovat, jak přicházejí po cca dvoukilobajtových blocích (rychlostí 2 kB za sekundu!). Problém se neprojevuje na Windows, ale naopak je ho možné pozorovat na Linuxu, data v TCP chodí ve 1208 bajtových blocích.
Všechny zmiňované problémy by nevadily, pokud by šlo o neveřejné testování. Státní správa ale jde cestou ‚nejprve zveřejnit AAAA záznamy v DNS a pak odstraňovat problémy‘. Dvouleté testování si tedy naplno můžeme užívat my všichni, kdo již IPv6 využíváme.
Samozřejmě, dlouho to vydržet nejde, pokud s Justicí pracovat _potřebujete_. Správným řešením by bylo, z DNS odebrat AAAA záznamy, konfiguraci a konektivitu serverů opravit a pak AAAA záznamy do DNS vrátit. Jenže k tomu se MSp nemá. A proto přichází různé formy hacků.
Hacky
Využít můžete různé hacky. Např. pan Stanislav Petr z Hostingu 90 filtruje AAAA záznamy pro DNS jména portal.justice.cz a www.justice.cz, takže se klienti s IPv6 k Justici ani nepokoušejí připojit po IPv6. Jenže selektivní filtrování jen některých AAAA záznamů je featura, kterou ve většině rekurzivních DNS serverů nenajdete. Řešení pro nový BIND využívá volby filter-aaaa.
Proto nabízím druhý hack, funkční, pokud máte na routeru systém založený na GNU/Linuxu. Prostě pošlete klientovi TCP reset. V takovém okamžiku i ten nejhloupější Internet Explorer okamžitě přejde na IPv4 spojení! Z pohledu klienta praktické a funkční řešení, z pohledu správce pak řešení, které nejmíň zasahuje do infrastruktury a konfigurace routeru.
TCP reset lze vyřešit jednoduchým pravidlem ve firewallu (zmíním jen řetězec FORWARD, pokud potřebujete řešení pro přístup z lokálního serveru např. kvůli HTTP proxy, stačí místo -A FORWARD zapsat -A OUTPUT, stejně tak můžete v proměnné $WAN nastavit jakékoli rozhraní s přístupem do IPv6 internetu):
ip6tables −A FORWARD −o $WAN −d 2001:af0:ffee:200::/64 −p tcp −j REJECT −−reject-with tcp-reset
Prefix 2001:af0:ffee:200::/64 patří Ministerstvu spravedlnosti a jsou v něm obě IPv6 adresy Justice.cz, a možná i dalších, podobně špatně nastavených serverů. Věřím, že podobně půjdou nastavit i routery od Cisca, Juniperu, Brocade. Pokud podobné řešení na některé z těchto platforem používáte, podělte se o něj prosím v diskusi 🙂
Na závěr bych jen zdůraznil, že problém jsem reportoval loni v červenci po akci World IPv6 Day paní Hatlapatkové z MPO, která k oznamování podobně rozbitých webů státní správy vyzývala, ale nedočkal jsem se žádné reakce. Letos jsem týden před akcí World IPv6 Launch napsal na podatelnu Ministerstva spravedlnosti, ale doteď jsem bez reakce. Zatím posledním krokem tedy bylo zaslání mailu panu Novákovi z MPO, který letos vystoupil na konferenci IPv6 Day pořádané organizací CZ NIC a dalšími. Pan Novák promptně odpověděl, že problém předá MSp a bude trvat na vyřešení.
Jen doufám, že se dočkáme dne, kdy budou existovat weby funkční i bez podobných hacků.
P. S., pokud tohle čte někdo z GTS/MSp, kdo je za nastalou situaci zodpovědný, měl by se nad svým přístupem zamyslet. OK, kdyby to nefungovalo týden, tak nad tím mávnu rukou. Ale dva roky…?