Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Raspberry Pi jako serwer VPN

Jako pierwszy wpis na moim blogu, proponuję aby z Raspberry Pi, z zainstalowanym systemem Raspbian (w moim przypadku z dystrybucją wheezy) stworzyć serwer VPN.

Wpis będzie bardzo, bardzo, bardzo długi, więc polecam zawczasu zrobić kawę, lub jej termos, i/lub upewnić się, że w trakcie tej świątecznej atmosfery, możecie znaleźć sobie przytulne, ustronne miejsce z dala od kuchni (z której oczywiście dobiega głos szanownej małżonki, że czeka Cię kolejna lista zadań do zrobienia). Za ilość słów (nie zawsze na temat) po prostu najmocniej przepraszam :)

Pomysł na serwer VPN wpadł jako tako sam, kiedy nie raz znalazłem się w sytuacji, kiedy będąc w biurze (lub w publicznym miejscu) nie mogłem odwiedzić niektórych stron internetowych, tylko dlatego, że usługodawca zablokował do nich dostęp.
Posiadając działające Raspberry Pi lub inny mały podobny sprzęt, możemy stworzyć serwer VPN, do którego nasz laptop, telefon czy tablet będzie mógł się podłączyć i ruch internetowy będzie przekierowany poprzez łącze w domu (lub miejsca gdzie Raspberry jest podłączone do internetu).
Zaletą tego systemu jest fakt, że sami jesteśmy administratorem takiego "serwera", oraz że nie musimy dodatkowo płacić za utrzymanie takiego serwera (chyba, że kupujemy Raspberry Pi tylko dla serwera VPN).
Posiłkując się oficjalnym forum raspberry pi oraz różnymi portalami IT, zdobyłem wystarczającą umiejętność posługiwania się komendą kopiuj > wklej, aby system działa dla mnie bezproblemowo, 24 godziny na dobę, 7 dni w tygodniu.
Ale od podstaw (lub od mniej więcej średnio amatorskiego poziomu)

Uruchamiamy SSH

Zaczynamy od uruchomienia Raspberry Pi i zalogowania się do niego poprzez terminal ssh. Osobiście, na windowsie używam małego programu o nazwie putty, natomiast z telefonu (Android) łączę się za pomocą VxConnectBot.

Jeśli Raspberry nie ma jeszcze uruchomionego dostępu poprzez ssh, możemy aktywować go poprzez panel konfiguracyjny raspberry.

Otwieramy terminal wybierając odpowiednią ikonę z menu lub ze skrótu na pulpicie:

Większość konfiguracji (można by rzec, że 99%) będziemy wykonywać właśnie z konsoli/terminala.

Komendy zatwierdzamy oczywiście enterem i obserwujemy jakie są wyniki na ekranie. Jeśli komenda została wykonana poprawnie a nie było żadnego odzewu po drugiej stronie, to w większości przypadków oznacza sukces.

Na start, aby zaktywować ssh:

sudo raspi-config

Z menu wybieramy opcję ósmą, czyli Advanced Options, po czym wybieramy SSH i Enable.

Po zakończeniu, wybieramy oczywiście opcję Finish.

Od tej pory, będąc w tej samej sieci, powinniśmy bezproblemowo móc podłączyć się do naszego Raspberry za pomocą takich programów jak putty.
To ogólnie są podstawy malinki, więc nie sądzę, żeby tutaj nastąpiły jakieś problemy, jednak należy z pewnością zaznaczyć (w szczególności dla początkujących), że samo "aktywowanie" funkcji na Raspberry, nie zawsze będzie przynosić pożądane efekty, będąc poza domową siecią, jeśli np. nie ustawimy przekierowania portów.

A cóż to oznacza? Oznacza to, że jeśli będziemy poza domem i będziemy podłączeni do obcej sieci, to w momencie kiedy będziemy chcieli podłączyć się do Raspberry np. z hotelu, to nasz router nie będzie wiedział, do jakiego urządzenia wysłać żądanie.

Także ten tego... pomimo, że poradnik jest bardzo bardzo dokładny jeśli chodzi o nawet podstawowe rzeczy na Raspberry Pi, to jednak byłoby wręcz wskazane, żeby użytkownik wiedział co to jest adres IP i jak działa przekierowywanie portów. Poniżej niestety nie będzie nic na temat przekierowywania, chyba że ktoś bardzo będzie potrzebował (choć takich poradników na necie jest wręcz za dużo).
(P.S. A przepraszam. Ważnym punktem jest, że aby połączyć się do serwer OpenVPN, nalezy przekierować port 1194 UDP do naszego Raspberry)

Wracając do głównego tematu.

Stały adres IP w sieci LAN

Jeśli uruchomiliśmy już SSH na naszej malince, to aby móc się do niej podłączyć przez np. putty, warto byłoby wiedzieć, pod jakim adresem IP nasze Raspberry jest dostępne i przy okazji ustawić IP na malince na stałe.

Aby poznać adres naszego Raspberry, w konsoli wpisujemy:ifconfigJeśli Raspberry jest podłączone przewodem sieciowym, to zazwyczaj zgłosi się do nas na adapterze eth0:

Na moim przykładzie, Raspberry jest podłączone przewodem cat5e do routera i otrzymało adres 192.168.0.8. Maska sieci to 255.255.255.0, domyślną bramą jest pod 192.168.0.1, adres rozgłoszeniowy to 192.168.0.255 i siec jest pod adresem 192.168.0.0

Aby poznać potrzebne informacje do ustawienia adresu IP na stałe, wystarczy wpisać ifconfig oraz również komendą netstat –nr zapoznać się z naszą domyślną bramką.

Ok. Zapisujemy sobie gdzieś długopisem, ołówkiem czy na tablecie, smartfonie i innych nośnikach takie informacje jak: IP, Maska, Gateway (bramka) oraz bcast, destination i przechodzimy do zmiany pliku konfiguracyjnego od interfejsów sieciowych.

Wpisujemy w konsoli:sudo nano /etc/network/interfacesco w skrócie oznacza, że otwieramy edytor nano jako administrator a w nim plik interfaces

Odszukujemy iface eth0 inet dhcp i zmieniamy to na iface eth0 inet static po czym poniżej dodajemy informację o naszym wybranym adresie IP (oczywiście polecam zmienić tak, aby zgadzały się z Twoim ustawieniem sieci):

address 192.168.0.8

netmask 255.255.255.0

network 192.168.0.0

broadcast 192.168.0.255

gateway 192.168.0.1

Z edytora nano wychodzimy wciskając klawisze CTRL+X, zatwierdzając że chcemy zapisać zmiany za pomocą "Y" i potwierdzając Enterem że nadpisujemy plik o tej samej nazwie.

W tym momencie ustawiliśmy adres IP na stałe na Raspberry Pi, ale nadmienię tutaj, że nie jest to 100% idealne rozwiązanie, aby ten adres był na zawsze przypisany do Raspberry Pi, bo tak naprawdę nie jest on w ogóle przypisany do tego urządzenia. Przypisanie adresu IP do urządzenia zazwyczaj odbywa się na routerze (w środowiskach biznesowych czasami na serwerze DHCP). Dlaczego? Otóż śpieszę z wyjaśnieniem. Jeśli np. nasz router ma ustawione, żeby przydzielać adresy IP w zakresie od 192.168.0.2 do 192.168.0.50 a czas ważności przydziału (rezerwacji adresu) jest ustawiony na tydzień, to może się zdarzyć (choć jest to mało prawdopodobne), że kiedyś odłączymy Raspberry Pi na jakiś czas, po czym jak je podepniemy z powrotem do tego samego routera, to Raspberry nie będzie w stanie komunikować się w danej sieci, bo ten sam adres jaki ustawiliśmy na Raspberry, został przyznany do innego urządzenia, które pojawiło się w sieci. Aby temu zapobiec, oczywiście używamy tabeli rezerwacji IP na routerze, ale to też będzie osobny temat (lub polecam po prostu pogooglować).

Statyczny adres IP z zewnętrznej sieci

Kolejnym punktem naszej wędrówki (aby ten nasz serwer VPN miał w miarę ręce i nogi), to kwestia statycznego zewnętrznego adresu IP. No bo jaki byłby sens, że wyjeżdżając na delegację służbową, siedzimy w Pendolino, korzystamy z Wifi, chcemy podłączyć się do Raspberry jako do naszego serwera VPN, ale nie znamy jego adresu IP. Jeśli mamy statyczny adres IP, to super ale w niektórych krajach jest prawie niemożliwe aby zdobyć takie udogodnienie jako prywatny (niebiznesowy) klient.

Z pomocą przychodzą nam oczywiście takie serwery DNS jak Dynamic-DDNS czy no-ip.com, w których nawet zakładając darmowe konto, można uzyskać domenową nazwę, podpietą pod naszą sieć. Osobiście korzystam z no-ip.com a ponieważ mój domowy router jest dosyć biedny (jeśli chodzi o jego konfigurację), to nie jestem w stanie niestety podpiąc konta z serwisu no-ip do ustawień routera. Ale jak już mam Raspberry Pi, to czemu by nie dodać takiej funkcjonaliści jak już przy tym siedzimy ?

Zapewne niejeden z was by zaproponował, aby zakupić lepszy router w którym można "poustawiać więcej opcji", jednak nie jestem zwolennikiem wydawania pieniędzy na router, który za pół roku albo za rok może się okazać zupełnie niekompatybilny z infrastrukturą usługodawcy. Ponieważ mieszkam już kilka dobrych lat w UK, to nie raz zdarzało mi się, że na danym mieszkaniu nie było np. sensu podłączać linii ADSL, tylko mam po prostu światłowód, a natomiast przeprowadziłem się do domu, w którym w ogóle nie było żadnego dobrego internetu i trzeba było na początku męczyć się z modemem 3G, aby znowu trafić do innego miejsca, gdzie bez routera "od dostawcy" to nie było nawet jak wdzwonić się w ich sieć. Taki trochę dziki zachód, ale zazwyczaj to co dostajesz od dostawcy internetu, jest po prostu za darmo i ma działać.

Ale wracając do no-ip i zakładania domeny (darmowej):

Najpierw zakładamy konto na stronie http://www.noip.com/ LinkZnajomość podstawowego angielskiego jest wymagana, a login i hasło należy zachować na później.
Po wybraniu opcji signup, wystarczy wybrać adres e-mail, hasło i jaką nazwę chcielibyśmy użyć w internecie. Polecam zaznaczyć, że adres domeny wybierzemy później (bo jest po prostu większy wybór):

Aktywujemy konto, szukając maila z naszej skrzynce pocztowej (mailowej oczywiście), po czym przechodzimy do opcji "Create a hostname now"

Wpisujemy nazwę naszej domeny i wybieramy suffix:

Jak już założyliśmy konto i dodaliśmy nazwę domeny (którą niestety w wersji darmowej należy comiesięcznie odnawiać za pomocą kliknięcia w Captcha "I am not a robot" przy powiadomieniu drogą mailową), to możemy na Raspberry dodać skrypt, który periodycznie, będzie odświeżał serwer no-ip.com z naszym obecnym adresem IP, przez co udając się pod właśnie tą nazwę domeny, będziemy przekierowywani na nasz adres IP.

Sprytne co nie?

Instalacja no-ip.com

Wracamy do Raspberry Pi, w konsoli/terminalu wpisujemy:sudo apt-get update && sudo apt-get upgradeZatwierdzamy za pomocą "Y" jeśli cokolwiek jest do zaktualizowania i pobieramy noip:wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gzPo pobraniu rozpakowujemy i usuwamy pobrane archiwum:tar vzxf noip-duc-linux.tar.gz && rm noip-duc-linux.tar.gzZa pomocą komendy ls -l możemy wylistować zawartość obecnego katalogu, skupiamy się aby odnaleźć ten nowo powstały dla no-ip i przechodzimy do niego za pomocą komendy:cd noip-2.1.9-1(jeśli pobrała się nowsza wersja, zmieniamy oczywiście komendę adekwantnie do numeru wersji)

Tu mała podpowiedź. Jeśli chcemy łatwo wpisywać nazwy katalogów czy komend, wystarczy wpisać początek (pierwsze znaki) i nacisnąć przycisk TAB. Jeśli jest tylko jeden rezultat, terminal automatycznie uzupełni brakujące znaki, jeśli jest więcej wyników, należy nacisnąć TAB przynajmniej dwa razy, a wyświetlą się dostępne komendy/pliki/katalogi.

Aby przygotować pliki do instalacji, wpisujemy:sudo makeIgnorujemy błędy, które się pojawiły (tacy z nas rebelianci) i przechodzimy do instalacji:sudo make installPodczas instalacji program zapyta nas o nasz login (mailowy) i hasło, oraz jak często powinien odświeżać serwer o naszym adresie IP. Co 15 minut myślę, że jest w sam raz:

Następnie uruchamiamy noip po raz pierwszy wpisującsudo /usr/local/bin/noip2Aby dodac noip do „autostartu” musimy stworzyć plik z konfiguracją.
Wpisujemy w konsoli sudo nano /etc/init.d/noip i wklejamy skopiowaną konfiguracją (aby wkleić do terminala, wystarczy nacisnąć prawy przycisk myszy)#! /bin/sh # /etc/init.d/noip ### BEGIN INIT INFO # Provides: noip # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Simple script to start a program at boot ### END INIT INFO # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting noip" # run application you want to start /usr/local/bin/noip2 ;; stop) echo "Stopping noip" # kill application you want to stop killall noip2 ;; *) echo "Usage: /etc/init.d/noip {start|stop}" exit 1 ;; esac exit 0

Zamykamy edytor naciskając CTRL+X i potwierdzamy literą „Y” i Enter.
Następnie musimy dodać uprawnienia do pliku:sudo chmod 755 /etc/init.d/noiporaz dodanie informacji do autostartusudo update-rc.d noip defaults

Jeśli mamy już załatwione trzy podstawowe sprawy (włączenie ssh, stałe IP w sieci LAN oraz adres domeny lub stały adres IP ze świata z zewnątrz) to możemy zabrać się za instalację serwera OpenVPN na Raspberry.

Instalacja OpenVPN

Ponieważ w poprzednich punktach instalowaliśmy już aktualizację, nie musimy tego wykonywać raz jeszcze, lecz jeśli jeszcze tego nie zrobiliśmy, to oczywiście w konsoli wpisujemy sudo apt-get update oraz sudo apt-get upgrade

Następnie instalujemy podstawę:sudo apt-get install openvpnpotwierdzamy, że chcemy wykorzystać całe 1,5MB przestrzeni na naszym Raspberry (jak już święta to rozpusta na całego co nie?)

Pierwszym krokiem będzie wygenerowanie klucza serwera.
Ostrzegam, że czeka nas dosyć długa podróż przez nudne skrypty i komendy, więc jeśli już się znudziłeś, to zawróć póki możesz :)

Ty, który wchodzisz, żegnaj się z nadzieją...

Przejdźmy na uprawnienia administratora trochę bardziej permanentnie: sudo -si skopiujmy cały katalog z /usr/ do folderu z openvpncp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa(proszę zwrócić uwagę na spację pomiędzy dwoma adresami. Ten po lewej to skąd kopiujemy, a ten po prawej to do którego kopiujemy)
Następnie przechodzimy do katalogu:cd /etc/openvpn/easy-rsa

Zmieńmy teraz plik konfiguracyjny aby wskazywał na nową lokalizację folderu z kluczami
Edytujemy plik vars:nano vars

W linii trzynastej lub pietnastej, zmieniamy linie export EASY_RSA na:

export EASY_RSA="/etc/openvpn/easy-rsa"

I tu taki przerywnik.
Osobiście preferuję wpisywać większość (albo chociaż połowę) ręcznie, gdyż zdarza się, że jeśli autor użył innego kodowania znaków, to znaki specjalne nie będą poprawnie odczytywane przez nasze Raspberry Pi. Najczęściej spotykam się z sytuacją, że skopiowanie komendy typu sudo -s kończy się błędem, że użyłem niepoprawnego symbolu „-„. lub też kopiowanie znaków jak apostrofy, cudzysłowia itp.

Jeśli zależy nam na lepszej metodzie szyfrowania kluczy, możemy odnaleźć linię export KEY_SIZE=1024 i zmienić to na 2048. Są tego plusy i minusy (np. podczas generowania bezpiecznego klucza, będziemy czekać o wiele wiele dłużej)

Jak już utworzyliśmy zmiany, to zapisujemy plik poprzez CTRL+X i potwierdzamy „Y” że chcemy zapisać zmiany.
Ok. Czas zbudować certyfikat CA i root CA certyfikat.
CA to Certifcate Authority – coś jak urząd który potwierdza, że klucz który posiadamy jest poprawny.
Certyfikaty takie są spotykane w bankowości oraz stronach które używają bezpiecznego logowania (chyba nawet dobre programy taki posiadają :D ), ale w naszym przypadku, nasze Raspberry będzie wystawiać certyfikat sam sobie, aby wygenerować zatwierdzone klucze dla klientów sieci VPN.
Jeśli znajdujemy się w katalogu /etc/openvpn/easy-rsa to wpisujemy komendy po kolei:source ./vars

./clean-all

Spowoduje to ustawienie nowych zmiennych oraz wyczyszczenie wszystkich kluczy.

Teraz zbudujmy podstawowy certyfikat dla serwera:./build-caRaspberry zapyta o wiele rzeczy, ale jedyne na co musimy odpowiadać to Common name i Name (czyli trzymajmy się zasady, że jeśli jest dopisek "changeme" to zmieniamy)

Przy pierwszym certyfikacie ustawiamy nazwę dla serwera. Ja w swoim przykładzie po prostu nazwę go Serwer.

Teraz zbudujmy klucz dla serwera, żeby sam serwer mógł łączyć się z samym sobą (tak mniej więcej). Oczywiście "Serwer" zmieniamy na :./build-key-server SerwerNa pytanie „Common name” odpowiadamy tak, jak nazwaliśmy serwer.
Challenger password pozostawiamy puste
Na sign the certificate odpowiadamy „y” że tak, chcemy podpisać certyfikat
Na kolejne pytanie też odpowiadamy twierdząco

Na początek stwórzmy klucz dla jednego użytkownika (nazwę go Uzytkownik):

./build-key-pass Uzytkownik

Wpisujemy dwa razy haslo dla użytkownika (PEM pass phrase) oraz potwierdzamy nazwe użytkownika w polu „Name [changeme]”
Challenge password pozostawiamy puste
Sign in certificate – odpowiadamy tak, dwa razy

Jeśli chcemy dodać kolejnych użytkowników, po prostu robimy jeszcze raz ./build-key-pass [nazwa_nastepnego_uzytkownika]

Przechodzimy do folderu z kluczami:cd keysTeraz zabezpieczamy klucz algorytmem szyfrującym aby nie było go tak łatwo złamać:openssl rsa -in Uzytkownik.key -des3 -out Uzytkownik.3des.keyPotwierdzamy trzy razy hasło ustawione dla użytkownika.

Operację powtarzamy dla każdego z użytkowników, oczywiście zmieniając nazwy plików .key i .3des.key

Wróćmy do katalogu /easy-rsa/ poprzez wpisanie:cd ..

Czas dodać protokół panów Witfield Diffy i Martina Hellmana. Jest to (wg wikipedii) protokół uzgadniania kluczy szyfrujących. Nie chroni to przed atakami typu man in the middle ale pozwala bezpiecznie uzgodnić klucz (nawet jeśli ktoś podsłuchuje uzgadnianie).

Zanim jednak wprowadzimy komendę, ostrzegam, że w przypadku szyfrowania 1024-bitowego proces ten zajmuje coś około 5-15 minut, natomiast przy 2048 bitach, na moim Raspberry zajęło to spokojnie kilka godzin.

I tu też mała ciekawostka... Putty i w ogóle terminal linuxowy ma to do siebie, że jeśli jesteśmy podłączeni zdalnie i wykonujemy jakąś operację w konsoli, to jeśli zerwiemy połączenie (lub zamkniemy okno), to cokolwiek robiliśmy - będzie przerwane.
Nie chcę nawet mówić jak wkurzające to potrafi być, choć jednocześnie jest to w pewien sposób bezpieczne :)
Jeśli chcemy wykonać teraz dodanie tego protokołu Diffy-Hellman, polecam doinstalować programik o nazwie "screen" który pozwoli nam utworzyć coś w rodzaju wirtualnej sesji wewnątrz terminala, która nie umrze jeśli zamkniemy połączenie.

Podpowiem tylko, że aby zainstalować screen, wystarczy wpisać w konsoli:sudo apt-get install screen więcej informacji o "screen" pod tym adresem

także ten... jak już jesteśmy gotowi, to wpisujemy:

./build-dh

Czekamy, czekamy i czekamy.... jak już to się zakończy, to dodajemy zabezpieczenie HMAC aby nasza komunikacja była bardziej bezpieczna Więcej informacji o HMAC - wikipedia

openvpn --genkey --secret keys/ta.key(proszę zwrócić uwagę na podwójne myślniki w kodzie)

Klucze i certyfikaty (plus podstawowe zabezpieczenia) zrobione.
Teraz skonfigurujmy serwer OpenVPN aby wiedział których kluczy używać.
Wpisujemy:nano /etc/openvpn/server.conf

i wklejamy poniższy kod, który musimy zmodyfikować, aby pasował do adresu naszego Raspberry Pi: local 192.168.0.8 # Wpisz adres IP Twojego Raspberry Pi dev tun proto udp #Niektórzy musza uzywac TCP, zmien jesli wiesz co robisz. port 1194 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/Serwer.crt # zmien na nazwe klucza twojego serwera key /etc/openvpn/easy-rsa/keys/Serwer.key # zmien na nazwe klucza twojego serwera dh /etc/openvpn/easy-rsa/keys/dh1024.pem # jesli wybrales szyfrowanie 2048 bitowe, zmien tutaj! server 10.8.0.0 255.255.255.0 ifconfig 10.8.0.1 10.8.0.2 push "route 10.8.0.1 255.255.255.255" push "route 10.8.0.0 255.255.255.0" # Ponizej dane Twojej sieci push "route 192.168.0.8 255.255.255.0" # zmien z numerem IP i maski Twojego Raspberry # Dodaj adres DNS # jesli Twoj router nie robi za serwer DNS, mozesz, uzyc DNS Google 8.8.8.8 push "dhcp-option DNS 192.168.0.1" # Zazwyczaj bedzie to adres Twojego routera push "redirect-gateway def1" client-to-client duplicate-cn keepalive 10 120 tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 cipher AES-128-CBC comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log 20 log /var/log/openvpn.log verb 1

Ok.. serwer niby postawiony, ale wciąż mamy jeszcze sporo do zrobienia (sorry.. wiem że to długie i męczące).

