VPN to podstawa czyli jak postawić VPN na Raspberry PI

Internet jest tak podstawową rzeczą, że coraz więcej osób w ogóle nie zastanawia się nad kwestiami bezpieczeństwa. Problem jednak jest spory bo z internetu korzystamy praktycznie nonstop. Niestety często z dziwnych sieci w dziwnych miejscach. Jak konferencje, hotele czy kafejki. Wszystko jest ok do póki mamy wieloskładnikowe hasła do poczty czy innych ważnych serwisów albo przeglądamy przysłowiowego pudelka. Co jednak jeśli potrzebujemy zrobić coś co wymaga większego bezpieczeństwa? Ja korzystam z VPN-a. Nowoczesne smartfony bardzo dobrze sobie radzą z VPN-ami więc wystarczy kilka kliknięć i mamy wirtualnego kondomka.

VPN w routerze

Wiele poważniejszych routerów ma wbudowany serwer VPN. Wystarczy skonfigurować i używać. Problem jest tylko taki, ze trzeba mieć odpowiedni router, który niekoniecznie musi być tani. Nawet jeśli ten, który masz teraz ma opcję VPN server to następny niekoniecznie. Po co zawężać sobie możliwość wyboru routera. Ja proponuję zrobić własny VPN.

Własny VPN

Do zrobienia własnego serwera VPN będziemy potrzebować:

  • 1x Raspberry PI
  • 1x kabel sieciowy lub wifi tak aby malinka była widoczna w naszej domowej sieci
  • 1x karta sd bo na czyms trzeba to postawić
  • 1x Linux – taki do malinki 😉

Instalacja

Mając poprawnie działającą malinę wystarczy z poziomu cmder-a odpalić ssh


ssh -l <userName> <ip malinki np:192.168.1.2>

sprawdzamy czy system ma odpowiednie moduły:


sudo modprobe ppp-compress-18

jeśli nic się nie wyświetliło to (podobno) jest okej

dalej instalujemy pptpd


sudo apt-get install pptpd -y

PPTP to nie jest najlepszy najbezpieczniejszy i najwspanialszy VPN pod słońcem. W firmie nie wdrożyłbym go ale do celów domowych jest w zupełności wystarczający więc jedziemy dalej.

Trzeba to cudo skonfigurować czyli:


sudo nano /etc/pptpd.conf

i na końcu wrzucamy:


localip <ip malinki np.: 192.168.1.2>
remoteip <ip jakie dostaną klienci np.: 192.168.1.100-110>

następny plik pptpd-options


sudo nano /etc/ppp

i na końcu wrzucamy:


nobsdcomp

ms-dns <ip routera np.: 192.168.1.1>
noipx
mtu 1490
mru 1490

teraz najważniejsze czyli super tajne hasło


sudo nano /etc/ppp/chap-secrets

i wpisujemy:


# Secrets for authentication using CHAP
# client server secret IP addresses
<nazwa uzytkownika> * <hasło> *

Gwiazdki są potrzebne – bez nich nie działa. Wszystko rozdzielamy tabulatorami bo inaczej też nie działą (kocham białe znaki 😐 ).

Na koniec jeszcze


sudo nano /etc/sysctl.conf

i na końcu wrzucamy:


net.ipv4.ip_forward=1

Restart malinki i vpn powinien działać. (albo restart samej usługi sudo /etc/init.d/pptpd restart).

Teraz pozostaje tylko na routerze włączyć przekierowanie. Jeśli chcesz stawiać VPN to wiem że wiesz o co chodzi. Więc tylko dla formalności przekierowujemy port 1723 (lub zakres 1723-1723) na IP naszej malinki.

