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ę:
 certs
 crl
 index.txt
 newcerts
 private
 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ą


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 🙂
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 ;]
@Zal: DD-WRT v24-sp2 (10/10/09) mega – build 13064 🙂
@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 😀
@Zal: Nie jest źle – Asus WL500-W. Ale od czasu do czasu zdarzają mu się zwiechy i dziwne sytuacje 😛
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.
@dozzie: jeśli tego nie zrobimy to za każdym razem jak będziemy uruchamiać vpn bedziemy proszeni o podanie hasła. Co jak vpn się wysypie?
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?
A swoją drogą, 1kb to bardzo krótki klucz. Najsłabsze obecnie na rynku są generowane z 2kb.
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)
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.
A, jeszcze jedno: nie ma takiego czegoś jak „potrzeby domowe” w kryptografii. Albo coś jest bezpieczne, albo nie jest. 1024 bity przestają być bezpieczne.