Edytujemy konfigurację Rapsberry aby pozwolić na przekierowywanie ruchu:nano /etc/sysctl.confZnajdź linię która mówi :
„Uncomment the next line to enable packet forwarding for IPv4.”
i usuń znak "#" sprzed tej linii, pozostawiając działającą linię (# przed czymkolwiek oznacza - to jest komentarz/notka, zignoruj, nie wykonuj tego)

Wyjdź z edytora nano zapisując zmiany.

Poinformuj Raspberry o zmianie komendą:sysctl -p

Raspberry domyślnie ma wbudowany firewall, więc musimy dodać wyjątek do zapory.

Zbudujemy prosty skrypt:nano /etc/firewall-openvpn-rules.shwpisujemy w środku:#!/bin/sh iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.8 Oczywiście zmieniamy mój adres 192.168.0.8 na adres IP raspberry Pi
Zapisujemy zmiany, wychodzimy z edytora, dodajemy uprawnienia wpisując:chmod 700 /etc/firewall-openvpn-rules.shchown root /etc/firewall-openvpn-rules.sh

Pozostaje dodać jeszcze skrypt, aby zasady firewalla uruchamiały się dla naszego interfejsu sieciowego:nano /etc/network/interfacesZaraz pod iface eth0 inet static dopisujemypre-up /etc/firewall-openvpn-rules.sh

Zapisujemy, wychodzimy z edytora.
Uruchamiamy ponownie Raspberry:sudo reboot

Po uruchomieniu ponownym przechodzimy znowu na uprawnienia admina:sudo -sDodajemy wartości domyślne dla serwera.nano /etc/openvpn/easy-rsa/keys/default.txtWklejamy poniższy kod, pamiętając aby edytować w linii czwartej adres zewnętrzny do naszego Raspberry Pi:client dev tun proto udp remote twojpublicznyadres 1194 resolv-retry infinite nobind persist-key persist-tun mute-replay-warnings ns-cert-type server key-direction 1 cipher AES-128-CBC comp-lzo verb 1 mute 20

Zamykamy plik, zapisujemy zmiany, tworzymy kolejny skrypt dla OpenVPN:nano /etc/openvpn/easy-rsa/keys/MakeOVPN.sh

#!/bin/bash # Default Variable Declarations DEFAULT="default.txt" FILEEXT=".ovpn" CRT=".crt" KEY=".3des.key" CA="ca.crt" TA="ta.key" #Ask for a Client name echo "Please enter an existing Client Name:" read NAME #1st Verify that client’s Public Key Exists if [ ! -f $NAME$CRT ]; then echo "[ERROR]: Client Public Key Certificate not found: $NAME$CRT" exit fi echo "Client’s cert found: $NAME$CR" #Then, verify that there is a private key for that client if [ ! -f $NAME$KEY ]; then echo "[ERROR]: Client 3des Private Key not found: $NAME$KEY" exit fi echo "Client’s Private Key found: $NAME$KEY" #Confirm the CA public key exists if [ ! -f $CA ]; then echo "[ERROR]: CA Public Key not found: $CA" exit fi echo "CA public Key found: $CA" #Confirm the tls-auth ta key file exists if [ ! -f $TA ]; then echo "[ERROR]: tls-auth Key not found: $TA" exit fi echo "tls-auth Private Key found: $TA" #Ready to make a new .opvn file - Start by populating with the default file cat $DEFAULT > $NAME$FILEEXT #Now, append the CA Public Cert echo "<ca>" >> $NAME$FILEEXT cat $CA >> $NAME$FILEEXT echo "</ca>" >> $NAME$FILEEXT #Next append the client Public Cert echo "<cert>" >> $NAME$FILEEXT cat $NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $NAME$FILEEXT echo "</cert>" >> $NAME$FILEEXT #Then, append the client Private Key echo "<key>" >> $NAME$FILEEXT cat $NAME$KEY >> $NAME$FILEEXT echo "</key>" >> $NAME$FILEEXT #Finally, append the TA Private Key echo "<tls-auth>" >> $NAME$FILEEXT cat $TA >> $NAME$FILEEXT echo "</tls-auth>" >> $NAME$FILEEXT echo "Done! $NAME$FILEEXT Successfully Created." #Script written by Eric Jodoin

Oczywiście plik zapisujemy, wychodzimy z edytora

Przechodzimy do folderu z kluczami:cd /etc/openvpn/easy-rsa/keys/

Dodajemy uprawnienia do dopiero co stworzone plikuchmod 700 MakeOVPN.shI uruchamiamy skrypt:./MakeOVPN.sh

Wpisujemy nazwe użytkownika i zatwierdzamy enterem.
O ile wpisaliśmy wszystko dobrze, zostanie to potwierdzone stosownym komunikatem.

Skrypt powyżej wygenerowal nam klucz ovpn którego użyjemy np. na laptopie.
Serwer jest tak jakby ukończony.
Aby zainstalować oprogramowanie na laptopie, potrzebne nam będzie kilka plików.

Będziemy potrzebować pliku ovpn z Raspberry.
Polecam użyć oprogramowania jak WinSCP (do pobrania stąd) i po prostu podłączyć się do Raspberry na porcie 22 (SSH) którego i tak używamy dla sesji w terminalu.

Tu mała ciekawostka, próba przejścia do folderu /etc/openvpn/easy-rsa/keys powinna zakończyć się niepowodzeniem:

Powód jest dosyć prosty.
Dla katalogu keys nie nadaliśmy uprawnienia dla użytkowników.
Przechodzimy z powrotem do konsoli (ale tylko na chwilę) i tymczasowo dodajemy uprawnienia dla wszystkich:sudo chmod 777 -R /etc/openvpnTeraz możemy skopiować interesujący nas klucz.

Aby usunąć dostęp dla wszystkich (co jest dosyć ważne), a zostawić dostęp tylko dla użytkownika „pi” w konsoli wpisujemy:sudo chmod 600 -R /etc/openvpnPo rozłączeniu sesji w WinSCP i zalogowaniu się podobnie, powinniśmy mieć zablokowany dostęp do katalogu /etc/openvpn

Instalacja oprogramowania klienta na Windowsie

Teraz czas zainstalować oprogramowanie na laptopie (Win7)
Na swoim laptopie używam aplikacji małej i bardzo wygodnej w użyciu którą jest:
SecurePoint SSL VPN v2 Client (do pobrania stąd)

Po pobraniu i zainstalowaniu, otwieramy aplikację i z paska zadań otwieramy podręczne menu. Wybieramy małą konfiguracji (zębatka) i wybieramy "Import"

Importujemy plik .ovpn i klikamy na strzałki obok ikony użytkownika.
Po wpisaniu hasła, jeśli wszystko poszło po naszej myśli - powinniśmy być podłączeni do Raspberry Pi jako klient jego sieci VPN.

Instalacja oprogramowania klienta na Androidzie

Mam nadzieję, że już dawno mamy plik ovpn dla naszego klienta/użytkownika. Jeśli nie - no to musimy jeden stworzyć i skopiować go do pamięci telefonu. Następnie pobieramy aplikację OpenVPN Connect ze sklepu GooglePlay (link tutaj)

Otwieramy aplikację na telefonie, wybieramy menu> Import, Import from SD Card

Wybieramy plik .ovpn
Po klinięciu na Connect, powinniśmy być podłączeni do serwera VPN

Tak prawdę mówiąc, na tym powinienem skończyć ten wpis, jednakże poniżej dodaję jeszcze informację, jak dodać użytkownik, kiedy już wszystko zakończyliśmy, a wystąpiła by potrzeba dodania kolejnego klienta.

Przykład na podstawie tworzenia klucza dla mojego telefonu:
Po pierwsze, musimy przejść na uprawnienia roota w terminalu Raspberry Pi:sudo -sNastępnie przechodzimy do katalogu easy-rsa:cd /etc/openvpn/easy-rsaUaktualniamy konfigurację:source ./varsPo czym uruchamiamy./build-key-pass Nexus(jeśli wystapi blad skrypt nie potrafi odczytac ca.crt i ca.key, wtedy dodaj uprawnienia dla wszystkich chmod 777 dla /etc/openvpn/easy-rsa/ i jeszcze raz zrob source vars i buildkeypass)

Oczywiście podaj jakie hasło chcesz użyć dla następnego użytkownika, na pozostałe pytania nie musisz odpowiadać oprócz „Name [changeme]” gdzie warto podać nazwę użytkownika.
Oczywiście potwierdź podpisanie certyfikatu.

Szyfrujemy nowego użytkownika poprzez przejście do folderu z kluczami:cd keysopenssl rsa -in Nexus.key -des3 -out Nexus.3des.keyI uruchamiamy skrypt, który utworzy nam plik ovpn:./MakeOVPN.shOczywiście plik ovpn przenosimy na urządzenie, które będzie podłączać się jako nowy użytkownik do serwera VPN.
Po zakończeniu dodawania użytkownika, polecam upewnić się, że tylko root ma dostęp do kluczy na naszym Raspberry

Wpis ten został oparty na podstawie:

http://readwrite.com/2014/04/10/raspberry-pi-vpn-tutorial-server-sec...

oraz

http://malinowepi.pl/post/43316048520/raspberry-pi-i-zmienne-ip-ddns

oraz

http://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-s...

oraz własnej wiedzy :)

Teraz pytanie do was - czy widzi wam się taka seria czy też jest tego po prostu za dużo?
Planuję coś napisać na temat serwera PXE (bootowanie po sieci) i Clonezilla, gdzie możemy trzymać kopie zapasowe naszego systemu (np. komputera z Windowsem) lub Raspberry Pi jako serwer torrentów.

Jeśli gdzieś wkradły się literówki, albo braki w polskich znaczkach, proszę o info. Niestety służbowe komputerki w pracy są tylko z językiem angielskim, a ja jakoś nie mogę się skłonić, aby co chwila przestawiać język w Wordzie, który na widok kodu i poleceń linuxowych, trochę gubi się w rozpoznawaniu języka :)

update: 28.12.2015
Wprowadziłem poprawkę w ustawianiu statycznego adresu IP. Zabrakło:
inet przy interfejsie na eth0, przepraszam za brak
Poprawiłem również niepoprawny screenshot przy potwierdzeniu wygenerowania klucza.

update: 19.12.2016
Poprawilem blad gdzie wspominalem zeby zmienic adres w linii czternastej na linie czwarta (poprawna) 

linux programowanie serwery

Komentarze

0 nowych
En_der   9 #1 23.12.2015 21:59

Jak dla mnie wpis ok. - Pisz następne i nie pytaj, bądź konkurencją dla innych piszących, bo to zdrowa forma rywalizacji - I nowa woda na młyn, napędzający to miejsce.
PS.
Jak znajdę trochę czasu to w praktyce wypróbuję, to co opisałeś :)

Ppetro   5 #2 24.12.2015 00:10

Bardzo fajny wpis - z chęcią poczytam więcej

Jak dobrze pójdzie to w okresie świątecznym wrzucę wpis podobny do Twojego o serwerze VPN za 40zł.
Na szczęście opisałeś już kwestię konfiguracji DDNS i klienta mobilnego więc nie będę tego dublować :P

  #3 24.12.2015 00:56

