Porządki

Od jakiegoś czasu noszę się – niezbyt intensywnie, ale jednak – z zamiarem zmiany dostawcy internetu u rodziców, czyli rezygnacji ze starego, wolnego łącza ADSL, ale taniego w wartościach bezwzględnych, będącego zaszłością na rzecz czegoś nowego, szybszego i przede wszystkim tańszego. Bo 1 Mbps ssie coraz bardziej. Klasyczne radiówki-osiedlówki odpadały zawsze w przedbiegach. Prędkość OK, ale za dobrze znam realia, więc wiem, że ze stabilnością może być… różnie, a na prędkości aż tak mi nie zależy. Do tego dochodzi jednak konieczność montażu anteny i to, plus brak istotnych różnic w cenie przeważa szalę. Żeby był sens cokolwiek zmieniać, to cena musiałaby spaść do jakichś 25 zł/m-c.

Potem pojawił się internet od operatorów GSM. Początkowo drogi, ale ceny już spadły, transfery i opóźniania są niższe, niż na obecnym rozwiązaniu. Jedynym problemem, który pozostał, są pakiety ruchu. Na routerze mam odpalonych trochę własnych gratów (backupy, wykrywanie spamu na Blox itp. itd.), do tego dochodzi ruch generowany przez komputery. Z logów pppd wynika, że wysyłane dane to 50-100 MB/dobę, a pobierane to 500-1000 MB. Gdyby któryś operator dawał 30 czy 50 GB w pakiecie za grosze, to nie byłoby problemu, ale niczego takiego nie znalazłem (TBH nie szukałem jakoś intensywnie).

Zatem do tej pory głównym blokerem było ustalenie, co generuje transfer. O ile ustalenie, czy ruch powstał lokalnie, czy pochodzi z końcówek nie jest problemem (wystarczy sprawdzić liczniki na interfejsach), o tyle totalnie odbiłem się od możliwości ustalenia, które procesy generują ruch sieciowy w Linuksie. Tzn. problemu nie ma, jeśli są to działające cały czas demony, ale jeśli mamy – jak w tym przypadku – wiele skryptów uruchamianych z crona, w dodatku korzystających z zewnętrznych poleceń to jest… ciężko. Wyszło mi, że można albo zrobić wrapper, podpiąć go pod wszystkie skrypty i zliczać ruch przy wywołaniu, albo – jeśli uruchomione procesy działają dłużej – uruchamianie z crona skryptu, który sprawdzi dane dla aktualnie uruchomionych procesów w /proc. Tak czy inaczej, trochę za dużo pracy w stosunku do potencjalnego zysku, bo ostateczne i tak nie wszystkie skrypty chcę wynieść na obcą infrastrukturę.

Dziś siadłem, rzuciłem okiem w crona i odpowiedziałem sobie na zajebiście ważne pytanie: co jest tak naprawdę niezbędne? Zbieranie danych o Blox i spamie – z tego nic się nie urodzi. Backupy blogów – przeniesienie w inne miejsce jest trywialne. Więc nie będę zliczał ruchu, tylko wyłączę rzeczy, które raczej generują spory transfer, a które były kiedyś fajne i zajmujące, ale są już nieprzydatne i działają z rozpędu. Za tydzień zaś po prostu sprawdzę, ile jest wygenerowanego ruchu i jak to się ma do pakietów danych w GSM.

I tu pytanie do czytelników. Jakie rozwiązania (operatorzy, pakiety) do transmisji danych po GSM polecacie? Warunki brzegowe: cena oraz brak abonamentu (dokładniej: lojalki). Na razie na oku mam:

  • Aero2 z pakietami 30 GB za 30 zł (to na wypasie, starczyłoby i teraz, ale jak mówiłem, bez sensu zmiana cenowo) oraz 3 GB za 5 zł (brzmi bdb i jest spora szansa, że po porządkach dwa czy trzy takie wystarczą w zupełności)
  • Virgin Mobile z pakietami 3 GB za 15 zł oraz 10 GB za 25 zł (gdybym mieścił się w odpowiednio dwóch i jednym pakiecie). Niby drożej, ale jest szansa, że opędzę wszystko na kodach USSD plus dochodzi normalny numer głosowy, co może nie być głupie.

Aero2 – powiadamianie o konieczności wpisania CAPTCHA

Kolejny wyjazd na urlop i znowu dostęp do internetu sponsoruje Aero2. Oczywiście w wariancie z kompresowanym tunelem i proxy cache’ującym. Pewnie gdyby nie to rozwiązanie, to po prostu kupiłbym pakiet w Aero2, bo są naprawdę tanie. A jak testowałem przy okazji awarii netu u mojego ISP – śmiga to bardzo dobrze. Tak czy inaczej, gołe Aero2 jest nieprzyzwoicie wolne do WWW. Po włączeniu ww. proxy śmiga na tyle dobrze, że stwierdziłem, że nie ma sensu kupować. Tym bardziej, że nie pamiętam, czy aktywują od razu itp., a po włączeniu rozwiązania z tunelem wszystko działało. Przy czym najwięcej czasu przy włączaniu zajęło odszukanie wpisu z opisem.