W tym momencie wystarczy w komórce wyłączyć WiFi i skonfiguroawć VPN na nasze IP (swoje IP sprawdzisz  tutaj https://www.whatismyip.com/) Jeśli wszystko jest dobrze skonfigurowane to się połączysz, jeśli się nie połączysz to nie 🙂

 

Zmienne IP

Co jak mam zmienne IP? Wiele routerów potrafi zarejestrować się w DynDnsie ale problem jest taki, że DynDns jest płatny. Niewiele ale płatny. Co gorze, różne routery różne dynamic dns-y wspierają. Więc znowu przy zmianie routera może się okazać, że trzeba by zmienić usługodawcę. Na szczęście można prościej. Niechaj nasza malinka ogarnie wszystko. Instalujemy DDClient-a


sudo apt-get install ddclient

 

DDClient potrafi obsłużyć całkiem sporo dostawców dynamic dns. Więc do wyboru do koloru. Ja zaczynałem dawno dawno temu z DynDnsem potem się zrobił płatny. Potem długi czas używałem właśnie przez DDClienta No-Ip ale oni co miesiąc wysyłają maila, żeby przedłużyć dzierżawę – bojąc się, że zapomnę kliknąć na czas co by skutkowało, że po zamknięciu konta akurat potrzebowałbym tego bezwzględnie przesiadłem się na freedns (http://freedns.afraid.org)

zatem moja konfiguracja DDClienta dla freedns:


sudo nano /etc/ddclient.conf


daemon=1m
timeout=10
use=web, web=checkip.dyndns.com/, web-skip='IP Address'

ssl=yes
protocol=freedns
server=freedns.afraid.org
login=<moj login>
password=<moje haslo>
<moja domena np.: dom.mooo.com>

Od teraz nie straszne nam zmienne IP, nie straszna nam zmiana routera. Mamy własny osobisty VPN. Co najlepsze, możemy go zabrać do kieszeni i postawić gdziekolwiek w 3 min (pamiętając jedynie o przekierowaniu tego 1 portu na routerze).

Koszty malinki są tak niskie, że można spokojnie żyć zgodnie z Single Responsibility Principle. 1 Serwer jedna odpowiedzialność, 1 malina = VPN-a i jesteśmy szczęśliwi i mocno niezależni.

 

 

 

Połowę czasu spędzamy w pracy

We wpisie o sprzeczności interesów pracodawca-pracownik napisałem, że spędzamy połowę życia w pracy.  Zakładając 8h snu pozostaje 16h “świadomego życia” z tego 8h w pracy ale przecież od poniedziałku do piątku, i jeszcze są święta no i urlop – jak wyliczył Paweł 250 dni pracujących – 26 dni urlopu (do tego jeszcze możemy mieć 2 dni opieki etc). Wszystko się zgadza…

… z tą drobną różnicą, że praca to nie 8h. Do tego trzeba doliczyć czas dojazdu – w obie strony. Czyli jeśli wyjście z domu, odpalenie samochodu, przetransportowanie się do firmy oraz zaparkowanie zajmuje tylko 30 minut w jedną stronę, to tak naprawdę czas pracy to 9h (zakładam, że trzeba jeszcze wrócić). W tygodniu to dodatkowe 5h z życia wyjęte. Co więcej, transport kosztuje, czy to czas jeśli idziemy pieszo, czy czas i pieniądze jeśli jedziemy autobusem/autem/rowerem. Jeśli używasz jakiegokolwiek środka transportu to ten środek transportu wymaga pieniędzy – paliwa, przeglądów, napraw – i to są dodatkowe koszty na które trzeba zapracować. Czyli albo pracujemy 8h ale część tego czasu poświęcamy na opłacenie kosztów dojazdu albo pracujemy więcej.

Praca zawodowa to nie wszystko!

Niezbędną pracą, którą musimy wykonywać regularnie to również zakupy, sprzątanie, mycie i wszystko to co jest związane z obsługą samych siebie i rodziny. Policz ile czasu poświęcasz tygodniowo na zakupy, chodzenie do urzędów, lekarzy i innych placówek, które trzeba odwiedzić. W skali roku nazbiera się tego całkiem sporo. Jak to zebrać wszystko razem to obawiam się, że z tego świadomego życia  połowa chyba nawet nie wychodzi. Ilość rzeczy, które na prawdę musimy zrobić jest spora więc ważne aby pozostały czas wykorzystywać bardzo rozsądnie, w końcu mamy go niewiele – bardzo niewiele.

Jak sobie z tym poradzić?

Hm….. nie pchać się w bezsensowne aktywności, które marnują nasze zasoby a nie wzbogacają nas zbytnio. To co MUSIMY MUSIMY ograniczać w miarę możliwości do minimum i…… no właśnie, co jeszcze?

Przełączanie aplikacji bez odrywania się od klawiatury. Switcheroo

W czasie programowania lubię móc zrobić wszystko co potrzebuję bez odrywania rąk od klawiatury. Ot po prostu tak jest szybciej, co nie powoduje, że muszę się odrywać od tego nad czym pracuję na zbyt długi czas.  Przełączanie aplikacji w Windowsie jest… dobre jak uruchomi się dwie aplikacje. Przy większej ilości ALT+TAB  i  ALT+SHIFT+TAB są lekko niewydajne. Szukałem czegoś małego i sprawnie działającego, które obsługiwało by się podobnie jak wyszukiwanie klas w ReSharperze – to takie wygodne jest. Po długich poszukiwaniach trafiłem na Switcheroo

https://github.com/jsulak/Switcheroo

Proste do bólu i działa prawie idealnie. Ustawiłem na CTRL+ALT+SPACJA i śmiga pięknie.

switchero3

NSubstitute czyli lepsza wersja Moq

NSubstitute to (dla tych co nie znają jeszcze) taki Moq na sterydach. Sytuacja wygląda tak, mamy klasę, która potrzebuje jakiś zależności, mniej więcej tak:

  public class SomeClass
  {
    public SomeClass(INeedSomeStuff stuff)
    {
        // .......
    }
  }

  public interface INeedSomeStuff
  {
     string DoSomeStuff(string param);
     void DoSomeOtherStuff();
  }

Możemy użyć moq i napisać:

var moq = new Mock<INeedSomeStuff>();
moq.Setup(m => m.DoSomeStuff("Hello")).Returns(r => "World");

INeedSomeStuff someStuff = moq.Object;
var someObj = new SomeClass(someStuff);

lub za pomocą NSubstitue napisać dokładnie to samo tak:

var someStuff = Substitute.For<INeedSomeStuff>();
someStuff.DoSomeStuff("Hello").Returns("World");
            
var someObj = new SomeClass(someStuff);

poza tym, że pozbywamy się lambd, to jeszcze nie mamy dodatkowego .Object o którym trzeba pamiętać, ot mamy zamiennik naszej klasy. Ale to nie wszystko, jest jeszcze lepiej, NSubstitute działa od razu, więc nie trzeba robić setupów w miejscach, gdzie czasem moq tego wymaga ale najlepsze to kwiatek na jaki się nadziałem przy przechodzeniu z Moq na NSubstitute. Jest kawałek kodu, który zwraca kolorki z zadanej palety, po kolej – ColorGenerator. Metoda GetColor() zwraca kolor z tablicy. Za każdym wywołaniem bierze następny kolor. Tyle teorii. Sytuacja taka, że trzeba to zamockować:

 _mockColorGenerator.Setup(x => x.GetColor()).Returns(_colors[0])
     .Callback(() => _mockColorGenerator.Setup(x => x.GetColor()).Returns(_colors[1])
     .Callback(() => _mockColorGenerator.Setup(x => x.GetColor()).Returns(_colors[2])
     .Callback(() => _mockColorGenerator.Setup(x => x.GetColor()).Returns(_colors[3]))));

Może, za pomocą moq można to napisać lepiej no ale jest (było) i działało. W NSubstitute można to zapisać tak:

_colorGenerator.GetColor().Returns(_colors[0], _colors[1], _colors[2], _colors[3]);

Efekt ten sam tylko 6 lambd mniej, 3 callbacki mniej, ogólniej wielokronie czytelniej.

P.S. NSubstitute jest na nugecie więc instalacja jest bezproblemowa, dodatkowo można używać równolegle z moq i małymi kroczkami wycinać tego ostatniego.

NDepend 5 czyli narzędzie do prześwietlania kodu

imageWczoraj wyszła nowa wersja NDepend-a, jeszcze ciepła, cieplutka. 5-tka ma dwie rewolucyjne rzeczy, pierwsza to nowe UI, ładniejsze i bardziej “nowoczesne”, druga – i to jest dla mnie killer to dashboard. Zatem po kolej. Mamy nowe logo, które wygląda całkiem całkiem jak na moje średnio wprawne oko. Mamy wygląd czyli nowe menu, graficzki i inne takie. Wprawdzie nie jest to to co daje Visual Studio, to jednak Patrick (autor tego cudownego narzędzia) mówił, że będą dalej nad tym pracować, więc można się spodziewać, że będzie dostępny również temat a’la visual studio 2012/13. Tyle kosmetyki, teraz to co mnie najbardziej urzekło:

image.

image

imageimage

NDepend automatycznie, raz dziennie wykonuje pełną analizę i buduje wykresiki które to w czasie pokazują jak psujemy kod. Genialnie prosta i użyteczna rzecz. Wprawdzie wcześniejsza wersja protrafiła pokazywać diff z poprzednią wersją to jednak nigdy nie miałem serca aby to uruchomić. Tutaj “out of the box” to dostajemy i to działa Uśmiech a ponieważ wykresy aktualizują się automatycznie, to nie wymaga to od nas nic poza codziennym otwarciem projektu w visualu, swoją drogą, będę musiał sprawdzić jak z automatu codziennie pobrać najnowszą wersję z repo i zaktualizować wykresy.

Jest jeszcze jedna rzecz, która mnie urzekła w tej wersji. Odnoszę wrażenie, że zestaw wbudowanych zasad jest bardziej dostosowany do “Martinowskich” nauczań i tego o czym pisze Robert C. Martin w Clean Code. Oto moja lista warning-ów – i 3 krytycznych naruszeń, jak dla mnie bomba.

image

W ramach promocji, można teraz kupić NDependa z 20% zniżką. Więc jeśli nie masz tego narzędzia to może warto pomyśleć. Myślę, że każdy zespół powinien mieć przynajmniej jedną licencję bo narzędzie daje świetny ogląd na to co tam w kodzie natworzyliśmy.