?Dzięki za przemiłą lekturę przed snem. :]
Taka seria jak najbardziej się widzi, zarówno w kontekście malinki, jak i Linuxa. PXE nigdy nie udało mi się wdrożyć we własnej sieci (jakieś krótkie zabawy z Windows Server), a byłoby bardzo wygodne i przydatne. Może jakiś opisik Samby, a dla zaawansowanych coś o własnym serwerze DHCP... ;]
Pisz dalej, trzymam kciuki i z zapałem będę czytać.

kwpolska   7 #4 24.12.2015 10:30

@Ppetro: Pewnie na jakimś tanim VPS-ie? To chyba nie najtańszym, bo DigitalOcean jest za $6.15/miesiąc (24 zł)

#r2d2#   12 #5 24.12.2015 10:47

Super wpis, wszystko łopatologicznie opisane. :-)
Masz mój głos w tym miesiącu. Mam nadzieję, że będziesz kontynuował serię.

Ppetro   5 #6 24.12.2015 14:04

@kwpolska: Nie, na starym routerze, który odmłodziłem wgrywając alternatywny soft -Tomato. Koszt jednorazowy - 40zł :)

awangardowy   7 #7 24.12.2015 15:50

10/10 , dla mnie to wpis miesiąca ;)

  #8 24.12.2015 16:42

@kwpolska można taniej jak masz własną domnę http://lowendbox.com/blog/vpscheap-net-unmetered-vps-starting-at-10year-in-chica... 10$ na rok. Na VPN w zupełności wystarcza.

Axles   17 #9 24.12.2015 16:45

Serio fajnie napisane, ale za długie mogłeś rozbić na kilka wpisów :) będę szczery nie dobrnąłem do końca, ale z pewnością gdy mi to się przyda wiem gdzie szukać informacji. Wesołych Świąt.

Kleryk_LDZ   8 #10 24.12.2015 19:12

Fajny wpis. Gdy się dorobię w końcu Maliny, na pewno wypróbuję :) W pierwszej kolejności miał być Banana NAS by Cyryllo, ale kto wie, może polecę hurtem :D

Ayaritsu   5 #11 24.12.2015 20:57

Super! Dziś właśnie dostałem RPi2 od swojej narzeczonej i na dniach miałem właśnie to robić:D Fajnie będzie nie szukać tego wszystkiego tylko mieć na miejscu już! Super! :D

edmun   13 #12 24.12.2015 21:51

Dziękuję za miłe komentarze. W pracy jak mi się nudzi, to naskrobię kolejne, tym razem krótsze :-) w jednym miejscu mam złego screenshota więc po świętach poprawię

Autor edytował komentarz.
  #13 24.12.2015 23:06

Świetny artykuł, miałem co prawda skonfigurowany VPN ale za nic nie mogłem poradzić sobie z firewallem - tj łączyłem się z domowymi zasobami ale już żeby korzystać z netu przez vpn to już 0 opcji, a tu jeden fragment rozwiązał wszystkie moje problemy, dzięki!

  #14 25.12.2015 10:46

@edmun: Napisałeś o ustawieniu statycznego ip wewnątrz sieci i problemem z alokowanymi dynamicznie, które mogą zająć miejsce tego przypisanego. Ustaw adres z wysoką końcówką.

themamuth   6 #15 26.12.2015 18:14

Nie to że bym się czepiał. Nie chcę by komentarz ten był tak odebrany. Rozumiem że konfiguracja była przeprowadzana na raspbianie. W takim przypadku należało by zaznaczyć że po instalacji pakietu openvpn katalog easy-rsa w wersji raspbiana 8 znajduje się gdzie indziej.

In Jessie and above easy-rsa is a separate package. So you'll have to install that in addition to openvpn.

On Wheezy:

# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* easy-rsa/
On Jessie and above:

# apt-get install easy-rsa
# cp -R /usr/share/easy-rsa/* easy-rsa/

https://wiki.debian.org/OpenVPN

  #16 26.12.2015 20:24

Nie napisałeś nic o TUN i TAP. Wystawienie ssh z hasłem na porcie 22 zła praktyka. OpenVPN do tych celów lepiej IMHO wystawić na porcie który na pewno nie będzie zablokowany w takim np hotelu np 443 poza tym ok

edmun   13 #17 26.12.2015 20:52

@themamuth: na wheezy jest tam gdzie podałem. Specjalnie przygotowałem nowa kartę aby zrobić od początku do końca wg tego co napisałem. Na Jessy może być inaczej, dlatego na początku zaznaczyłem że konfiguracja poniżej jest wg dystrybucji wheezy

themamuth   6 #18 27.12.2015 09:31

@edmun: Mój komentarz nie jest atakiem, ani krytyką. Zrobiłeś kawał dobrej roboty. Jednak instalacja openvpn na Debian 8 (też raspbian 8) sprowadza się jedynie do zmiany katalogu instalacji openvpn.

edmun   13 #19 27.12.2015 11:43

@themamuth: spokojnie, nie odebrałem tego jako krytykę czy atak :-)

Morson   3 #20 27.12.2015 14:47

Podeślesz skrypt po zalogowaniu na ssh?

  #21 27.12.2015 15:14

Świetny artykuł. Tego mi było trzeba żeby spać spokojniej :)

Shaki81 MODERATOR BLOGA  38 #23 27.12.2015 18:50

Wpis świetny jednakże, jeśli jednak z tego miałaby być seria to wszystkie sprawy poboczne VPN'a zrobiłbym jako jeden wpis a samą konfiguracje jako drugi wpis. Z doświadczenia wiem, że za długie wpisy to też nie dobrze, bo niewielu czyta je do końca.

A ja mam nadzieję, że seria potoczy się dalej i trzymam za Ciebie kciuki.

edmun   13 #24 27.12.2015 20:27

@themamuth: dziekuję bardzo, stąd właśnie brałem skrypt :)

edmun   13 #25 27.12.2015 20:28

@Shaki81: Dziękuję. Uwagi zapisane na przyszłość :)

  #26 27.12.2015 23:30

a nie prościej byłoby pptp zamiast openvpn?
na login i hasło?

themamuth   6 #27 28.12.2015 08:09

@pappap (niezalogowany): pptp jest mniej bezpieczne od openvpn z certyfikatem.

themamuth   6 #28 28.12.2015 08:12

@pappap (niezalogowany): Oraz żeby nie było że z czapy to biorę:
https://www.bestvpn.com/blog/4147/pptp-vs-l2tp-vs-openvpn-vs-sstp-vs-ikev2/

codeobiect   4 #29 28.12.2015 10:40

Dzięki Openvpn z certyfikatem mogę spać w miarę spokojnie? Chodzi mi o włamania i dostęp do danych, np. jak mam do RPI podłączony dysk z danymi? Jak to wygląda?

Co do wpisu, jest świetny. Dziś biorę się za konfigurację.

edmun   13 #30 28.12.2015 11:32

@Sedesowski (niezalogowany): hmm... masz pewnie rację :) Tak to jest jak człowiek myśli ciągle według schematów :)

  #31 28.12.2015 18:10

Znajomy narzekał na wydajność OpenVPN na Banana Pi, które jest dużo szybsze od Raspberry Pi (patrz benchmark na http://rozie.blox.pl/2014/07/OpenSSL-AES-benchmark.html ). Testowałeś może wydajność u siebie? Faktem jest, że on chyba miał rurkę 80 czy 100 Mbps w domu...

Przy okazji, polecam wpis o przyspieszaniu łącza http://rozie.blox.pl/2014/10/Przyspieszanie-lacza-internetowego.html - wydaje mi się, że tunelowanie po SSH będzie wystarczające do stron i prostsze w uruchomieniu (OK, nie sprawdzałem jak to wygląda od strony Androida). Oczywiście OpenVPN jest bardziej uniwersalny, bo zadziała dla wszystkich aplikacji.

2artur2   4 #32 28.12.2015 20:50

Drobna literówka:

jest:
nano /etc/firewall-openvpn-rules.ssh

powinno być:
nano /etc/firewall-openvpn-rules.sh

edmun   13 #33 28.12.2015 21:12

@2artur2: Dziękuję, poprawione.

  #34 29.12.2015 10:59
edmun   13 #35 29.12.2015 14:31

@rozie (niezalogowany): mam dwa urządzenia tylko podłączone i łącze w domu mam 26MB/s downloadu, upload 5MB/s więc na moje potrzeby można rzec, że wystarcza. Nigdy nie sprawdzałem nic więcej, gdyż tak jak w artykule, po prostu potrzebowałem serwer VPN żeby się nie szczypać na lotnisku że nie mogę niektórych stron odwiedzać.

2artur2   4 #36 29.12.2015 20:21

@edmun: Wykonałem to wszystko, mam chyba jakiś problem. Łączę się z Raspberry, ale potem nie mam internetu. Są tu jakieś PW ?

codeobiect   4 #37 29.12.2015 20:30

Nie wiem, czy źle coś skonfigurowalem,czy po prostu trzeba czekać aż się połączy, ale po zaimportowaniu pliku do programu i wpisaniu hasła program próbuje się cały czas łączyć i nic, żadnych błędów nie wywala tylko cały czas się łączy. Hasło podaje dobre, bo próbowałem wpisać inne to od razu wraca do ponownego wpisywania hasła. Masz jakieś pomysły?

2artur2   4 #38 29.12.2015 20:48

Może założyć temat na forum. Myślę, że może wystąpić tu wiele problemów. Ja na przykład musiałem dwa razy generować klucze, bo widocznie coś źle wpisałem za pierwszym razem.

Edit:
Internet już działa. Problemem był plik interfaces. Teraz wygląda on u mnie tak:
------------
auto lo

iface lo inet loopback
iface eth0 inet static
pre-up /etc/firewall-openvpn-rules.sh
address 192.168.1.X
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

------------
gdzie X - końcówka adresu PI
router ma adres z końcówką 1.1

Można podłączyć PI do monitora i sprawdzić podczas bootowania, czy nie wywala błędów.
Co do łączenia trwa poniżej 10 sekund z kompa.

Autor edytował komentarz.
codeobiect   4 #39 29.12.2015 22:21

@2artur2: Ja mogę mieć problem z serwerem DNS, bo jak w przykładzie było użycie winscp, to po wpisaniu swojej nazwy serwera się nie łączył i wywalał błąd.
Tak w ogóle to przy wklejaniu konfiguracji do pliku /etc/openvpn/server.conf
jest cos takiego jak serwer DNS, który mamy dodać, ale jak? Wystarczy wpisać samo 8.8.8.8 czy przed adresem coś jeszcze?

Autor edytował komentarz.
2artur2   4 #40 29.12.2015 22:46

@codeobiect: w pliku server.conf musi być dokładnie:

push "dhcp-option DNS A.B.C.D"
ja mam 8.8.8.8

Winscp nie ma związku z dhcp, i jest tylko do ściągnięcia pliku ovpn
Musisz użyć kompa z WIN w tej samej podsieci. Jak Winscp nie widzi RPI to może jest coś źle w ogóle z adresem IP Maliny ?

Edit:
Jak Malina i komp z WIN są w tej samej sieci, to w WINSCP w polu hostname możemy podać po prostu IP Maliny.

Autor edytował komentarz.
codeobiect   4 #41 30.12.2015 08:03

@2artur2: I tak zrobiłem, zamiast po serwerze dns wszedłem po IP maliny i żadnych problemów nie było.
Wróce do domu i wpisze ten dns, zobaczymy, może to jest problem.
A jak wpisze na tym etapie dns to kolejne kroki muszę robić ponownie?

edmun   13 #42 30.12.2015 09:28

@2artur2: są (chyba), możesz spokojnie pisać. jeśli łaczy się z raspberry ale nie masz internetu poprzez VPN, to obstawiałbym że forwarding/routing jest źle wpisany w konfiguracji OpenVPN na Raspberry

edmun   13 #43 30.12.2015 09:29

@2artur2: A przepraszam, dopiero zauważyłem kolejne komentarze. Czyli rozumiem że działa? Możesz mi tylko powiedzieć czy czegoś brakuje w instrukcji żeby było jaśniej dla innych ? :)

