Konfiguracja OpenVPN na routerze z DD-WRT

Jeśli posiadacie router z zainstalowanym DD-WRT to po pewnym czasie zaczniecie się zastanawiać jak wykorzystać jego możliwości. Jedną z nich jest VPN.

W poniższej instrukcji zamierzam przedstawić proces konfiguracji VPN na routerze z zainstalowanym DD-WRT

Instrukcja zakłada, że OpenSSL jest zainstalowany i nie tłumaczy procesu jego instalacji.

Odszukujemy plik openssl.cnf i dokonujemy w nim następujących zmian:

[ CA_default ]
dir = /etc/ssl
certs = /etc/ssl/certs
crl_dir = $dir/crl
private_key = $dir/private/cakey.pem
database = $dir/index.txt
certificate = $dir/cacert.pem
serial = $dir/serial

Katalog /etc/ssl powinien mieć następującą strukturę:

folder certs
folder crl
folder index.txt
folder newcerts
folder private
folder serial

W katalogu /etc/ssl uruchamiamy polecenie:

echo 00 > /etc/ssl/serial

Musimy wygenerować klucz prywatny centrum certyfikacji CA. Zostanie on wykorzystany do utworzenia odpowiadającego mu certyfikatu a następnie do podpisywania innych certyfikatów.

Wydajemy polecenie:

openssl genrsa -des3 -out private/cakey.pem 1024

Zostaniemy zapytani o hasło do klucza prywatnego CA i zapamiętujemy je (przyda się później).

Klucz zostanie zapisany w private/cakey.pem.

Teraz wygenerujmy certyfikat CA:

openssl req -new -x509 -days 365 -key private/cakey.pem -out cacert.pem

Musimy wypełnić kilka pól:

Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Mazowieckie
Locality Name (eg, city) []:Warszawa
Organization Name: (eg, company) [Internet Widgits Pty Ltd]:Moja Firma
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []: ca.twojadomena.pl
Email Address []:

Zostaniemy poproszeni o wpisanie hasła z utworzonego wcześniej klucza prywatnego CA. Certyfikat zostanie zapisany w pliku cacert.pem.

W tym kroku utworzymy klucz prywatny serwera.

Wpisujemy polecenie:

openssl genrsa -des3 -out private/serverkey.pem 1024

Musimy podać hasło klucza prywatnego serwera i zapamiętujemy je. Utworzony plik znajdzie się w private/serverkey.pem.

Wygenerujmy teraz wniosek o wystawienie certyfikatu:

openssl req -new -key private/serverkey.pem -out serverreq.pem

Wypełniamy kilka pól podobnie jak podczas generowania certyfikatu CA i podajemy hasło do klucza prywatnego serwera. Wniosek zostanie zapisany w pliku serverreq.pem.

Musimy wystawić certyfikat dla serwera:

openssl ca -notext -in serverreq.pem -out servercert.pem

Zostaniemy zapytani o hasło do klucza prywatnego CA. Następnie potwierdzamy operacje wpisując „y”.

Ściągnijmy jeszcze hasło z klucza prywatnego serwera:

openssl rsa -in private/serverkey.pem -out private/serverkey.pem_wp

Wygenerujmy plik pomocniczy z parametrami algorytmu kryptograficznego Diffiego-Hellmana. Potrzebne jest to do uzgodnienia stronom wspólnego klucza do szyfrowania symetrycznego.

openssl dhparam -out dh1024.pem 1024

Otrzymujemy plik dh1024.pem

W polu Public Server Cert wklejamy zawartość pliku cacert.pem razem z nagłówkiem i stopką

W polu Public Client Cert wklejamy zawartość pliku servercert.pem razem z nagłówkiem i stopką

W polu Private Client Key wklejamy zawartość pliku serverkey.pem razem z nagłówkiem i stopką

W polu DH PEM wklejamy zawartość pliku dh1024.pem razem z nagłówkiem i stopką

Public Server Cert

Konfiguracja

W polu OpenVPN Config wpisujemy:

mode server
server 10.8.0.0 255.255.255.0
local adres_ip_serwera_vpn
dev tun0
proto tcp
port 17003
keepalive 10 120
management localhost 5001
duplicate-cn
tls-server
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem
dh /tmp/openvpn/dh.pem
comp-lzo
verb 3
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"
client-to-client
daemon

Resztę pól zostawiamy pustą.

Teraz przejdźmy do strony Administracja -> Polecenia

W Startup dodajemy i zapisujemy:

openvpn --mktun --dev tap0
brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
sleep 3
openvpn --config tmp/openvpn/openvpn.conf --daemon

W Firewall dodajemy i zapisujemy:

/usr/sbin/iptables -I INPUT 1 -p udp --dport 17003 -j ACCEPT
/usr/sbin/iptables -I FORWARD 1 --source 10.8.0.0/24 -j ACCEPT
/usr/sbin/iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
/usr/sbin/iptables -I FORWARD -i tun0 -o br0 -j ACCEPT

Pozostała już tylko konfiguracja klienta:

client
dev tun
proto tcp
remote adres_ip_servera_lub_host 17003
resolv-retry infinite
nobind
persist-key
persist-tun
ca cacert.pem
cert user.crt
key user.key
comp-lzo
verb 3

Wystarczy teraz tylko zrestartować router i sprawdzić, czy wszystko działa 🙂

11 thoughts on “Konfiguracja OpenVPN na routerze z DD-WRT

  1. Jakiego masz builda DD-WRT? Z tego, co pamiętam to jak ja stawiałem OpenVPN na DD-WRT (tutorial na wiki DD-WRT) to jeszcze nie miał wsparcia dla niego z poziomu interfejsu webowego (jedynie PPTP), a OpenVPN doinstalowałem dopiero po tym, jak założyłem SD-moda ;]

  2. @snipe: Dzięki, to wiele tłumaczy ;] Ja do tej pory używam wersji z VoIP-em (v24-sp2 – 09/08/09 – voip – SVN revision 12874), a wcześniej standardowych. Ładny model dorwałeś skoro mega się na nim mieści 😀

  3. openssl genrsa -des3 -out private/serverkey.pem 1024
    openssl rsa -in private/serverkey.pem -out private/serverkey.pem_wp

    Erm. Najpierw każesz generować zaszyfrowany klucz prywatny, a potem odszyfrowywać go? Głupota.
    Opis obsługi CA jest cokolwiek kulawy. Absolutnie nic nie jest wyjaśnione, co, skąd ani po co tak.

    A konfiguracja klienta i serwera — zawsze uważałem że OpenVPN jest upierdliwy w ustawianiu i w konserwacji.

  4. No mówiłem że głupota. Wyczytałeś to w jakimś hałtu? A próbowałeś w ogóle zrozumieć co się dzieje w tych poleceniach? Nie? To idź najpierw przeczytać manuala do openssl.
    Albo może objaśnię: po co każesz najpierw zaszyfrować klucz, skoro chcesz nieszyfrowany?

  5. okej, nie chcę się kłócić 😉 rzeczywiście nie dopisałem tego, że zdejmowanie hasła z klucza prywatnego jest opcjonalne, co nie znaczy, że nie da się tego zrobić (przydatne aby uruchomić serwer) i na potrzeby domowego routera jest wystarczające (również jeśli chodzi o długość klucza)

  6. Przede wszystkim nie napisałeś, że zakładanie szyfrowania na kluczu jest opcjonalne. I nie zrozumiałeś aż do tej pory jak głupio robisz.

    Weź ty poczytaj sobie najpierw porządny tutorial do narzędzia openssl. Ja się uczyłem z manuala.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *