Instalacja i konfiguracja sieci VPN na OpenWrt
Ostatnia zmiana: 2017-12-09 10:10
OpenVPN jest projektem umożliwiającym utworzenie VPN - czyli sieci prywatnej, do której mamy dostęp przez kodowany tunel ip. OpenVPN umożliwia utworzenie wielu różnych konfiguracji: łączenie sieci, osobne kanały rutowalne dla klientów itd. W tym HOWTO opisana jest konfiguracja tzw. road-warrior - czyli stacja kliencka (np. laptop z Windowem) podłącza się z internetu do sieci lokalnej i ma możliwość korzystania z jej zasobów. Możliwości zabezpieczenia połączenia jest wiele (login/hasło, certyfikaty, różne rodzaje kodowania itd). W tym rozwiązaniu wykorzystano jeden plik z tajnym kluczem.
Ten poradnik nie wyczerpuje możliwości konfiguracyjnych OpenVPN. Są one wielokrotnie większe, po prostu dla tego problemu przyjęto takie a nie inne rozwiązanie.
Jak wygląda w praktyce korzystanie z VPN? Będąc podłączonym do internetu uruchamiamy klienta vpn. Tworzy się wirtualne połączenie z naszą siecią, dostajemy adres z puli naszego rutera i można korzystać z zasobów sieci lokalnej - czy to serwera plików, czy klienta torrentów na serwerze, jak również mamy dostęp do udostępnionych zasobów dyskowych w Windows. Zaleta stosowania vpn - tylko jeden otwarty port na firewallu, dostęp do dowolnych zasobów w sieci lokalnej. Wada - potrzeba instalacji klienta VPN na danym komputerze.
Rozwiązanie przetestowano na OpenWrt Kamikaze 8.09.x w roli serwera oraz Windows XP Home / Linux Debian jako klient. Router musi posiadać adres publiczny.
Ten poradnik opisuje konfigurację OpenVPN w trybie TAP. W większość przypadków lepiej sprawdzi się
konfiguracja w trybie TUN.
Instalacja oprogramowania
Ruter musi mieć ustawioną aktualną godzinę, inaczej będzie problem z zestawieniem połączenia. Należy więc ustawić odpowiednią strefę czasową oraz zainstalować klienta czasu
# uci set system.@system[0].timezone=CET-1CEST,M3.5.0,M10.5.0/3
# uci commit system
# opkg update
# opkg install ntpclient
# reboot
Następnym krokiem jest instalacja samego pakietu OpenVPN
(w nowych wydaniach pakiet nazywa się openvpn-openssl)
Konfiguracja
Firewall
Należy zezwolić na komunikacje po porcie 1194/udp
# uci add firewall rule
# uci set firewall.@rule[-1]._name=openvpn
# uci set firewall.@rule[-1].src=wan
# uci set firewall.@rule[-1].target=ACCEPT
# uci set firewall.@rule[-1].proto=udp
# uci set firewall.@rule[-1].dest_port=1194
# uci commit firewall
# echo "iptables -I OUTPUT -o tap+ -j ACCEPT" >> /etc/firewall.user
# echo "iptables -I INPUT -i tap+ -j ACCEPT" >> /etc/firewall.user
# echo "iptables -I FORWARD -o tap+ -j ACCEPT" >> /etc/firewall.user
# echo "iptables -I FORWARD -i tap+ -j ACCEPT" >> /etc/firewall.user
OpenVPN
Włączenie odpowiedniej sekcji konfiguracji
# mkdir -p /etc/openvpn/
# uci set openvpn.myvpn=openvpn
# uci set openvpn.myvpn.config=/etc/openvpn/my-vpn.conf
# uci set openvpn.myvpn.enable=1
# uci commit openvpn
# /etc/init.d/openvpn enable
# /etc/init.d/openvpn start
Następnie należy utworzyć odpowiednią konfigurację serwera vpn w pliku
/etc/openvpn/my-vpn.conf. Np. taką:
port 1194
proto udp
dev tap0
keepalive 10 120
status /tmp/openvpn-status.log
verb 3
secret /etc/openvpn/secret.key
Ponieważ w założeniach było, że klient ma otrzymywać adres z puli sieci lokalnej, należy jeszcze utworzyć odpowiednie połączenie (bridge) pomiędzy OpenVPN a interfejsem lan. W tym celu tworzymy dodatkowy plik zawierający polecenia łączenia tych interfejsów przy starcie systemu (np o nazwie
/etc/init.d/openvpn-startup)
#!/bin/sh /etc/rc.common
START=94
start() {
openvpn --mktun --dev tap0
brctl addif br-lan tap0
ifconfig tap0 0.0.0.0 promisc up
}
stop() {
ifconfig tap0 0.0.0.0 down
brctl delif br-lan tap0
openvpn --rmtun --dev tap0
}
Zostaje jeszcze włączenie tego pliku do procedur startowych systemu
# chmod 755 /etc/init.d/openvpn-startup
# /etc/init.d/openvpn-startup enable
# /etc/init.d/openvpn-startup start
Generacja klucza współdzielonego
WindowsPo instalacji OpenVPN (patrz następny dział) trzeba się posłużyć programem kryjącym się pod nazwą
Generate a static OpenVPN key w menu OpenVPN.
Wygeneruje on plik key.txt który trzeba skopiować na ruter do katalogu
/etc/openvpn pod nazwą
secret.key.
Linux
$ openvpn --genkey --secret secret.key
Plik należy skopiować do rutera do katalogu
/etc/openvpn pod nazwą
secret.keyKonfiguracja klienta Windows
Instalujemy pakiet
http://swupdate.openvpn.net/community/releases/openvpn-2.1.4-install.exe . Następnie należy w utworzyć plik o nazwie np.
my_vpn.ovpn w katalogu
C:\Program Files\OpenVPN\config o następującej zawartości
dev tap
proto udp
remote XXX.XXX.XXX.XXX 1194
resolv-retry infinite
nobind
mute-replay-warnings
secret "c:\\Program Files\\OpenVPN\\config\\secret.key"
verb 3
float
W tym katalogu należy też umieścić plik
secret.key. Oczywiście plik można trzymać np. na pendrive, wtedy w konfiguracji należy podać odpowiednią ścieżkę, np.
e:\\secret.key (zakładając że e: to pendrive czy inny bezpieczny nośnik). Za XXX.XXX.XXX.XXX należy podstawić publiczny adres IP naszego rutera.
Należy jeszcze odblokować zaporę sieciową w windows: Control Panel -> Security Center -> Windows Firewall -> Advanced. W Network Connection Settings odznaczyć checkbox który odnosi się do połączenia vpn. Po restarcie windowsa w tacce systemowej będzie dostępna ikona OpenVPN-GUI - przy pomocy prawego przycisku myszy należy wybrać opcję "Connect". Pojawi się okno informacyjne i po chwili zostaniemy połączeni z naszą siecią. Od tego momentu można normalnie dostać się do rutera, udostępnionego dysku przez sambę czy klienta torrentów.
Należy pamiętać, żeby klienta OpenVPN uruchamiać z odpowiednimi prawami np. administratora systemu. W przeciwnym przypadku może być problem np. z ustawieniem odpowiednich tablic routingu.
Konfiguracja klienta Linux
Należy zainstalować pakiet openvpn dostępny w dystrybucji. Następnie tworzymy plik o nazwie np.
my_vpn.ovpn w katalogu
/opt o następującej zawartości
dev tap
proto udp
remote XXX.XXX.XXX.XXX 1194
resolv-retry infinite
nobind
mute-replay-warnings
secret /opt/secret.key
verb 3
float
W tym katalogu (/opt) należy też umieścić plik
secret.key. Za XXX.XXX.XXX.XXX należy podstawić publiczny adres IP naszego rutera.
Uruchomienie:
# openvpn --config /opt/my_vpn.ovpn
# ifconfig tap0 up
# dhclient tap0
Należy jeszcze sprawdzić jak się utworzyły trasy (route) i np. usunąć trasę domyślną przez tap0 jeżeli taka się dodała.
Do testów można użyć w/w konfiguracji. Do "normalnej" pracy powinno użyć się sposobu konfigurowania sieci zgodnej z daną dystrybucją. W linuksie można posłużyć się NetworkManagerem i opcją VPN (dostępną po instalacji odpowiednich pakietów).
Zakończenie
Plik
secret.key należy zachować w bezpiecznym miejscu, gdyż tylko on odpowiada za autoryzację w sieci.
Adres IP pobierany jest rutera. Jeżeli używamy standardowej klasy adresowej (192.168.1.0/24) a klient jest podłączony do sieci w takiej samej klasie to połączenie nie zadziała (będzie problem z rutowaniem pakietów).
Sposobów konfiguracji OpenVPN jest dużo i to opracowanie nie zawiera wszystkich metod. Dlatego też należy samodzielnie dostosować konfigurację do własnych wymagań. Na początek należy zapoznać się z dokumentami w witrynie projektu:
http://openvpn.net oraz
http://openvpn.se .
Przykład łączenia dwóch sieci przy pomocy OpenVPN można znaleźć w
tym dokumencie.
Typową konfigruację "Road Warrior", z certyfikatami można znaleźć na
forum openwrt