edmun   13 #44 30.12.2015 09:30

@codeobiect: Na upartego byłbym pewnie w stanie pomóc z tą konfiguracją :) Jeśli masz wciąż jakieś problemy, to pisz, zobaczymy co tam w trawie piszczy :)

codeobiect   4 #45 30.12.2015 11:33

@edmun: Wszystko robione wedle instrukcji, brak tylko tego DNS, bo nie wiedziałem jak to wpisać dokładnie. Jak wrócę do domu to dam znać, czy to pomogło, jak nie to będę pisał o ewentualnych problemach.

No niestety DNS nic nie dał.Cały czas kręci i kręci i nie może sie połączyć.

Autor edytował komentarz.
codeobiect   4 #46 30.12.2015 16:16

@edmun: Po wykonaniu polecenia source ./vars
mam brak dostępu:
"/etc/openvpn/easy-rsa/whichopensslcnf: Permission denied"

edmun   13 #47 30.12.2015 16:47

@codeobiect: Jesteś pewien, że polecenia które wykonywałeś powyżej robiłeś za pomocą konta root, czyli admina? najlepiej przejść na niego za pomocą sudo -s

Jeśli wszystko było tak zrobione, to byłoby dziwne, że nie masz dostępu do tego katalogu. Na moje oko coś pominąłeś, jak chcesz, możemy zacząć od nowa, podpowiem jak usunąć już zainstalowany openvpn. Na upartego możemy nawet umówić się na chat na żywo (choć bez kamerki, bo nie chcę mi się słuchawek w biurze szukać) i poprowadzę Cię za rękę :)

codeobiect   4 #48 30.12.2015 17:13

@edmun: chętnie, ale to już nie dziś. Jutro ok 15 by Ci pasowało?

edmun   13 #49 30.12.2015 18:14

Mam nadzieję że tak :) Zależy do której będę w biurze, bo kto wie czy szef nie powie, że mam pracować z domu albo nie skończymy wcześniej i akurat nie będę w trasie aby dojechać do domu. Wstępnie może być na Twoją 15-tą :) (moja 14:00)

codeobiect   4 #50 30.12.2015 20:55

@edmun: Ok, odezwę się w komentarzu. Jakiś programik do chatu mam przygotować?

2artur2   4 #51 30.12.2015 22:28

Poradnik jest bardzo szczegółowy, uczulam jednak na dokładne wpisywanie poleceń i dokładne kopiowanie, szczególnie pliku MakeOVPN.sh

@edmun: Jak połączysz się do Maliny, co dalej możesz zrobić ? Masz Internet po www z komputera klienta ?
Przy powyższej konfiguracji miałem jedynie dostęp do Maliny przez Putty. Do innych komputerów w mojej sieci lokalnej, ani Internetu już nie.
W źródle, które podałeś (readwrite.com) jest opisany nieco inny plik firewall-openvpn-rules.sh a mianowicie:

-----------
#!/bin/sh
#OPENVPN shaped hole
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.1.

#allow ping from outside to inside
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

#allow ping from inside to outside
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

#Allow loopback access
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#allow http, https, and ssh (multiport)
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

#allow transmission, webmin (multiport)
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 10000,9091 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 10000,9091 -m state --state ESTABLISHED -j ACCEPT

#allow port 1194 udp for openvpn...?
iptables -A INPUT -i eth0 -p udp --dport 1194 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --sport 1194 -m state --state ESTABLISHED -j ACCEPT
------------

Czyli są ustawione przekierowania portów różnych usług na Malinie. Dopiero jak utworzyłem taki plik i po reboot Maliny mogłem wejść do Internetu.
Mnie interesują dwie rzeczy: wejście przez UltraVNC do kompów w mojej sieci lokalnej (to już działa) oraz dostęp do zasobów sieciowych NAS, co jeszcze mi się nie udało zrobić.

edmun   13 #52 30.12.2015 23:14

@2artur2: ropisałem się na komórce i ze względu na błędy pamięci w baterii, telefon wyłączył mi się zanim zapisałem komentarz. Nowa bateria dojdzie mi na czasie. Ale po kolei. Plik który podałeś, to nie wiem skąd jest. Zwrócę uwagę na prosty przykład , w Twoim pliku konfiguracji firewalla są np. wpisy do Webmina (co jest fajnym interfejsem do sterownia malinką).

Oczywiście zaznaczyłeś że jest przekierowanie do różnych usług, ale nie wiem czemu ta konfiguracja powyżej miała by działać, a nie ta co ja podałem :)




Na wszelki wypadek wklejam swój plik poniżej:

#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.8


i to wszystko. w swoim Raspberry nie mam nic więcej w pliku firewall-openvpn-rules.sh i działa zarówno VPN jak i Webmin. Plik który wkleiłeś powyżej jest po prostu dostosowany do czyjegoś systemu :) Co do VNC. miałem.. nie jest to trudne, jednak bez ip2ban się nie obejdzie. Ilość prób podłączenia się do Ciebie po standardowym porcie VNC (5900-5910) będzie niewyobrażalnie wysoka. Po jakimś czasie odpuściłem VNC na rzec RDP czyli standardowego protokołu zdalnego pulpitu. Co dziwne, log wskazuje na o wiele rzadsze próby "zhackowania" mojego konta. Co do dostępu do plików, mam i FTP i Sambę, a Samba służy właśnie do systemów Windowsowych i dostępu przez otoczenie sieciowe (np. dysk sieciowy w Windowsie). Poradników jest sporo od tego, jednak żeby to wszystko zrozumieć, też trzeba trochę czasu poświęcić. Na pierwszy ogień idzie auto montowanie dysków do katalogów (mount /dev/sda1 /media/DyskUSB) w pliku etc/fstab po zainstalowaniu ntfs-3g, a potem doinstalowanie Samby i skonfigurowanie pliku samba.conf (o ile dobrze pamiętam). Przy dobrym poradniku, zajmuje to jakieś 10-15 minut, natomiast przy zerowej wiedzy, około 2 dni (tyle mi zajęło za pierwszym razem, bo człowiek nic nie pamiętał ze studiów, bo nigdy nie był linuxiarzem).

P.S. UltraVNC do różnych kompów w Twojej sieci możesz załatwić instalując choćby TightVNC serwer na wszystkich komputerach, ale na każdym ustaw inny port nasłuchiwania (np. raspberry będzie 5911, komputer1 = 5912 itd). Następnie na routerze ustawiasz odpowiednie zasady przekierowywania portów, przez co wywołując adres z VNC Viewera: mojserwer.no-ip.org:5912 podłaczysz się bezpośrednio pod Twój drugi komputer. Tak chyba najłatwiej.

Autor edytował komentarz.
edmun   13 #53 30.12.2015 23:19

@codeobiect: Hmm. Chyba najłatwiej to będzie Skype, What's App, Facebook Messenger lub TeamViewer (mam konto biznesowe). GG ze względu na zmiany w regulaminie usunąłem. Szkoda, bo się łezka w oku kręci, bo konto zakładałem za czasów, kiedy GG nawet reklam nie miało, a numer konta miałem 2215568 (czyli dopiero, jak o GG się zrobiło na tyle głośniej w necie, że ludzie wiedzieli o istnieniu takiego programu). Na upartego może mam gdzieś jeszcze płatne konto LogMeIn, ale myślę że Skype i TeamViewer spokojnie wystarczą :) Na razie ze względu na dość mocne ulewy w Anglii, to trochę nam zalało recepcję, bo gdzieś jest jakiś przeciek, więc podejrzewam że będziemy normalnie w biurze jutro, aby miski podkładać pod podsufitkę, aby dywanów nam nie zalewało :D :D Ok. Do usłyszenia jutro. A jak nie jutro, to zostanie nam w 2016 roku to dla Ciebie zrobić (nawet pierwszego stycznia). Nie musisz szykować żadnych haseł do raspberry czy no-ip.org bo nie będę tego potrzebował. To Ty będziesz wpisywał komendy w raspberry, a ja po prostu będę na "linii wsparcia" :D

edmun   13 #54 30.12.2015 23:22

@2artur2: oczywiście zapomniałem się po prostu zapytać, czy taka "konfiguracja NAS" by Cię interesowała, bo naskrobać co i jak będzie o wiele łatwiej niż z tym VPN'em :D

Morson   3 #55 31.12.2015 12:38

@themamuth: Tak, dzięki :)

edmun   13 #56 31.12.2015 14:31

@codeobiect: To jakby co, to ja jestem gotowy, albo facebook chat albo skype :)

update: 15:52 czasu polskiego:
przykro mi codeobiect, ale po godzinie czekania nic od Ciebie nie usłyszałem. Życzę udanej imprezy sylwestrowej :) Jakby co, to do usłyszenia w Nowym Roku :)

Autor edytował komentarz.
codeobiect   4 #57 01.01.2016 10:33

@edmun: Hej, przepraszam Cię, ale liczyłem na wcześniejszy powrót z pracy, jednak się pomyliłem i kończyłem przed 17 ;/
Postaram się odezwać jutro, albo w tygodniu.
Jeszcze raz sorki.

command-dos   18 #58 06.01.2016 22:33

tam chyba powinno być source . ./vars zamiast source ./vars

edmun   13 #59 07.01.2016 09:52

@command-dos: niestety nie. Będąc w easy-rsa (/etc/openvpn/easy-rsa) wpisujesz source ./vars (jedna kropka)

edmun   13 #60 08.01.2016 15:02

@codeobiect: Jakby co, to ja chyba dwa razy się próbowałem do Ciebie "dodzwonić" :) Daj znać kiedy, bo ja mam kolejne projekty do wykonania :)

2artur2   4 #61 08.01.2016 20:25

Problemy mogą wynikać z dostępu radiowego. Zwykle są wtedy poblokowane porty. Na kablówce wszystko ok.

darek719   39 #62 17.01.2016 15:57

Pierwszy wpis i taki złoty strzał do top5, gratulacje! :p

Autor edytował komentarz.
edmun   13 #63 17.01.2016 21:28

@darek719: Żebym to ja jeszcze wiedział gdzie są top listy na tym portalu :D :D Od jutra zaczyna mi się jakieś 3 dniowe szkolenie z zarządzania service deskiem więc podejrzewam, że będę miał czas naskrobać może kolejny artykuł albo chociaż jego brudnopis (draft ?) / szkic

darek719   39 #64 17.01.2016 21:31

@edmun: a bo oficjalnie jeszcze Redakcja nie napisała podsumowania... ale na głównej bloga po prawej zawsze jest baner "nagradzamy najlepszych blogerów"
http://www.dobreprogramy.pl/NagradzamyBlogerow

edmun   13 #65 18.01.2016 00:53

@darek719: albo jest za późno żeby teraz o tym myśleć albo po prostu poczekam na jakieś oficjalne wyniki. Tak czy siak, seria wpisów będzie długa i męcząca ;-) w pracy udało mi się skończyć serwer PXE z Clonezilla na pokładzie a w domu walczę żeby połączyć wszystko w jedną całość i zrobić uniwersalny system monitoringu. Na dp planuje wrzucić raspberry pi jako serwer NAS (niestety słabo wydajny ale jest) + kontynuacją będzie może serwer FTP + może deluge? Zobaczymy. Dobranoc :-)

