O diodzie, co używała tylko IPv6
Wczorajsze zadanie specjalne było chyba najprostsze ze wszystkich - nie byłbym sobą, gdybym nie przemycił czegoś związanego z IPv6, a jako że mimo wszystko IPv6 jest całkiem mocno związane z Windows Server 2012 (vide chociażby DirectAccess), czuję się usprawiedliwiony :) Zadanie jak zwykle polegało na tym, aby coś zrobić i na tym, aby na coś wpaść, choć tutaj akurat większy ciężar spoczywał chyba na tym bardziej przyziemnym aspekcie, czyli na robótkach ręcznych. Zacznijmy jednak od początku.
W treści zadania znowu nie mieliśmy tradycyjnego pytania. Umieściliśmy tam jedynie informację, że pytanie znajduje się na innej stronie, do której - o dziwo jak na konkurs z diodą - dokładny, bezpośredni link podany był na tacy ;) Ilu z Was kliknęło w ciemno? Ja bym kliknął ;) Prawdopodobnie jednak większość z Was, jeśli nie wszyscy, na tym etapie ujrzała jedynie informację o błędzie połączenia Waszej przeglądarki. Nauczeni obsługi polecenia nslookup po pierwszym zadaniu specjalnym szybko jednak ustalamy, że taka domena istnieje. Sęk w tym, że posiada jedynie adres IPv6...
Tu zaczyna się zabawa dla Was, a dla mnie ryzykowna gra ;) Przygotowując zadanie jako główny cel postawiłem sobie, aby było ono mniej więcej identycznie skomplikowane dla wszystkich. Wiadomo jednak, że ktoś może akurat być w posiadaniu wyjścia na "świat IPv6", otworzy sobie ten adres w przeglądarce i zamiast błędu zobaczy po prostu właściwą stronę, zastanawiając się na czym polega zadanie ;) Jest tu jednak kilka dodatkowych założeń. Według mojej najlepszej wiedzy, w Polsce popularność protokołu IPv6 wśród operatorów telekomunikacyjnych jest tak duża, że ani jeden z nich nie udostępnia jeszcze na masową skalę adresów IPv6 swoim klientom ;) Był kiedyś taki lokalny operator nad morzem o ile mnie pamięć nie myli, nawet się tym głośno chwalił, ale jakiś czas temu słuch po IPv6 tam zaginął. Nic dziwnego, na dłuższą metę utrzymywanie pełnego wdrożenia IPv6 moim zdaniem obecnie jest biznesowo nieopłacalne i wiąże się z milionem niepoznanych problemów, o które sami tylko się prosimy dopisując adresy IPv6 do serwerów. Szanse posiadania przez któregoś z uczestników konkursu natywnego IPv6 oceniam więc na mizerne, jeśli jednak ktoś miał i zagrał wczoraj w naszym konkursie - przyznać się! ;) - to gratulacje, ma po prostu szczęście. To założenie chyba sprawdziło się, biorąc pod uwagę że pierwsza poprawna odpowiedź z natywnego adresu IPv6 pojawiła się stosunkowo późno. Szybsi byli ci, którzy normalnie IPv6 nie mają.
OK, czyli natywnej łączności IPv6 nie mamy. Teraz zaczynają się schody. Bardzo jednak zdziwiły mnie komentarze czy odpowiedzi, pełne żalu, jakoby konkurs był ustawiony pod tych, którzy mają IPv6, a ja nie mam albo mój operator nie udostępnia. Naturalnie, że nie masz! :) To nie oznacza jednak, że nie możesz mieć ;)
Istnieje kilka metod uzyskania łączności IPv6 bez tzw. natywnego adresu IPv6 od swojego dostawcy internetowego (mój operator, żeby nie było, też nie udostępnia). Bardzo popularne są bezpłatne tunele, na przykład oferowane przez Hurricane Electric. Możemy nawet dostać naszą własną podsieć adresów IPv6 /48 (czyli naprawdę dużo adresów :P) i przeroutować ją sobie publicznie w całym Internecie po IPv6. Możemy, jeśli chcemy, spiąć nawet sesję BGP z routerami HE. Jedynym warunkiem posiadania takiego tunelu jest posiadanie publicznego adresu IPv4. Poza tym konfiguracja trwa kilka minut, a jeśli po drodze mamy firewalle i NATy to i dłużej. Niemniej ktoś wiedząc, że IPv6 to mój konik (o czym można było się dowiedzieć w komentarzach do wcześniejszych konkursowych newsów), mógł taki tunel zestawić sobie już na początku konkursu i mieć w pogotowiu. Jeśli to zrobił i wczoraj z tego skorzystał, oszczędzając czas, gratulacje :) Proszę się przyznać. mkwm już się przyznał w komentarzach pod newsem - pozdrawiam ;) choć tu akurat w ruch poszło chyba Teredo?
Myśląc o całym tym zadaniu najbardziej nie podobało mi się jednak to, że można całkowicie niczego nie wiedzieć o IPv6 i pójść totalnie na skróty, najpierw googlając, a potem wykorzystując tzw. proxy/bramki IPv4 do IPv6. Oferuje je bezpłatnie np. SixXS. Wystarczy wtedy wyświetlić stronę IPv6, dopisując do jej domeny adres bramki. Na przykład w naszym konkursie taki adres wyglądałby następująco: dioda6.dobreprogramy.pl.ipv4.sixxs.org. Do tego nie mogłem dopuścić, by zadanie było takie łatwe ;) Dlatego też skorzystałem z nowej, bardzo fajnej funkcji IIS 8.0 w Windows Server 2012 - blokady serwerów proxy. Tak się bowiem nieszczęśliwie składa, że SixXS wysyła nagłówek Forwarded-For. Zatem jeśli chcieliśmy oszukiwać, ujrzymy tylko stronę SixXS informującą, że połączenie zostało przerwane przez nasz serwer. Zresztą w podpowiedzi do zadania wyraźnie było napisane, aby z serwerów proxy nie korzystać. Nie ma też co płakać że zablokowaliśmy komuś szanse udziału, jeśli ktoś na co dzień używa proxy - tutaj Wasze proxy (najpewniej IPv4-only) i tak by się raczej nie przydało...
Jeśli nie natywna łączność, nie tunel punkt-punkt i nie proxy, to co nam zostaje? Tak naprawdę pozostaje najprostsze rozwiązanie, dzięki któremu możemy przeglądać świat IPv6 na naszym komputerze bez względu na to, za iloma NATami się znajdujemy i czy mamy publiczny adres IPv4, czy nie. Tym rozwiązaniem jest tunelowanie Teredo. Są to specjalne serwery na całym świecie, które działają podobnie jak wspomniane wyżej proxy, ale z tym wyjątkiem, że nasz komputer jest widoczny pod oddzielnym adresem IPv6 z puli przypisanej do Teredo i tym samym zyskujemy pełną łączność - niczego nie dopisujemy do adresów URL, no i działa nie tylko protokół HTTP, ale także np. ping czy traceroute. Przyjrzyjmy się więc, jak prosta jest konfiguracja takiego tunelu na Windows.
Teredo działa od Windows XP w górę. W przypadku Windows XP musimy jednak najpierw zainstalować komponenty IPv6, a potem postępować jak w nowszych systemach. W Windows Vista, Windows 7 i Windows 8, a także naturalnie w serwerowych ich odpowiednikach, IPv6 jest włączone domyślnie i Teredo tylko czeka tam na swoją kolej. Wystarczy je aktywować.
Zaczynamy od uruchomienia wiersza polecenia w trybie administratora. Następnie wydajemy polecenie aktywujące Teredo. Tutaj możemy zdecydować się na serwer domyślny Microsoftu (przyznam, że działa średnio, ale udało mi się też zadanie na nim rozwiązać) albo skorzystać z jednego z innych serwerów. Ja wybrałem sobie teredo.remlab.net we Francji. Niektórzy użytkownicy pisali w komentarzach i mailach, że nie mogą nas spingować albo że Teredo im nie działa. Może się tak zdarzyć, że wybrany serwer akurat będzie lagował (zwłaszcza jeśli wybraliście coś odległego). Zawsze można było jednak zmienić serwer na inny i kombinować. Można też próbować zresetować Teredo w systemie i ustawić od nowa.
Po wydaniu polecenia możemy od razu sprawdzić efekt. Zapewne uzyskamy informację, że Teredo zostało skonfigurowane pomyślnie, ale jest w trybie dormant (uśpione).
Obudźmy je więc i spingujmy jakiś serwer, o którym wiemy, że dostępny jest wyłącznie przez IPv6. Najprostszy wybór - ipv6.google.com. Celowo dodaję tutaj do polecenia ping parametr -6, aby wymusić użycie protokołu IPv6. O tym za chwilę. Po pierwszym nieudanym pingu (Teredo "budzi się") kolejne już śmigają bez problemów. Witamy w Internecie przyszłości ;)
Otwieramy więc przeglądarkę i wchodzimy na stronę z zadania: http://dioda6.dobreprogramy.pl. Albo i nie wchodzimy - przeglądarka krzyczy, że nie może się połączyć z takim adresem. Zupełnie tak, jakbyśmy nie mieli łączności IPv6...
Bez paniki jednak, to tak ma być ;) Microsoft celowo wyłączył rozwiązywanie nazw DNS na IPv6 w sytuacji, kiedy w systemie mamy skonfigurowany wyłącznie tunel Teredo. Mogłoby to bowiem spowodować, że system automatycznie będzie nam łączył się via tunel IPv6 do serwerów, do których ma natywną, znacznie lepszą łączność IPv4. Możemy jednak wymusić, aby nazwy były rozwiązywane na IPv6 za każdym razem. W tym celu umieszczamy wartość DWORD AddrConfigControl = 0 w rejestrze w kluczu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Dnscache\Parameters.
I gotowe, wszystko śmiga. Postanowiłem jednak nie być aż takim sadystą, nie każdy musi wpaść na trik w rejestrze - choć można to łatwo wygooglać. Jeśli więc ktoś nie wpadł na to, jak wywołać stronę przez nazwę DNS, konfiguracja naszego serwera pozwalała także wywołać ją po adresie IPv6 i widziałem, że niektórzy tak właśnie robili. Tu jednak i tak nie było to takie oczywiste, w jaki sposób można to zrobić. W przypadku adresów IPv6 w pasku adresu przeglądarek musimy je ująć w kwadratowe nawiasy: http://[2001:67c:234c::d10:da]. Inaczej przeglądarka nie zrozumie, o co nam chodzi (dwukropek to bowiem zwyczajowo separator adresu i portu w IPv4).
Po wywołaniu strony pozostaje już tylko ostatni etap zadania - chichot autora ;)
Zastanawiałem się, czy ktoś na to wpadnie, ale na szczęście ogromna większość z Was wpadła ;) Nie podaliśmy bowiem żadnych danych pozwalających ustalić, jaka powinna być nazwa użytkownika i hasło. To jednak konkurs z diodą, pamiętacie? Napisaliśmy też, że to dioda ukryła pytanie na stronie. Logujemy się więc hasłem diody z poprzedniego zadania, naturalnie zmieniając fragment z datą na datę wczorajszą;) Ach ta dioda, niczego się nie nauczyła...
Po ujrzeniu pytania pozostaje już tylko własna wiedza albo Google. Szybko można ustalić na stronach RIPE - na przykład tutaj - że minimalny rozmiar puli adresów IPv6 typu PI to /48. Taką odpowiedź należało podać. Tak się ucieszyłem, gdy ktoś przebrnął przez tę całą ścieżkę przez męki, że postanowiłem, że uznawać będziemy też odpowiedzi "48" (bez "/"), choć format jaki należało użyć był wyraźnie podany na stronie ;)
Nie uznawałem innych odpowiedzi, których pojawiało się zadziwiająco dużo - to znaczy, innych długości masek, np. /32. Spodziewałem sie, że jeśli już ktoś dotrze do strony z pytaniem, odpowie raczej prawidłowo. Prawdopodobnie jednak odpowiedź /32 wzięła się z faktu pomylenia puli PI (Provider Independent) z pulą Provider Aggregatable (PA) przeznaczonej dla większych tzw. LIRów - operatorów telekomunikacyjnych. PI zaś przeznaczone jest dla użytkowników końcowych, takich jak dobreprogramy ;) Jednostkowe przypadki obejmują też podanie np. /29 jako odpowiedzi - to, jak podejrzewam, mogło się wziać z dokumentacji poświęconej pulom PI IPv6, gdzie czytamy, że te alokacje* o najmniejszym rozmiarze /48 każda pochodzą z dużej puli 2001:678::/29.
* - technicznie rzecz ujmując, słowo "alokacja" nie jest tu poprawne, powinno być "przypisanie" ("assignment")
Mam nadzieję, że wczorajsze zadanie dostarczyło Wam dawki świeżej wiedzy o IPv6 - bo taki był jego cel. No i oczywiście dużo zabawy ;) Ogólnie jednak, jeśli ktoś chce się na poważnie pobawić w IPv6 w domu i zagrodzie, to nie polecam Teredo. Lepiej szarpnąć się na pełny tunel np. w Hurricane Electric, sam go kiedyś używałem przez jakiś czas. To nic nie kosztuje, jedynie trzeba mieć to nieszczęsne publiczne IP - bez niego faktycznie pozostaje tylko Teredo... Dodam jeszcze, że HE ma fajny program pseudo-certyfikacji IPv6, który polega na rozwiązywaniu kolejnych zadań podobnych do konkursu z diodą ;) Np. postaw serwer DNS na IPv6, postaw serwer mailowy na IPv6, dodaj rekordy glue IPv6 do swojej domeny itp. - rozwiązuje się je po kolei, poziom trudności rośnie z każdym zadaniem, a my zyskujemy kolejne "tytuły" aż do superguru IPv6 ;) Naturalnie tam, w przeciwieństwie do konkursu z diodą, każdemu zadaniu towarzyszy lektura na ten temat i instrukcje ;)
Przed nami ostatnie siedem dni konkursu z diodą i ostatnie zadanie specjalne. Bądźcie czujni! Czekają naprawdę zajefajne nagrody. Aż sam chętnie wziąłbym udział ;)