
Jedno podejście do instalacji i konfiguracji OpenVPN na CentOS 6 już miałem. Jednakże, jak zauważył jeden z czytelników – wykorzystałem autoryzację {{Pluggable_Authentication_Modules|PAM}} zamiast skorzystać z logowania za pomocą kluczy.
Przyznam, że miałem z tym trochę problemów, a zmobilizował mnie do tego Rafał we wpisie openvpn debian – nie dawało mi spokoju, że można to zrobić prościej i szybciej. Dać dostęp innym osobom bez tworzenia zbędnego użytkownika w systemie i podawani innym haseł.
Ok, do rzeczy.
Instalacja OpenVPN
yum install openvpn easy-rsa
Konfiguracja OpenVPN i Easy-RSA
cd /etc/openvpn/ mkdir easy-rsa cp -r /usr/share/easy-rsa/2.0/* easy-rsa/ cd easy-rsa/ vim vars
W pliku vars edytujemy linię export KEY_SIZE=1024 zmieniając wartość na np. 2048, lub paranoidalną 4096. Zapisujemy, wychodzimy.
. ./vars ./clean-all ./build-ca #generuje certyfikat SSL, dane uzupełniamy wg własnego "widzimisia" ./build-key-server server #generuje klucz serwera, dane wg "uznania" ./build-key client #podobnie jak wyżej ./build-dh #chwilę to potrwa
Następnie generujemy klucz publiczny:
openvpn --genkey --secret ta.key mv ta.key keys/
Przechodzimy do konfiguracji serwera OpenVPN. Tworzymy plik server.conf.
cd /etc/openvpn/ vim server.conf
A w nim zawieramy naszą konfigurację:
port xxxx #definiujemy port, na którym nasłuchiwać ma OpenVPN proto tcp dev tun ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key dh /etc/openvpn/easy-rsa/keys/dhxxxx.pem #w zależności jaką wartość wpisaliśmy może być 1024, 2048, 4096 server 10.0.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" keepalive 10 120 tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 comp-lzo user nobody group nobody persist-key persist-tun log-append /var/log/openvpn/openvpn.log status /var/log/openvpn/status.log verb 3
Włączenie przekierowania ruchu
Bardzo ważne jest, by nasz serwer przekierowywał ruch.
vim /etc/sysctl.conf
Odnajdujemy linię
net.ipv4.ip_forward
i zamieniamy wartość 0, na 1. Ładujemy wprowadzone zmiany:
sysctl -p
Tworzenie reguł do iptables
Gwarantuję, że bez tego tunelowanie nie zadziała. Połączymy się z serwerem, ale na tym skończy się funkcjonalność VPNa – a przynajmniej u mnie tak to się skończyło. By wszystko działało jak należy – dla serwera na OpenVZ i zainstalowanym CSF tworzymy następujące reguły:
iptables -t nat -A POSTROUTING -o venet0 -j SNAT --to-source 123.456.789.12 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 123.456.789.12 iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o venet0 iptables -t nat -A POSTROUTING -j SNAT --to-source 123.456.789.12
Po stronie serwera jest to już niemal wszystko. Potrzebujemy jeszcze skopiować plik z certyfikatem i zapisać zmiany w iptables.
Plik konfiguracyjny dla komputera
By móc się połączyć z serwerem potrzebujemy odpowiednio przygotowany plik konfiguracyjny. Zadziała zarówno na {{Windows|Windowsie}} jak i {{Android|Androidzie}}.
client dev tun proto tcp remote 123.456.789.12 xxxx #ip port resolv-retry infinite nobind user nobody group nobody persist-key ca ca.crt cert client.crt #adres do klucza użytkownika key client.key #j/w ns-cert-type server tls-auth ta.key 1 comp-lzo verb 3
Zapisujemy w c:\Program Files\OpenVPN\config\ – tam również zapisujemy takie pliki jak: ca.crt, ta.key, client.crt i client.key. Wszystkie znajdują się w /etc/openvpn/easy-rsa/keys.
Start OpenVPN:
service openvpn start
hmm, a nie openvpn –genkey –secret ta.key?
Słusznie! :) Już poprawiam. Dzięki.
Korzystając z okazji może wiesz jak to zrobić. Zainstalowałem OpenVPN AS. W zakładkach konfiguracji web mam możliwość włączenia 2-etapowej weryfikacji Google authenticator. Co trzeba zrobić oprócz zaznaczania „ptaszka” aby to działało? Trzeba coś doinstalować? W takich wypadkach skanuje się zwykle kod QR – szukałem czegoś na ten temat ale jestem nieco zdezorientowany.
Dwa czy bezpiecznym jest aby dostęp do konfiguracji OpenVPN był via web:port można jakoś ograniczyć dostęp do tej strony konfiguracyjnej?
Dzięki
Nie korzystam z tego, więc nie mam pojęcia szczerze powiedziawszy. Generuję sobie klucze do konfiguracji.
Jeśli są jakieś dane logowania to nie powinno nic się stać. Ja osobiście blokuję dostęp do wszelakich paneli dla innych IP niż moje + lokalne z openvpn. Nie dostaniesz się np. do SSH mojego jeśli nie masz dostępu do mojego lokalnego IP albo VPNa ;).
Witam.Zestawiłem połączenie przez openvpn i teraz chciałem zamapować katalog z linuxa na win7.
Niestety nie wiem jak to zrobić. Czy mógłbym liczyć na jakąś podpowiedź??
Czarek
Jeśli dobrze zrozumiałem to chcesz zrobić coś takiego jak oferuje samba. Zainstaluj na Linuksie sambę. Po udostępnieniu konkretnych folderów powinny być one wówczas widoczne na Windowsie.
Ja polecam btsync jednak. O wiele prostszy w konfiguracji i możesz udostępnić „na zewnątrz” też. Opis tutaj.
Witam. Dzięki za podpowiedż z btsync. Super.
Ale pojawił mi się problem z wieloma użytkownikami.
Chciałbym aby przez openvpn moglo się łączyć kilku uzytkowników.
Wygląda na to, że z jednego klucza może korzystać jeden użytkownik.
Jak wygenerować kilka kluczy, osobno dla każdego użytkownika??
Jak podaje komendę ./clean all to poprzednie klucze są usuwane.
W zasadzie to klucze generujesz tylko tym poleceniem:
./build-key client
Możesz wygenerować kilka kluczy:
./build-key kasia
./build-key tomek
Dokumentacja OpenVPN w sekcji Generate certificates & keys for 3 clients.
Następnie dla każdego użytkownika musisz przygotować plik *.ovpn, gdzie zmieniasz po prostu nazwy kluczy dla nich:
[…]
cert kasia.crt
key kasia.key
[…]
[…]
cert tomek.crt
key tomek.key
[…]
Wydanie polecenia ./clean-all czyści wszystkie klucze, więc nie dziw się :)
Dziękuje za pomoc. Klucze wygenerowałem ale teraz masuwa się nowe pytanie.
Jak dodać nowy klucz użytkownika do już wygenerowanych kluczy?
Czy za każdym razem trzeba clean all i generować wszystko od nowa??
E nie, powinno wystarczyć wygenerowanie nowego klucza dla konkretnej osoby. Bez ponownego generowania całości i czyszczenia :).