edmun   13 #66 19.01.2016 09:43

@darek719: nie orientujesz się czy ja muszę się teraz do kogoś zgłosić? Martwię się że niektóre maile lecą do skrzynki ze spamem których nie przeglądam regularnie :-)

darek719   39 #67 19.01.2016 16:11

@edmun: będą wyniki to i zapewne będą mejle. ale narazie coś redakcja milczy :p

hosti   3 #68 19.01.2016 21:17

@edmun takie pytanie, a jeżeli chciałbym wykorzystać malinę jako klienta, który łączy się do serwera VPS-owego (na którym jest serwer OpenVPN) to da radę utworzyć wtedy tunel?

Laptop (klient VPN) ->Internet->VPS(serwer OpenVPN)-> Malina w domu (klient VPN)

edmun   13 #69 19.01.2016 22:17

@hosti: oj nie wiem. Nie podejmowałem się nigdy tunelowania. W teorii można. Nawet ktoś zrobił na szybko mały poradnik w necie. Więc pewnie można, ale jak? Tego nie wiem. Mogę się rozejrzeć i przetestować. Na biurku mam 3 maliny. Miałem pisać nowy artykuł podczas szkolenia a niestety jest na tyle intensywne że nie mam jak nawet laptopa otworzyć.

małaczarna   3 #70 22.01.2016 20:07

VPN to zawsze jakieś wyjście w obliczu zbliżającej się (7 luty 2016) nowelizacji ustawy o policji, a konkretnie udostępnianiu jej "danych internetowych", które wszyscy po sobie zostawiamy.

edmun   13 #71 10.02.2016 15:29

No to chyba nie pozostało mi nic innego jak bardzo wszystkim czytelnikom podziękować. Oficjalnie przyznaję się, że nie dość że stworzyłem jak na razie tylko jeden wpis który trafił na główną, to jeszcze wygrałem upominek w konkursie. Jak nic motywuje mnie to do dalszej pracy więc kopie robocze powoli się na portalu tworzą. Jak ukończę, przetestuję i wszystko sprawdzę, to wrzucę kolejne wpisy. Mogę tylko przeprosić za opóźnienia ale miałem sporo służbowych wyjazdów, ale pełno jednodniowych, przez co nie było nawet jak w hotelu się wyłożyć z laptopem i jakimś alkoholem aby pisać dalej. Pozdrawiam wszystkich bardzo serdecznie i do następnego wpisu!

  #72 21.02.2016 14:56

Mam mały problem. Zrobiłem wszystko według poradnika (i to dwa razy..:)) i w logach przy łączeniu VPN mam coś takiego:

Try to start OpenVPN connection Trurasp2 C:/Users/Adam_2/AppData/Roaming/Securepoint SSL VPN/config/Trurasp2
Sun Feb 21 14:52:35 2016 OpenVPN 2.3.7 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on Jul 9 2015
Sun Feb 21 14:52:35 2016 library versions: OpenSSL 1.0.1p 9 Jul 2015, LZO 2.08

Sun Feb 21 14:52:49 2016 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Sun Feb 21 14:52:49 2016 Control Channel Authentication: tls-auth using INLINE static key file
Sun Feb 21 14:52:49 2016 UDPv4 link local: [undef]
Sun Feb 21 14:52:49 2016 UDPv4 link remote: [AF_INET]87.206.105.255:1194
Sun Feb 21 14:52:49 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 14:52:51 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 14:52:55 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 14:53:03 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 14:53:19 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)

Jakiś pomysł? :)

trucha13657   1 #73 21.02.2016 15:47

Przy łączeniu VPN'em mam taki błąd:
Sun Feb 21 15:45:34 2016 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
ERROR: TLS error! See log for details
Sun Feb 21 15:45:34 2016 TLS Error: TLS handshake failed
Sun Feb 21 15:45:34 2016 SIGUSR1[soft,tls-error] received, process restarting
Sun Feb 21 15:45:36 2016 UDPv4 link local: [undef]
Sun Feb 21 15:45:36 2016 UDPv4 link remote: [AF_INET]87.206.105.255:1194
Sun Feb 21 15:45:36 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 15:45:39 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 15:45:43 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 15:45:51 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)
Sun Feb 21 15:46:07 2016 read UDPv4: Connection reset by peer (WSAECONNRESET) (code=10054)


Czy ktoś jest w stanie pomóc? :)

edmun   13 #74 22.02.2016 13:05

@Trucha13657 (niezalogowany): dzieje Ci się tak także z zewnątrz sieci czy po LAN'ie też ?

edmun   13 #75 22.02.2016 13:06

@trucha13657: odpiszę tutaj bo tam byłeś niezalogowany. Czy błąd masz tylko jak jesteś w tej samej sieci, czy jak jesteś też na zewnątrz czy w obydwóch przypadkach?

edmun   13 #76 22.02.2016 13:11

@trucha13657: ok mniej więcej znalazłem. Zazwyczaj taki błąd występuje jeśli port 1194 UDP jest wciąż zamknięty. Albo firewall albo niepoprawne przekierowanie na routerze. Żeby sprawdzić czy port masz otwarty (z zewnątrz) wejdź na https://pentest-tools.com/network-vulnerability-scanning/udp-port-scanner-online..., zaznacz UDP port scan, na zakładce range wpisz 1194 i wpisz swój zewnętrzny adres. Jeśli nie masz zablokowanej komunikacji na tym porcie to powinieneś zobaczyć wynik:
PORT STATE SERVICE
1194/udp open|filtered openvpn

trucha13657   1 #77 22.02.2016 19:04

Ok, to tak:
dzieje się tak po lanie, z zewnątrz nie sprawdzałem jeszcze.
ping na 87.206.105.255 idzie, poniżej zrzuty z konfiuracji routera (UPC). Może coś zrobiłem źle, nie znam się tak bardzo :)

Port na ip raspberry:
http://puu.sh/nhuk8/5eceedc88f.png

Odblokowanie portów:
http://puu.sh/nhukv/85271cd2bb.png

Wynik ze strony:
http://puu.sh/nhulz/bbec258bcc.png

Z góry serdeczne dzięki za pomoc :)

edmun   13 #78 23.02.2016 09:08

@trucha13657: wyłącz ten triggering. Daj znać czy pomogło. Dodałeś zasady do firewalla na Raspberry? Następnym krokiem byłoby sprawdzenie czy serwer odpowiada po lanie czyli też zeskanować port 1194 w protokole UDP ale nie z zewnątrz. Jeśli będzie odzywać się po LANie a z zewnątrz nie to ustawienia przekierowania portów. Jeśli natomiast nie odezwie się nawet po LANie to pewnie źle skonfigurowany firewall. Nic się nie martw. Tyle ile będę mógł pomóc to pomogę :-)

trucha13657   1 #79 23.02.2016 16:31

@edmun: Hmm, ale wynik tego portu 1194 ze strony jest opisany jako "closed", czyli port zamknięty?
Za godzinkę będę w domu - usunę wyzwalanie portów, dam znać i podeślę firewalla z raspberry :) W jakich godzinach można Cię załapać? Na gg jesteś, czy rzadko?


@EDIT

Ok, jestem już. Usunałem wyzwalanie, teraz wynik jest taki dla IP 87.206.105.255 i portu 1194

PORT STATE SERVICE
1194/udp open|filtered openvpn

jednakże błąd cały czas ten sam.

Firewall:
http://puu.sh/niEDw/96373b0f28.png

Ifconfig:
http://puu.sh/niEGG/9519ac48ad.png

Dodam, że u mnie w sekcji sudo nano /etc/network/interfaces nie było "dhcp". Poza tym rasp jest podpięty przez wifi:

http://puu.sh/niEKR/3fa0fdafc4.png

Autor edytował komentarz.
edmun   13 #80 23.02.2016 18:12

@trucha13657: gg używalem ale za czasów połączeń modemowych. Odkąd zmienili regulamin to usunąłem konto. złapać można mnie różnie. Zależy czy nie jestem w trasie przez 8 godzin żeby na drugim końcu UK zamontować dodatkową kość pamięci. 1194 jest opisane jako closed że nic tam nie ma. nie znaczy że nie ma przekierowania ale że pod tym portem nic się nie odzywa. Może nie odzywać się z kilku powodów ale sprawdźmy czy w ogóle coś jest chociaż po sieci LAN. Te triggery.. kurcze nigdy triggerów nie używałem a tym bardziej nie używałem przy zwykłym przekierowaniu portów na dany adres IP. Daj znać jakby co - ja zaglądam od czasu do czasu. Szybciej złapiesz mnie na facebooku na messengerze (/fotoslub) niz na gg. Skype'a mam - uzywam ale mysle ze facebookowy messenger wystarczy

Arthuro07   1 #81 21.03.2016 14:38

@edmun: chciałbym się ciebie o jedną rzecz zapytać, nie wiedziałem gdzie o tym napisać, bo tam gdzie o tym wspomniałeś temat był zakładany już jakiś czas temu (2 lata), i sądzę że tutaj łatwiej będzie mi się z tobą skontaktować, a mianowicie chodzi mi o to że tam odradzałeś zakup pendrive SSK 64GB USB3.0 z amazonu, a wiesz może jak wygląda sprawa z innymi pendrive'ami od SSK np. 256 gb lub innymi, czy też są lub mogą być wadliwe, a więc czy ta firma SSK jest godna zaufania, i akurat egzemplarze z serii 64gb pendrive'ów są "gorszej jakości " , czy nie warto jakichkolwiek produktów z tej marki kupować?

edmun   13 #82 21.03.2016 17:33

@Arthuro07: miałem dwa. obydwa padły kompletnie. najgorsze że padły tak że nie było co ratować. już 2 lata chyba mam obraz tego pendrive'a żeby dane odzyskać i wciąż się zastanawiam czy jest tam coś co potrzebuje (jeśli nie potrzebowałem przez 2 lata :D) ogólnie odradzam. Można przenosić nim dane ale bardziej jednak polecałbym metodę kopiuj, wklej usuń, a nie przenieś

Arthuro07   1 #83 22.03.2016 23:50

ok, dzięki za radę, skutecznie odradziłeś mi zakup tego typu pendrive'a ;)
może i są tańsze ale dla mnie ważniejsze jest bezpieczeństwo danych

  #84 31.03.2016 23:56

Fajny wpis dawaj jeszcze ;-)

  #85 04.04.2016 04:43

@Ppetro: "Jak dobrze pójdzie to w okresie świątecznym wrzucę wpis podobny do Twojego o serwerze VPN za 40zł. "

za ile? toć za 40 zł to masz KVM-ke z 2GB ramu w znanej francuskiej firmie+2 serwerki OpenVZ u polskiego hostingowca i jeszcze 5 zł reszty na browara...

beszcza   1 #86 04.04.2016 16:33

W momencie kiedy skrypt od noip chcę dodać do startu systemu wyskakuje mi taki błąd:
pi@raspberrypi:~ $ sudo update-rc.d noip defaults
insserv: Script noip is broken: incomplete LSB comment.
insserv: missing valid name for `Provides:' please add.

beszcza   1 #87 04.04.2016 17:20

Hey!
Podczas dodawania skryptu noip startującego z systemem mam błąd.
pi@raspberrypi:~ $ sudo update-rc.d noip defaults
insserv: Script noip is broken: incomplete LSB comment.
insserv: missing valid name for `Provides:' please add.
Czemu?? Wszystko było robione jak powyżej... Noip nie staruję z systemem muszę go ręcznie wystartować poleceniem sudo /usr/local/bin/noip2