W związku z użyciem ww. proxy WWW pojawia się jeden problem: nie działa przekierowanie. Co za tym idzie, podstawowa przeglądarka nie wyświetla w takiej konfiguracji pytania o captcha. Zresztą, nawet gdyby przekierowanie działało, to mało ono pomaga przy czynnym korzystaniu z internetu, tj. nie przy biernym przeglądaniu, ale np. podczas pisania komentarza na jakiegoś bloga. Co prawda dzięki dodatkowi Lazarus do przeglądarki (polecam!; dead link) treść komentarza nie zginie nawet jeśli funkcja cofnij w przeglądarce nie działa i nastąpi przekierowanie. Postanowiłem jednak sprawę ułatwić, przez napisanie prostego skryptu w Perlu, który sprawdzi dostępność zdefiniowanych hostów. A przy braku dostępności zadanej ilości wyświetli wyskakujące powiadomienie (xmessage). Przy czym sprawdza dość często (co 15 sekund), a jak brak łączności, to przerwa jest dłuższa.

Wyszło trochę ciekawiej, niż się spodziewałem. Wiadomo, że mocną stroną Perla są moduły, więc postanowiłem oprzeć się na dedykowanym module. Po pierwsze, okazało się, że Net::Ping domyślnie korzysta z TCP, nie ICMP, którego planowałem użyć, ale wydało się nawet lepsze. Niestety tylko do czasu, gdy okazało się, że przy podaniu hostów w formie domen i sprawdzaniu portu 80, za sprawą mechanizmu przekierowania Aero2, strona nadal jest dostępna. Tyle, że jest to strona mówiąca o konieczności wpisania captcha.

Rozwiązania są trzy. Pierwsze, to sprawdzanie zawartości strony, tj. czy nie pojawił się tekst mówiący o konieczności wpisania kodu captcha. Po pierwsze komplikuje to budowę skryptu. Po drugie, zmniejsza jego uniwersalność (będzie działał tylko dla Aero2), po trzecie, możliwe, że przestanie działać przy jakiejś zmianie komunikatu. Drugie rozwiązanie, to podanie IP zamiast nazw domenowych. Przy takim rozwiązaniu przekierowanie dokonywane przez Aero2 nie będzie miało wpływu. Mniej czytelne i… zwyczajnie nie wpadłem w pierwszej chwili.

Zamiast tego postanowiłem skorzystać z wersji najoczywistszej i pierwotnie zamierzonej: wykorzystać jednak ICMP do sprawdzania osiągalności hostów. I tu największa niespodzianka: Net::Ping (ogólnie Perl) do wykorzystania ICMP wymaga uprawnień roota. Zdziwiłem się, ale po prostu tak jest i nie jest to feature Perla, a systemu. Zwykli użytkownicy nie mają dostępu do tworzenia socketów. Z tego co znalazłem w sieci, polecane/najprostsze rozwiązanie na obejście tego to… wykorzystanie systemowego polecenia ping, do którego zwykle użytkownicy mają dostęp (SUID). Tak też uczyniłem.

Efekty można zobaczyć na mojej ulubionej sieci społecznościowej (hrhrhr), czyli w repo aero2-watch na GitHubie. Grupa potencjalnych użytkowników bardzo wąska (Linux + Aero2), ale może się komuś przyda…

Gdyby ktoś się zastanawiał, czemu klepię skrypty/siedzę na necie na urlopie to: lubię i zawsze to robię. Poza tym, do porannej kawy jak znalazł; robię też inne, typowo urlopowe rzeczy; napisanie ~50 linii w Perlu trwa znacznie krócej, niż napisanie tego wpisu.

IPv6 w 2016 – zmiany w tunelach

Pierwszego kwietnia SixXS wysłał do swoich użytkowników maila, w którym poinformował, że

We are now fully stopping accepting signups and tunnel & subnet requests.

Czyli że ograniczają świadczenie usług do istniejących klientów i usług. Decyzja jest motywowana brakiem czasu oraz tym, że część ISP uważa, że darmowe tunele IPv6 są dla nich alibi do nie wdrażania IPv6 swoim klientom końcowym.

Unfortunately it seems a large number of ISPs think that our service is
a free pass for them to not deploy IPv6, as they direct their (paying)
customers who want IPv6 to our service.

Trudno się z tym nie zgodzić. Wdrożenia IPv6 są rzadkością, także – czy może raczej: zwłaszcza – w Polsce (tu ciekawa prezentacja z Orange z komentarza do innego wpisu, dzięki za podrzucenie).

Piszę o tym z dwóch powodów. Po pierwsze, gogoNET ogłosił, że się zamykają:

After 5 years we are closing down gogoNET on April 23, 2016.  Freenet6 will continue to work for some time but we can’t guarantee for how long.

Po drugie, umknęła mi dość istotna akcja pt. zadzwoń do ISP po IPv6. Jest też uruchomiona wiki, gdzie można wpisywać co udało się osiągnąć w sprawie IPv6.

Nie jestem do końca przekonany, czy rewolucję należałoby faktycznie zaczynać od ISP, ale faktem jest polscy dostawcy treści nadal nie dystrybuują treści po IPv6 (brak rekordów AAAA, źródło ww. prezentacja), a IPv6 w większości przypadków jest poruszane jedynie od święta, na spotkaniach branżowych typu PLNOG.

Warto w tym momencie przypomnieć (nieco zbyt ambitne IMO) stanowisko prezesa UKE, zakładające, że końcowi użytkownicy otrzymają publiczne adresy IPv6 od stycznia 2012 (stacjonarni, mobilni rok później). Tymczasem otwarte pozostaje pytanie kiedy nadejdzie era IPv6?

To co, „zadzwonimy” do ISP? Wpisujcie na wiki i w komentarzach, co usłyszeliście. A cudzysłów, bo może być zgłoszenie emailem czy zapytanie w social media. Kto wie, czy to ostatnie nie jest najlepsze…