Bezpieczniejsze i wydajne łącze mobilne

Nieco ponad pół roku temu opisałem możliwe sposoby przyspieszania łącza internetowego. Znowu jestem na urlopie, bez dostępu do „normalnego” łącza i korzystam z Aero2. Jak pisałem, najbardziej, ze względu na łatwość uruchomienia, przynajmniej w środowisku Linux, odpowiada mi wariant z socks proxy i ssh.

Poza tym, mignęła mi ostatnio – zupełnie nie pamiętam przy jakiej okazji, ale niezwiązana z tym tematem – informacja o polipo, czyli cache’ującym serwerze proxy, pomyślanym o użytku osobistym, domowym lub małych grupach użytkowników. W stosunku do pełnoprawnego proxy WWW, czyli popularnego squida ma parę ciekawych cech: jest lekki i szybki, prosty w konfiguracji, może robić za mostek między sieciami IPv4 i IPv6, umie socks proxy, posiada pewne opcje umożliwiające łatwe filtrowanie reklam i zwiększanie prywatności.

W kombinacji z tunelem SSH z którego korzystam, polipo będzie pełnił rolę cache oraz translatora socks proxy na zwykłe proxy WWW. O ile większość przeglądarek jakoś obsługuje socks proxy, o tyle chyba tylko w Firefoksie można to po prostu wyklikać, pozostałe wymagają zabawy z wierszem poleceń w celu uruchomienia obsługi. Poza tym, mając proxy WWW w systemie można je wykorzystać nie tylko do przeglądarek, ale do wszystkich programów, które umożliwiają ustawienie proxy HTTP.

Czyli całe rozwiązanie składa się więc z dwóch elementów: tunelu SSH, zapewniającego szyfrowanie przesyłanych danych (bezpieczeństwo) oraz kompresję (wydajność), oraz polipo zapewniającego cache plików (wydajność). Ponieważ moje łącze mobilne jest wolne (Aero2; DOWN/UP 512/256 kbps), zdecydowałem się umieścić serwer proxy na laptopie, przed tunelem SSH (patrząc od strony przeglądarki). Wydaje mi się, że tak będzie wydajniej – część zapytań nie trafi w ogóle do tunelu. Możliwa jest też konfiguracja z proxy uruchomionym na serwerze terminującym tunel – patrz linki na końcu wpisu. Topologia rozwiązania wygląda zatem następująco:

Internet - serwer - tunel SSH - polipo - przeglądarka

Serwer to maszyna z Linuksem (może być VPS dowolnego typu), serwerem SSH i przyzwoitym (optymalnie: lepszym od naszego mobilnego łączem).

Uruchomienie tunelu:

ssh -CND 9000 user@serwer

Konfiguracja serwera polipo (bardzo podstawowa, dostępnych jest znacznie więcej opcji, ale ich opis wykracza poza tematykę tego wpisu; cat /etc/polipo/config):

logSyslog = true
logFile = /var/log/polipo/polipo.log
socksParentProxy = 127.0.0.1:9000
socksProxyType = socks5

Następnie ustawiamy w przeglądarce WWW jako HTTP proxy: adres 127.0.0.1 i port 8123 (domyślny port na którym słucha polipo). Gotowe.

Uwaga dotycząca bezpieczeństwa: z uwagi na to, że w ww. rozwiązaniu szyfrowany jest tylko ruch HTTP, i tylko ten przechodzący przez proxy, należałoby pewnie ograniczyć dostęp dla pozostałego ruchu wychodzącego na firewallu. Jeszcze lepszym rozwiązaniem pod względem bezpieczeństwa, z uwagi na ew. spoofing DNS i uniezależnienie się od DNSów dostawców sieci, byłby VPN. Ale w tym przypadku nie to jest priorytetem, poza tym, korzystam z lokalnego serwera DNS.

Linki:

  1. Opis konfiguracji Aero2, wvdial i modemu Huawei E3131.
  2. Alternatywna konfiguracja z polipo uruchomionym na serwerze.

Statystyki luty 2015, era przedmobilkowa

Niedawno zauważyłem, że Blox przy starym szablonie mobilnym nie tylko narzuca wygląd (i reklamy), ale co gorsza nie wyświetla skryptów dodatkowych, szpalty bocznej itp. W tym skryptów stat4u i Piwika, których używam. Oznacza to, że wszystkie statystyki dotyczyły tylko wersji pełnej i zupełnie pomijały klientów korzystających z wersji mobilnej.