edmun   13 #88 05.04.2016 16:16

@beszcza: Możesz skopiować i wkleić Twój plik /etc/init.d/noip

?
Obstawiam że coś się mogło źle skopiować.
Kopię tego pliku wrzuciłem na szybko na google drive:
https://drive.google.com/file/d/0BzZyI2vXSDHcZmVHdmNYcnQ2bzA/view?usp=sharing

beszcza   1 #89 07.04.2016 20:59

Postawiłem raspbiana na nowo i poszło :) jakby co będę pisał :)

beszcza   1 #90 08.04.2016 11:25

Po paru dniach walki, paru godzinach w dniu wczorajszym nie działa... Nie wiem co jest przyczyną... Ma kompie mam łączenie i tyle. Proszę o pomoc.

edmun   13 #91 09.04.2016 07:45

@beszcza: ok. Będę w stanie pomóc od poniedziałku do piątku. Masz wtedy jakiś czas? Jestem na urlopie ale na upartego włączę komputer w tym czasie żeby podpowiedzieć co i jak :-)

  #92 02.08.2016 20:41

Bardzo przyzwoity wpis, pewnie bez niego skonfigurowanie RPI jako serwera VPN zajęło by mi wieki, choć muszę przyznać, że proces konfiguracji nie był zupełnie pozbawiony pewnych uciążliwości.

Pierwszym problemem było nie wykonywanie się skryptu 'firewall-openvpn-rules.sh' przy starcie systemu bez uprzednich zmian w 'interfaces' na poniższe (o stałe IP maliny dba router, 'manual' przy 'eth0' był już po świeżej instalacji systemu na malinie):

auto eth0
iface eth0 inet manual
pre-up /etc/firewall-openvpn-rules.sh

Ponadto 'iptables' zmieniłem na przedstawione poniżej:

iptables -P FORWARD ACCEPT
iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

Dodatkowo zauważyłem że w niektórych miejscach w instrukcji zamiast małych liter są wielkie na początku, np: 'Iptables' czy 'Pre-up', możliwe że gdzieś jeszcze poukrywane są podobne niespodzianki.

Nie mniej dzięki wielkie, dzięki Twojemu wpisowi mam swój własny serwer VPN i nie straszne mi już lotniska czy inne przygodne sieci ;)

edmun   13 #93 09.08.2016 12:16

@Anonim (niezalogowany): dziekuje za uwagi. sprobuje niedlugo przejrzec wpis i popoprawiac niektore autokorekty ktore pozamienialy poczatkowe literki.
przy okazji ciesze sie ze jestes kolejna osoba ktora korzysta z raspberry jako VPN :) Sam za chwile lece do Polski i pewnie VPN jak nic mi sie przyda :D
P.S. najlepsze ze bylem 2 tygodnie na urlopie w Polsce. Przeszedlem kawalek Orlej Perci, przejechalem Polske, Niemcy, Holandie, Belgie, Francje i UK aby wrocic do domu (dojechalem wczoraj o pierwszej nad ranem) aby dzisiaj spakowac sie w walizke i leciec do Gdanska na 3 dni (sluzbowo)

Autor edytował komentarz w dniu: 09.08.2016 12:18
  #94 11.11.2016 14:53

Witam
przede wszystkim chce powiedzieć że kawał dobrej roboty :)
ale ja utknąłem na
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa
sprawdziłem że nie ma katalogu "easy-rsa" prawdopodobnie nowsza wersja czy coś takiego można prosić o opomoc
Jako nowy użytkownik PI z Raspbian-em na pokładzie

  #95 14.11.2016 01:58

Iptables -t -nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.8

Powinno być
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.8

edmun   13 #96 20.12.2016 11:25

@codeobiect - stawialem od nowa vpn dzisiaj na swoim raspberry. znalazlem blad ktory Tobie wyskakiwal. Chodzilo o zle wprowadzone znaki "cudzyslowiu".

"Po wykonaniu polecenia source ./vars
mam brak dostępu:
"/etc/openvpn/easy-rsa/whichopensslcnf: Permission denied""

Poniewaz sam teraz (po raz kolejny) przechodze przez ta instrukcja to poprawiam takie rzeczy jesli formatowanie tekstu popsulo gdziekolwiek komendy

(w Twoim przypadku byla tam kursywa ktora zmienila """""" na pochylone)

Autor edytował komentarz w dniu: 20.12.2016 11:25
edmun   13 #97 20.12.2016 11:27

@Seba-Rufi (niezalogowany): jedyne co podejrzewam to ze nie jestes na wheezy a na jessy. W jessy kojarze ze folder ktory chcesz skopiowac albo go nie ma, albo jest w innej lokalizacji. Ktos wyzej podrzucil ze na raspbianie 8 jest wlasnie inaczej i nie trzeba tego folderu kopiowac. Na szybkiego znalazlem linka ktory cos tam rzuca podpowiedz: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server...

edmun   13 #98 20.12.2016 11:33

@quark76 (niezalogowany): dziekuje - poprawione

edmun   13 #99 20.12.2016 11:54

@Seba-Rufi (niezalogowany): Tak na spokojnie jak przeczytalem co tam bylo w linku i ze nie masz easy-rsa to wg tego co pisza, wystarczy ze przy instalacji openvpn, doinstalujesz easy-rsa:
sudo apt-get install openvpn easy-rsa

  #100 18.01.2017 22:49

witam, super opis mam tylko jeden mały problem. Nie odpala mi się interfejs TAP i nie moge nadpisac iptables:

root@raspberrypi:/home/pi# iptables -P FORWARD ACCEPT
modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.21-v7+/modules.dep.bin'
iptables v1.4.21: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
root@raspberrypi:/home/pi# iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE
modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.21-v7+/modules.dep.bin'
iptables v1.4.21: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
root@raspberrypi:/home/pi# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.249
modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.21-v7+/modules.dep.bin'
iptables v1.4.21: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
pomoc mile widziana

rafal_wa   1 #101 19.01.2017 12:19

@edmun Widzę że stawiałeś id nowa ruter w grudniu, więc może miałeś taki sam problem jak ja. Wersja systemu z 09.12.2016. Instalacja idzie wg opisu ok.
Nie moge utworzyć Tap i przekierować ruchu. Mam komunikat:

root@raspberrypi:/home/pi# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.9
modprobe: ERROR: ../libkmod/libkmod.c:557 kmod_search_moddep() could not open moddep file '/lib/modules/4.4.21-v7+/modules.dep.bin'
iptables v1.4.21: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

edmun   13 #102 21.01.2017 22:29

@gabi1wassabi (niezalogowany): tego jeszcze nie widziałem a jak wspomniałem, stawiałem serwer VPN od nowa jakiś miesiąc temu i robiłem to na podstawie swojej własnej instrukcji. Wszystkie literówki, małe błędy itp poprawiłem. Postaram się w poniedziałek zajrzeć w czym problem bo w weekend nie "czuwam" w świecie IT

edmun   13 #103 23.01.2017 15:24

@gabi1wassabi (niezalogowany) & @rafal_wa
Czasami wasze Raspberry Pi nie jest oparte na Jessie with Pixel?
https://www.raspberrypi.org/downloads/raspbian/
Probowaliscie Jessie Lite?

rafal_wa   1 #104 24.01.2017 00:15

@edmun miałeś racje próbowałem na Jessie Lite.
zassałem wheezy
i niestety coś dalej nie tak z tap

root@raspberrypi:/home/pi# ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:25:4b:8f
inet addr:192.168.0.9 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1717 errors:0 dropped:108 overruns:0 frame:0
TX packets:470 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:120432 (117.6 KiB) TX bytes:85205 (83.2 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1104 (1.0 KiB) TX bytes:1104 (1.0 KiB)
/// masz może link gdzie można pobrac działającą wersję wheezy ???
albo lepiej jakąś pomoc

  #105 24.01.2017 00:25

Try to start OpenVPN connection RapidMaster C:/Users/kolo1/AppData/Roaming/Securepoint SSL VPN/config/RapidMaster
Tue Jan 24 00:23:01 2017 OpenVPN 2.3.11 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on May 10 2016
Tue Jan 24 00:23:01 2017 Windows version 6.2 (Windows 8 or greater) 64bit
Tue Jan 24 00:23:01 2017 library versions: OpenSSL 1.0.1t 3 May 2016, LZO 2.09

Tue Jan 24 00:23:06 2017 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Tue Jan 24 00:23:06 2017 Control Channel Authentication: tls-auth using INLINE static key file
Tue Jan 24 00:23:06 2017 UDPv4 link local: [undef]
Tue Jan 24 00:23:06 2017 UDPv4 link remote: [AF_INET]31.179.55.197:1194
Tue Jan 24 00:24:06 2017 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
ERROR: TLS error! See log for details
Tue Jan 24 00:24:06 2017 TLS Error: TLS handshake failed
Tue Jan 24 00:24:06 2017 SIGUSR1[soft,tls-error] received, process restarting
Tue Jan 24 00:24:08 2017 UDPv4 link local: [undef]
Tue Jan 24 00:24:08 2017 UDPv4 link remote: [AF_INET]31.179.55.197:1194



Czy powstało jakieś rozwiązanie ?
z góry dzięki

edmun   13 #106 24.01.2017 10:57

@rafal_wa: z tego co patrzę po jakiś swoich archiwach to ja zaczynałem od:
http://downloads.raspberrypi.org/raspbian/images/raspbian-2015-05-07/
Dziwię się tylko bo na Jessie też mi się udało postawić serwer, natomiast wiem że na wersji Pixel i wersji Lite są jakieś problemy...

Jeśli potrzebowałbyś jakiejś zdalnej pomocy żeby ten serwer postawić, to daj znać. Z chęcią kiedyś wieczorkiem przy piwku mogę się zdalnie połączyć i pomóc Ci ustawić ten serwer. Musiałbym tylko mieć jakieś połączenie typu join.me, teamviewer żeby wiedzieć co wpisujesz w terminalu przez ssh do swojej malinki. Żadne hasła mnie nie interesują, więc gdybyś miał postawione Raspberry to zawsze można się kiedyś umówić na jakąś sesję. Kiedyś komuś już tak pomagałem :) Nie pamiętam tylko komu :)

Autor edytował komentarz w dniu: 24.01.2017 11:01
edmun   13 #107 24.01.2017 10:59

@Rapid1994 (niezalogowany): "Tue Jan 24 00:24:06 2017 TLS Error: TLS handshake failed "

https://openvpn.net/index.php/open-source/faq/79-client/253-tls-error-tls-key-ne...

Obstawiam że masz zablokowane porty na routerze.

  #108 25.01.2017 09:01

@edmun: właśnie i tu pojawia się problem bo porty na routerze przekierowanie i odblokowane i nie mam pojęcia gdzie leży problem?

edmun   13 #109 25.01.2017 21:33

@Anonim (niezalogowany): hmm.. To teraz może być bardzo ciekawie :-) Masz czas któregoś wieczoru na jakąś zdalna sesje?

rafal_wa   1 #110 27.01.2017 14:16

