Często i gęsto zdarza się, że sieci na uczelniach, w hotelach bądź restauracjach mają nałożone poważne restrykcje.
Możliwe, że kiedyś ktoś narozrabiał, i w wyniku tego konieczne było ograniczenie możliwości.
Jednak co w sytuacji, w której szerszy dostęp do internetu potrzebny jest w dobrych celach?
Sytuacja życiowa inspirująca napisanie tego artykułu: sieć na uczelni, która dopuszcza ruch z siecią Internet tylko i wyłącznie na portach 80 oraz 443 TCP.
nie biorę żadnej odpowiedzialności za ewentualne konsekwencje powstałe w wyniku z zastosowania opisanych dalej metod
Mi z pomocą przyszedł VPN.
W celu wykorzystania go do ominięcia ograniczeń sieci, potrzebny jest jakiś serwer na zewnątrz, najlepiej ze stałym IP.
Serwery takie bywają zaskakująco tanie, a demon prędkości wcale nie jest tutaj wymagany.
Osobiście korzystam z vpsa o 128MB ramu, którego opisałem wcześniej. Zobaczmy jak to wyjdzie w praniu!
Krok zero, zanim rozpoczniemy robić cokolwiek - trzeba upewnić się, że na naszym VPSie mamy włączony TUN/TAP, który będzie niezbędny.
Stosowna opcja dostępna w panelach administracyjnych.
Pierwszy krok, to instalacja serwera OpenVPN.
W zależności od dystrybucji można użyć różnych menadżerów pakietów, albo kompilować ze źródeł, jednak podjąłwszy się takiego tematu, wierzę że poradzisz sobie z instalacją serwera!
Dalsze etapy to normalne generowanie kluczy serwera:
# source vars # ./clean-all # ./build-ca # ./build-key-server $nazwa-serwera # ./build-dh # cd /etc/openvpn/easy-rsa/keys/ # cp $nazwa-serwera.key $nazwa-serwera.crt ca.crt dh2048.pem /etc/openvpn
teraz przychodzi pora na odpowiednią konfigurację serwera OpenVPN
port 443 proto tcp dev tun ca ca.crt cert smwh.crt key smwh.key dh dh2048.pem server 10.8.0.0 255.255.255.0 keepalive 10 120 #pchamy ruch przez tunel push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 129.250.35.250" push "dhcp-option DNS 74.82.42.42" comp-lzo user nobody group nogroup persist-key persist-tun # wymuszamy autoryzacje po haśle przez moduł PAM. client-cert-not-required plugin /usr/lib/openvpn/openvpn-auth-pam.so login status openvpn-status.log verb 4
Sam plik konfiguracyjny to nie wszystko. Na serwerze musimy jeszcze włączyć “przekazywanie internetu”(nie mam pojęcia jak mogę to powiedzieć po polsku! czekam na sugestie w komentarzach) wykonując jako root:
# sysctl -w net/ipv4/ip_forward=1
czy działa?
# cat /proc/sys/net/ipv4/ip_forward 1
zwrócono 1, czyli śmiga!
Ważna rzecz - musimy jeszcze utworzyć maskaradę na odpowiednim interfejsie.
naczej całość by działała tak jak turyści którzy mają mapę, ale nie ma na niej zaznaczonych dróg/ściezek.
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE
Na tym etapie serwer mamy gotowy 🙂
Konfiguracja klienta
No, jak serwer mamy gotowy, to jaki problem z klientem?
Jakikolwiek dowolny komputer z zainstalowanym klientem VPN może się połączyć.
Musimy na niego tylko dostarczyć certyfikat CA (czyli plik ca.crt który generowaliśmy wcześniej)
a następnie nawiązać połączenie:
openvpn --remote adres.serwera port protokół(tcp)--comp-lzo --dev tun --auth-user-pass --client --ca ca.crt
port podajemy, oddzielając go od adresu serwera spacją, a do logowania używamy danych dowolnego systemowego użytkownika na serwerze (błagam, tylko nie roota!)
Android
No tu nie jest tak kolorowo, łatwo szybko i przyjemnie.
Jeżeli korzystamy z oficjalnej aplikacji OpenVPN musimy koniecznie utworzyć plik z profilem,
w dodatku aplikacja wymaga rozszerzenia .ovpn
Trudno, tworzymy. Trudne to nie będzie, patrzcie:
zawartośc pliku z profilem:
client dev tun proto tcp remote $adres.serwera $port resolv-retry infinite nobind persist-key persist-tun ca ca.crt tls-client remote-cert-tls server auth-user-pass comp-lzo verb 1 reneg-sec 0
Razem z tym plikiem(w tym samym folderze) umieszczamy wygenerowany wcześniej ca.crt.
Gotowy profil .ovpn możemy śmiało dodać do aplikacji OpenVPN i cieszyć się z profitu.
GOTOWE!
po nawiązaniu połączenia nie straszny już nam administrator lokalnej sieci, i do woli(no, na tyle na ile zewnętrzny serwer nam pozwoli) możemy korzystać z zasobow sieci Internet.