Dla pamięci:

Wg Piwika, którego mam podpiętego do moich stron, tablety + smartfony w lutym na Blox to 1,7% urządzeń. I to są ci użytkownicy, którzy przełączyli się na wygląd normalny. Na starym blogu w analogicznym okresie tablety + smartfony to 14% urządzeń. Zupełnie ostrożnie mogę założyć, że „mobilków” jest tu minimum 14%. Stawiałbym bardziej na 20-25%.

Ponieważ wczoraj zmieniłem szablon, to najwyższy czas, żeby zrobić statystyki blog, tym bardziej, że zauważyłem, że właśnie minął ponad rok od ostatnich statystyk. Najwyższy czas zrobić snapshota.

Dominujący system (i wzrost udziału) to nadal Windows 7 – 35,79%, na drugim nadal XP 25% (ewidentnie zaszłość). Vista spada na 6,2%. Minimalny wzrost udziału Linuksa – do 23,9%, podobnie wzrasta Mac OS X – 2,6%. Windows łącznie nadal 71%. Czyli praktycznie bez zmian.

W przypadku przeglądarek minimalny spadek udziału Firefoksa do 50,4%. Chrome wzrasta do 27,5%. Prawdopodobnie kosztem Opery, bo jej udział spadł do 7,7%. Podobnie jak w przypadku Windows XP głównie za sprawą starszych danych się trzyma. Najpopularniejsza z przeglądarek Microsoftu to MSIE 8.0 z udziałem 3,7% (spadek). Łączenie różne wersje IE to 8,5%, czyli delikatny spadek.

Jeśli chodzi o rozdzielczość ekranu, 1280×800 i 1280×1024 znowu spadają, tym razem na 19,5%. 1366×768 ma już 16,1% udziału. Spadek 1024×768 wyhamował – 5,8% (też pewnie w znacznej mierze zaszłości). Gwałtownie rośnie popularność 1920×1080 – 6,2%. 1680×1050 – 4.3%, 1440×900 – 3,9%.

Pagerank bez zmian – 4 tu, 3 na starym, blog muzyczny N/A.

Jeśli chodzi o reklamy Google, to zmieniłem sposób wyświetlania – podpięte są tylko do starych wpisów, na których są wejścia z wyszukiwarki. Za to w większej ilości. W ten sposób stali czytelnicy nie dostają reklam, a nadal są one wyświetlane i klikane. W sumie spadek w przychodach minimalny, a uciążliwość mniejsza.

Oczywiście dane powyżej nadal ze stat4u. Na Piwika patrzę sobie na bieżąco bardziej, pewnie za miesiąc czy dwa spojrzę, ilu tak naprawdę było użytkowników na mobilkach (tablet, smartfon).

UPDATE Cierpliwy nie jestem, spojrzałem już po tygodniu. Przestrzeliłem, bo tu też jest około 14% na mobilkach. Konkretnie 11,9% na smartfonach i 1,8% na tabletach.

Przyspieszanie łącza internetowego

Wpis, który przeleżał jako szkic ponad rok. I bardziej go już nie skończę, więc publikuję, jak jest. Miały być testy i dokładne konfiguracje, ale z braku czasu będzie czysta teoria. Tak czy inaczej myślę, że przyda się ludziom z wolnymi łączami lub korzystającym z WWW (i nie tylko…), a chcącym zminimalizować ilość przesłanych danych do urządzenia końcowego. Do rzeczy.

Na podstawie doświadczeń z Aero2, czyli łącza zarówno wolnego (niska przepływność) jak i zlagowanego (duże opóźnienia pakietów), postanowiłem popełnić krótki poradnik, jak przyspieszyć działanie sieci na wolnym łączu internetowym. Zwykle zakładam w tym poradniku, że użytkownik korzysta z Linuksa, ale nie zawsze i część sposobów przyda się niezależnie od systemu.

Krok pierwszy – przyspieszanie zapytań DNS

Ważna sprawa, bo serwery DNS odpytywane są coraz częściej. Otwarcie pojedynczej strony internetowej to w dzisiejszych czasach często kilkanaście, a nawet kilkadziesiąt zapytań do serwerów DNS. W przypadku zlagowanego połączenia do każdego zapytania dochodzi opóźnienie łącza. Można sobie pomóc poprzez wykorzystanie lokalnego cache DNS. Z prostych w konfiguracji polecam opisany kiedyś dnsmasq lub lekki i wydajny unbound. Cache DNS działa dla całego systemu, nie tylko dla stron WWW, ale w ich przypadku różnica powinna być najbardziej widoczna. Dodatkowa zaleta to uniezależnienie się od potencjalnych problemów z serwerami DNS naszego dostawcy łącza.