@edmun, dzięki wielkie za """mentalnego kopa""
zrobiłem ;-) działa
moim problemem było korzystanie ze zbyt wielu pomocy www. na twoim tutku poszło.
Mam tylko pytanie jakie powinno być tunelowanie tun czy tap.
Wg opisu jest
client
dev tun
proto udp
remote .....
Mam dziwne wrażenie że ""całe moje www idzie przez wysył na łączu serwera" i przez to zamula www

edmun   13 #111 27.01.2017 14:24

@rafal_wa: jeśli chciałbyś użyć tap, konfiguracja byłaby inna. Przez TUN masz tak, że wszystkie urządzenia które są podłączone do serwera, są routowane przez serwer. Natomiast w przypadku TAP, będziesz w tej samej podsieci jako kolejne urządzenie. Inna warstwa OSI. Nie wiem.. teoretycznie TAP będzie szybszy ale nigdy nie bawiłem się w przeróbki tych skryptów znalezionych na necie.
Cieszę się natomiast że serwerek działa. Jak wspomniałem - ostatnio stawiałem na nowo i zamiast korzystać z wiedzy i notatek, to otworzyłem sobie ten własnie poradnik i po kolei zrobiłem wszystko tak jak napisane. Dzięki temu wychwyciłem literówki lub inne mało znaczące błędy :)

  #112 26.02.2017 00:27

@edmun: Witam. A na jakiej dystrybucji stawiałeś ostatnio VPN? U mnie wciąż brakuje połączenia - SecurePoint na zielono, 1194 ze świata widać jako otwarty a netu nie ma ;-(. Komunikat z loga SecurePoint

"Sat Feb 25 23:08:36 2017 Warning: address 192.168.1.30 is not a network address in relation to netmask 255.255.255.0
Sat Feb 25 23:08:36 2017 ROUTE: route addition failed using CreateIpForwardEntry: Parametr jest niepoprawny. [status=87 if_index=6]"

edmun   13 #113 27.02.2017 11:41

@Slav_S (niezalogowany): A to coś nowego :) Stawiałem i na wheezy i na jessie. Na pixel jeszcze się nie bawiłem.
Jeydna różnica pomiędzy wheezy a jessie jest taka, że pliki easy-rsa znajdują się w innej lokalizacji i trzeba je doinstalować i skopiować z innej lokalizacji. Tak to bez zmian.

Co do Twojego błędu. Zazwyczaj problemem będzie obecna konfiguracja IP w Twojej sieci. Nie znaczy to że masz zmieniać całą sieć, ale domyślnie openvpn będzie korzystał z takich adresów, które mogą powodować konflikt. Staram się znaleźć jakieś łatwe rozwiązanie.


"In effect, it's acurately complaining about the netmask being incorrect."

Powiedz mi tak. Jesteś w stanie podrzucić tutaj kopię jak wygląda ten plik?
/etc/openvpn/server.conf
?

  #114 27.02.2017 19:13

@edmun: Dzięki że pochyliłeś się nad moim problemem. Oto zawartośc pliku server.conf

local 192.168.1.30 # Wpisz adres IP Twojego Raspberry Pi
dev tun
proto udp #Niektórzy musza uzywac TCP, zmien jesli wiesz co robisz.
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/Serwer.crt # zmien na nazwe klucza twojego serwe ra
key /etc/openvpn/easy-rsa/keys/Serwer.key # zmien na nazwe klucza twojego serwer a
dh /etc/openvpn/easy-rsa/keys/dh2048.pem # jesli wybrales szyfrowanie 2048 bitow e, zmien tutaj!
server 10.8.0.0 255.255.255.0
ifconfig 10.8.0.1 10.8.0.2
push "route 10.8.0.1 255.255.255.255"
push "route 10.8.0.0 255.255.255.0"
# Ponizej dane Twojej sieci
push "route 192.168.1.30 255.255.255.0" # zmien z numerem IP i maski Twojego Ras pberry
# Dodaj adres DNS
# jesli Twoj router nie robi za serwer DNS, mozesz, uzyc DNS Google 8.8.8.8
push "dhcp-option DNS 8.8.8.8" # Zazwyczaj bedzie to adres Twojego routera
push "redirect-gateway def1"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 1

Slav_S   1 #115 27.02.2017 19:19

@edmun: Admina poproszę o skasowanie poprzedniej wiadomości.
Jeszcze raz dziękuję, że zajmujesz się moją sprawą.
Plik server.conf:

local 192.168.1.30 # Wpisz adres IP Twojego Raspberry Pi
dev tun
proto udp #Niektórzy musza uzywac TCP, zmien jesli wiesz co robisz.
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/Serwer.crt # zmien na nazwe klucza twojego serwe ra
key /etc/openvpn/easy-rsa/keys/Serwer.key # zmien na nazwe klucza twojego serwer a
dh /etc/openvpn/easy-rsa/keys/dh2048.pem # jesli wybrales szyfrowanie 2048 bitow e, zmien tutaj!
server 10.8.0.0 255.255.255.0
ifconfig 10.8.0.1 10.8.0.2
push "route 10.8.0.1 255.255.255.255"
push "route 10.8.0.0 255.255.255.0"
# Ponizej dane Twojej sieci
push "route 192.168.1.30 255.255.255.0" # zmien z numerem IP i maski Twojego Ras pberry
# Dodaj adres DNS
# jesli Twoj router nie robi za serwer DNS, mozesz, uzyc DNS Google 8.8.8.8
push "dhcp-option DNS 8.8.8.8" # Zazwyczaj bedzie to adres Twojego routera
push "redirect-gateway def1"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 1

edmun   13 #116 28.02.2017 12:11

@Slav_S: Postaram się zajrzeć do tego. Jak nie dzisiaj, to jutro. Nie wiem czy nie wygodniej będzie jak odezwiesz się do mnie przez np. facebooka, what's appa czy skype'a :)

Slav_S   1 #117 02.03.2017 19:47

Bardzo serdecznie dziękuję za pomoc uwieńczoną sukcesem ;-)
Już myślałem że to Orange z Neostradą są winne (Funbox 2.0), ale to dopisanie tajemnych (jak dla mnie) reguł do firewalla poskutkowało.
Jeszcze raz dziękuję!

edmun   13 #118 06.03.2017 12:17

@Slav_S: Nie ma problemu. Sam niestety nie wiem skąd u Ciebie pojawiły się takie problemy, że należało dopisywać inne reguły firewalla. Jako że jesteś na razie jedyny który takie problemy zgłosił, to uznam to za wyjątek i nie będę nic dopisywał tutaj do poradnika, ale jakby ktoś miał identyczny problem, to najwyżej dopiszę tutaj jak to rozwiązać :)
Cieszę się że mogłem pomóc :)

menuchin   1 #119 23.03.2017 13:52

Dzięki za artykuł. Udało się przy jego wydatnej pomocy odpalić VPN-a na Jessie Lite, choć nie bez niespodzianek. Jednak parę drobnych rzeczy jest innych. Autor wspomniał o katalogu easy-rsa, więc to pominę, ale to nie jedyne "kwiatki". Może komuś przydadzą się te uwagi.

Przede wszystkim kwestia reguł firewalla, czyli iptables. Chodzi o plik /etc/firewall-openvpn-rules.sh Jego zawartość podana przez autora nie chciała mi działać. A dokładniej po podłączeniu do serwera VPN nie było internetu. Zamieniłem wpis w 2 linii na taki:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
i ruszyło.

Natomiast był problem z jego uruchamianiem poprzez wpis do pliku /etc/network/interfaces. W efekcie zamiast tego wrzuciłem wywołanie pliku firewalla do pliku rc.local:

if [ "$_IP" ]; then
printf "My IP address is %s" "$_IP"
/etc/firewall-openvpn-rules.sh
fi

Po tym zabiegu zaczęło działać. Natomiast był jeszcze problem z włączeniem się VPN-a po restarcie RPi. Błąd taki jak w tym wątku na forum Raspberry https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=178161&p=1135861
Niestety nie znalazłem póki co rozwiązania i jedynie tymczasowo sugerując się tym co napisał jeden z rozmówców zakomentowałem pierwszą linię w pliku server.conf, czyli:
##local 192.168.0.8 # Wpisz adres IP Twojego Raspberry Pi

Dzięki temu openvpn startuje nie na tym adresie, ale na ogólnym 0.0.0.0. Mam nadzieję, że da się ten problem rozwiązać docelowo. Natomiast, gdy że tak powiem z palca odpalałem /etc/init.d/openvpn to było w porządku. Ruszało na podanym adresie lokalnym, więc nie wiem w czym problem (od razu wyjaśniam, że bawię się na RPi B+, więc mam tylko jedną, wbudowaną kartę sieciową, jakby ktoś chciał polemizować, że to zły pomysł z tym 0.0.0.0 - na ten moment nie jest to więc problem).

Inna rzecz, ale nie wiem czy ważna to sugerując się innymi wpisami na temat RPi (np. https://botland.com.pl/content/71-jak-ustawic-statyczne-ip-w-raspberry-pi) nie konfigurowałem stałego adresu IP poprzez plik /etc/network/interfaces, lecz edytując plik /etc/dhcpcd.conf. Ale to może autor wpisu będzie lepiej wiedział ode mnie, bo ja tak po prawdzie dopiero zaczynam z RPi, jak i dystrybucjami opartymi na Debianie. Raczej preferuję Centos-a i jemu podobne, bo po prostu go dłużej używam. ;)

Pozdrawiam!

Autor edytował komentarz w dniu: 23.03.2017 14:48
edmun   13 #120 23.03.2017 14:54

@menuchin: Przerabiałem większość tych rzeczy co podałeś w komentarzu. Jak znajdę to podrzucę jak załatwić sprawę iptables bo kolega Slav_S miał podobny problem i właśnie u niego to rozwiązałem.

  #121 08.05.2017 18:30

Witaj. Przyznaje kawał dobrej roboty. Nie dużo trzeba kombinowac aby odpalić na Jessie. Jestem w punkcie gdzie reguły iptables uruchmiają się automatycznie przy starcie systemu. Uruchamiam na Jessie, ale mom celem jest postawienie sieci "lokalnej" z porozrzucanymi po polsce klientami. Wie ktoś może jak to zrobić? Przynajmniej jakieś wskazówki w którą stronę robić rozeznanie?

edmun   13 #122 10.05.2017 13:11

@Anonim (niezalogowany): Jak już postawisz serwer, to kwestia żeby klienci podłączali się automatycznie, więc na klientach ustawiasz odpowiednio OpenVPN. Tak mi się wydaje. Można na upartego jeszcze spróbować dodać reguły z ustawionymi adresami IP na sztywno. Weź tylko pod uwagę, że Raspberry nie jest "szybkie" więc np. przesyłanie danych przez wiele komputerów żeby były w jednej sieci LAN przez VPN, może być mocno kłopotliwe. Sam czasami przesyłam dane i odczuwam, że 2-3 komputery na raz w tej jednej sieci, to już sporo dla Raspberry. A co dopiero większa ilość.

Nie bawiłem się nigdy żeby taką sieć robić.

  #123 11.05.2017 17:35

Witam.
Co w przypadku jeśli moje pi dostaje internet po pppoe , tworzy się interfejs ppp0 a na nim publiczny adres IP ? Na eth0 mam pustki, wlan0 robi jako AP.
Kombinowałem lecz nic nie wykombinowałem więc piszę do Was.

Pozdrawiam

  #124 12.05.2017 17:20

poradziłem sobie, nie aktualne.
Dzięki za tutorial - kawał dobrej roboty.