Krok drugi – kompresja danych

Mechanizm kompresji danych na wolnym odcinku nie jest niczym nowym. Od dawna z powodzeniem stosuje go Opera w swojej funkcji turbo. Pierwsza obróbka strony odbywa się na ich serwerach, które dysponują szybkimi łączami. Dodatkowo może się odbywać redukcja zbędnych elementów. Zaletą rozwiązania jest łatwość uruchomienia – wystarczy kliknąć przycisk w Operze. Wadą rozwiązania jest to, że wymaga korzystania z Opery i działa tylko dla stron WWW.

Kompresja danych – DIY

ziproxy

Jeśli mamy dostęp do serwera (może być VPS) z Linuksem, możemy w prosty sposób stworzyć podobne rozwiązanie samodzielnie, korzystają z programu ziproxy. Instalujemy je na serwerze, konfigurujemy, jak bardzo mają być redukowane grafiki (60-70% wygląda znośnie), ustawiamy adres IP i port serwera jako proxy w przeglądarce i.. tyle. Od tej pory przez wolne łącze przesyłane są zredukowane (stratnie, zatem gorzej wyglądające) obrazy. Reszta danych jest przesyłana w postaci skompresowanej.

Zaleta jest taka, że działa z każdą przeglądarką i – dla paranoików – że nasze dane nie błądzą po serwerach Opery.

Wady: działa tylko dla WWW, stopień redukcji obrazów ustala się raz, nie ma możliwości dynamicznej zmiany jakości (np. obejrzenie wybranych obrazów w lepszej jakości).

sshuttle

Jeśli mamy dostęp do serwera z Linuksem i dodatkowo ma on zainstalowanego Pythona, to możemy skorzystać z VPN over SSH, czyli shuttle. Rozwiązanie powstało jako namiastka VPN i miało pierwotnie bardziej zapewniać bezpieczeństwo transmisji (szyfrowanie) w przypadku otwartych hotspotów. Można je jednak skonfigurować tak, aby ruch był kompresowany (wykorzystanie kompresji SSH).

Zaletą jest to, że działa dla całego ruchu (TCP), nie tylko dla WWW. Można określić, do których sieci ruch ma być obsługiwany przez to rozwiązanie.

Wada: działa tylko dla TCP (oraz zapytań DNS), wymaga zainstalowanego Pythona na maszynie pełniącej rolę serwera.

ssh + socks proxy

Jeśli nie chcemy instalować dodatkowego oprogramowania, a mamy dostęp do serwera z Linuksem, możemy w prosty sposób wykorzystać tunelowanie SSH oraz – podobnie jak w poprzednim przypadku – wykorzystać kompresję oferowaną przez SSH. W tym celu ustawiamy socks proxy w przeglądarce na localhost oraz port 9000, oraz uruchamiamy ssh -CND 9000 user@serwer. Od tej pory ruch WWW tunelowany jest przez SSH do serwera. Jeśli zależy nam nie tylko na wydajności, ale i na prywatności, warto sprawdzić ustawienia przeglądarki dotyczące przesyłania zapytań DNS przez proxy.

Zaleta: łatwość uruchomienia (na systemach *nix).

Wady: działa tylko dla ruchu WWW (lub jawnie przetunelowanego z innych aplikacji), wymaga przeglądarki WWW ze wsparciem dla socks proxy (praktycznie każda sensowna ma tę opcję dostępną w ten lub inny sposób).

OpenVPN

Ostatni sposób to wykorzystanie OpenVPN oraz wbudowanej kompresji. Wymaga skonfigurowanego OpenVPN zarówno po stronie klienta jak i serwera.

Zalety: działa dla wszystkich rodzajów ruchu.

Wady: wymaga zainstalowania i skonfigurowania OpenVPN. Dochodzi narzut CPU na szyfrowanie (domyślnie będzie włączone, zwł. u zewnętrznych providerów).

Oczywiście cudów nie ma i ww. sposoby pomogą jedynie dla treści, które przesyłane są jako nieskompresowane i dobrze się kompresują. Nie ma co liczyć, że filmy na YouTube zaczną działać szybciej. Osobiście idę na łatwiznę i korzystam zwykle z ssh i socks proxy.