OpenVPN
Autorid
- Carl Rannaberg
- Ariel Palmiste
Muudetud
- Silver Kullarand
- Viljar Rooda
Sissejuhatus
Seadistame kahe arvuti vahel töötava VPN tunneli, kasutades selleks OpenVPN lahendust. VPN ühenduses on kaks või enam arvutit omavahel turvalise tunneli kaudu ühenduses labi Interneti, kus kogu ühendus on krüpteeritud. Nii on võimalik ühest arvutist pääseda teises arvutis töötavatele teenustele ligi läbi ebaturvalise Interneti. See arvuti kuhu ühendatakse nimetatakse serveriks ja see millest ühendatakse nimetatakse kliendiks.
Eeldused
Töötav Ubuntu Server ja Klient (Ubuntu 10.04)
Kasutaja peab oskama käsurida kasutada.
Kaks või enam võrgus olevat arvutit või virtuaalmasinat.
Nõuded
Nõutud on sertifikaadiga autentimine.
Routed ühenduse kasutamine.
Installeerimine
Järgnevad toimingud tuleb teha nii kliendis kui serveris. Esiteks tuleks tarkvara nimekirja uuendada.
sudo apt-get update
Paigaldame OpenVPN'i
sudo apt-get install openvpn
Seadistamine
VPN tunneli loomiseks on vaja vähemalt kahte arvutit. Üks on server ja teised kliendid, kes soovivad serveri arvutisse tunnelit luua, et sealseid teenuseid kasutada.
Loome kataloogi, kuhu salvestame seadistusfailid ja sertifikaadid.
Logime root kasutajane sisse ja kõik järgnevad käsud tuleb teha root kasutajana.
sudo -i
Järgnevad käsud tuleb teha nii serveri, kui ka kliendi arvutis.
mkdir /etc/openvpn/easy-rsa/
Kopeerime vajaliku failid sinna kataloogi, et pärast OpenVPN uuendust failid alles jääks.
cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
Sertifikaatide genereerimine
Järgnev tuleb teha ainult serveri arvutis.
Logime root kasutajane sisse (kui juba ei ole) ja kõik järgnevad käsud tuleb teha root kasutajana.
sudo -i
Liigume kataloogi /etc/openvpn/easy-rsa/:
cd /etc/openvpn/easy-rsa/
Muudame vars faili /etc/openvpn/easy-rsa/ kataloogis
nano vars
Faili lõpus tuleks järgnevad read ära muuta endale sobivate andmetega.
Näieks niimoodi:
export KEY_COUNTRY="EE" export KEY_PROVINCE="HARJU" export KEY_CITY="TALLINN" export KEY_ORG="Firma" export KEY_EMAIL="firma@firma.ee"
- Country - kahekohaline riigikood (EE- Eesti)
- Province - Maakond
- City - Linn
- Org - organisatsioon kellele sertifikaat genereeritakse
- Email - emaili aadress
Edasi käivitame selle sama vars faili, et võtmed säiliks. (NB: mõlemad punktid järgnevas käsus on olulised)
. ./vars
Nüüd kustutame keys kataloogi sisu, kui see olemas on:
./clean-all
Lõpuks loome sertifikaadi ja selle võtme:
./build-ca
Nüüd peaks olema näha eelnevalt ära muudetud read, mis on vaikimisi sisestatud. Neid võib veel muuta, kui vajadus tekib või lihtsalt Enter peale iga rida vajutada. Rea Organizational Unit Name ja Name võib tühjaks jätta ja lihtsalt Enter vajutada. Kindlasti tuleb ära märkida Common Name, mis võib olla arvuti hosti nimi või mingi muu. Käsu tulemusena tekitati keys kataloogi kaks faili: ca.crt ja ca.key.
Järgmisena tuleks genereerida serveri enda sertifikaat ja võti.
./build-key-server server
Andmed mida küsitakse on sarnased eelmise käsuga ja peavad olema samad. Common Name peab olema server. Lisaks küsitakse parooli, mis tuleks sisestada ja An Optional Company Name, mille võib tühjaks jätta. Küsimuste Sign the certificate? [y/n] ja 1 out of 1 certificate requests certified, commit? [y/n] peale vasta y ja vajuta Enter. Käsu tulemusena loodi failid server.crt ja server.key
Iga serverisse ühendava kliendi jaoks tuleb serveri arvutis genereerida iga kliendi jaoks sertifikaat ja võti. Ühe kliendi puhul sedasi:
./build-key client1
Kui küsib Common Name peaks igal kliendil olema see erinev. Meie näites sobib selleks client1.
Järgmisena genereerime Diffie Hellman parameetrid:
./build-dh
Meil on vaja nüüd kliendi sertifikaat client1.crt ja võti client1.key ning põhisertifikaat ca.crt kopeerida kliendi arvutisse, näiteks /etc/openvpn/ kataloogi. Selleks sobib üle ssh kopeerimine.
Enne tuleks ajutiselt anda kliendi arvutist /etc/openvpn/ kataloogile kirjutusõiguse.
chmod o+w /etc/openvpn/
Serveri arvutist sisestada käsud, et kopeerida vajaminevad failid kliendi arvutisse
scp /etc/openvpn/easy-rsa/keys/ca.crt <kasutajanimi>@<vpn kliendi ip-aadress>:/etc/openvpn/ scp /etc/openvpn/easy-rsa/keys/client1.crt <kasutajanimi>@<vpn kliendi ip-aadress>:/etc/openvpn/ scp /etc/openvpn/easy-rsa/keys/client1.key <kasutajanimi>@<vpn kliendi ip-aadress>:/etc/openvpn/
Pärast muuta õigused kliendi masinas tagasi.
chmod o-w /etc/openvpn/
(Märkus: Kliendi sertifikaate ja võtmed ei ole soovitav serveri masinas edasi hoida, neid on võimalik ka ainult kliendi masinas genereerida)
Serveri seadistamine
Seda arvutit kuhu ühendatakse nimetatakse serveriks. Kõik järgnev teha serveris. Näidis seadistusfailid asuvad kataloogis /usr/share/doc/openvpn/examples/sample-config-files Loome kataloogi conf:
mkdir /etc/openvpn/conf
Kopeerime seadistusfailid sinna kataloogi:
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/conf
Liigume sinna kataloogi:
cd /etc/openvpn/conf
Pakime seadistusfaili lahti:
gunzip server.conf.gz
Muudame server.conf faili:
sudo nano server.conf
Vaikimis seadistusfail on üldjoontes õigete seadistustega, küll aga peab mõnda asja muutma.
Esiteks tuleb näidata, kus on genereeritud sertifikaadid ja võtmed. Muuta ära read ca, cert, key ja dh:
ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh1024.pem
Määrame ära kõikidele klientidele antava ip aadressi vahemiku. Server ise saab esimese ip. Siin näites hakkab serveri ip-ks olema 192.168.0.1 ja klientidel ip vahemikus 192.168.0.2 - 192.168.0.254 :
server 192.168.0.0 255.255.255.0
Tunneli serveri poolne ots saab staatilise ip.
topology subnet
Esimene annab tunneli ip-aadressi route'i ja teine annab default gateway.
push "route 192.168.0.254 255.255.255.0" push "route 0.0.0.0 0.0.0.0 192.168.0.1"
"Kuidas ma seda sõnastan"
tls-server
Kasutame vaikimisi VPN porti :
port 1194
Kasutame UDP protokolli, kuna see on turvalisem :
proto udp
Kasutame ruutimiseks tun liidest :
dev tun0
Määrame kui kaua ühendust hoida. Pingib klienti iga 10 sekundi tagant ja kui 120 seki vastust pole olnud, ühendus suletakse :
keepalive 10 120
Määrab ära kas vpn ühendust pakkida :
comp-lzo
Kirjutab ühendunud masinad openvpn-status.log faili :
status openvpn-status.log
Näitab kui palju teateid kuvatakse syslogis :
verb 3
Salvesta fail
Lõplik server.conf peaks selline välja nägema, kui kommentaarid ja mittevajalik eemaldada
;local port 1194 server 192.168.0.0 255.255.255.0 topology subnet push "route 192.168.0.254 255.255.255.0" push "route 0.0.0.0 0.0.0.0 192.168.0.1" tls-server dev tun0 proto udp keepalive 10 120 comp-lzo dh /etc/openvpn/dh1024.pem ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key status /var/log/openvpn-status.log verb 3
Järgmiseks tuleb eemaldada kommentaari märk failist /etc/sysctl.conf :
net.ipv4.ip_forward=1
Käivita käsureal järgnev käsk, et rakendada vastav muutuja selleks sessiooniks.
echo 1 > /proc/sys/net/ipv4/ip_forward
DNS Masqerade
Kliendi võrguliikluse suunamiseks läbi VPN tunneli tuleb paigaldada serverisse DNS Masqerade. See ei mõju DNS päringutele.
apt-get install dnsmasq
Peale paketi paigaldamist tuleb muuta /etc/dnsmasq.conf faili järgnevalt, et DNS Masqerade ei kuulaks enam avalikku liidest. Järgnevate ridade eest tuleb eemaldada kommentaari märgid ja omistada neile vastavad väärtused.
listen-address=127.0.0.1,192.168.0.1 bind-interfaces
Nende muudatuste tulemusena hakkab DNS Masqerade kuulama localhost'i ja gateway ip-aadressi VPN tunneli tun0 liidesel.
Muudatusete rakendamiseks tuleks teha restart OpenVPN'ile ja DNS Masqerade'le.
/etc/init.d/openvpn restart /etc/init.d/dnsmasq restart
Kontroll
Serveri seadistamine on nüüd lõppenud. Openvpn tööle panemiseks käivitada käsk:
sudo openvpn --script-security 2 --config /etc/openvpn/conf/server.conf
Kõik töötab ilusti, kui ekraanil on näha sarnaseid ridu (ip aadressid võivad olla teised). Kui viimane rida on Initialization Sequence Completed, siis peaks kõik toimima.
Mon Dec 7 15:30:28 2009 Diffie-Hellman initialized with 1024 bit key Mon Dec 7 15:30:28 2009 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted> Mon Dec 7 15:30:28 2009 TLS-Auth MTU parms [ L:1590 D:138 EF:38 EB:0 ET:0 EL:0 ] Mon Dec 7 15:30:28 2009 TUN/TAP device tap0 opened Mon Dec 7 15:30:28 2009 TUN/TAP TX queue length set to 100 Mon Dec 7 15:30:28 2009 /usr/local/bin/tap-up tap0 1500 1590 init Mon Dec 7 15:30:28 2009 Data Channel MTU parms [ L:1590 D:1450 EF:58 EB:135 ET:32 EL:0 AF:3/1 ] Mon Dec 7 15:30:28 2009 Socket Buffers: R=[114688->131072] S=[114688->131072] Mon Dec 7 15:30:28 2009 UDPv4 link local (bound): [undef]:1194 Mon Dec 7 15:30:28 2009 UDPv4 link remote: [undef] Mon Dec 7 15:30:28 2009 MULTI: multi_init called, r=256 v=256 Mon Dec 7 15:30:28 2009 IFCONFIG POOL: base=10.8.0.50 size=51 Mon Dec 7 15:30:28 2009 IFCONFIG POOL LIST Mon Dec 7 15:30:28 2009 Initialization Sequence Completed
Kui soovitakse openvpn käivitada boot ajal või teenuse käivitamisega /etc/init.d/ kataloogist - siis liigutada server.conf fail /etc/openvpn kataloogi
Kliendi seadistamine
Järgnev tuleb teha kliendi arvutis. Logime root kasutajana sisse:
sudo -i
Loome kataloogi conf:
mkdir /etc/openvpn/conf
Kopeerime seadistusfailid sinna kataloogi:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/conf
Liigume sinna kataloogi:
cd /etc/openvpn/conf
Muudame client.conf faili:
nano client.conf
Otsida üles rida remote my-server-1 1194. Siia tuleb my-server-1 asemele panna VPN serveri ip-aadress.
remote <vpn serveri ip-aadress> 1194
Järgmiseks tuleb määrata ära sertifikaatide ja võtmete asukohad. Leida üles ja ära muuta read ca, cert ja key. Panna sinna täispikk kataloog, kuhu enne sai serverist sertifikaadid kopeeritud. Meie näite puhul /etc/openvpn/ kataloog.
ca /etc/openvpn/ca.crt cert /etc/openvpn/client1.crt key /etc/openvpn/client1.key
Näitame, et OpenVPN läheb kliendina tööle.
client
Peab olema sama liides, mis serveri seadistuses.
dev tun0
Peab ka sama olema, mis serveris.
proto udp
Vpn ühenduse pakkimine, peab olema ka serveris määratud.
comp-lzo
Logifaili "jutukus".
verb 3
Salvestada fail. Lõplik client.conf fail ilma üleliigsete kommentaarideta on selline:
client dev tun proto udp remote 192.168.56.200 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key comp-lzo verb 3 up /etc/openvpn/update-resolve-config down /etc/openvpn/update-resolve-config
Tunneli serveripoolse nimeserveri kasutamiseks
Selleks, et kasutada tunneli sreveri poolset nimeserverit tuleb kliendi arvutisse paigaldada resolvconf pakett.
sudo -i apt-get install resolvconf
OpenVPN confi faili /etc/openvpn/conf tuleb lisada 2 rida:
up /etc/openvpn/update-resolve-config down /etc/openvpn/update-resolve-config
Lisaks tuleb muuta /etc/openvpn/update-resolve-config skriptis vastavaid ridasi.
foreign_option_1='dhcp-option DNS 172.16.0.175' foreign_option_2='dhcp-option DNS 8.8.8.8'
Skriptile tuleb anda vajalikud õigused, et ta saaks muuta resolv.conf'i, mille tulemusena muudetakse DNS serverite aadresse tunnele töö ajaks.
chmod a+x /etc/openvpn/update-resolve-config
Tehtud muudatuste rakendamisek tuleb teha OpenVPN'ile restart.
/etc/init.d/openvpn restart
Ühendumine serveriga
Kui serveris openvpn edukalt töötab, võib kliendi arvutis openvpn tööle panna:
sudo openvpn /etc/openvpn/conf/client.conf
Kõik peaks toimima, kui väljundi viimane rida on Initialization Sequenze Completed ja erroreid ei tekkinud. (Et teenus automaatselt stardiks, kui kõik korras on, siis võib client.conf faili liigutada /etc/openvpn kataloogi)
Ühenduse Testimine
Testimiseks proovida mõnda serveri arvutis töötavat teenust, näiteks veebiserverit. Kui veebiserver töötab serveris, siis ühenduda openvpn serverisse, ip aadressiks paneme serveri vpn liidese(tun0) ip-aadressi, mis meie näites oli 192.168.0.1:
links 192.168.0.1
Kui tuleb leht ette, siis on opevpn tunnel edukalt loodud ja töökorras.
Tulemüür
Kui masinas on töötav iptables tulemüür (vahet pole, kas serveris või kliendis), siis võiks lubada udp port 1194 läbi tulemüüri, kui ei saada ühendust serveriga.
iptables -I INPUT -p udp --dport 1194 -j ACCEPT
ja lubada ka tun0 liidese liiklus läbi
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
eth1 on meil see adapter, mis on ühendatud internetti.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE
Teenuse varundamine
Kuna kõik vajalikud seadistusfailid on /etc/openvpn kataloogis, siis piisab terve selle kataloogi varundamisest. Antud kataloogist teha kord päevas täielik varukoopia ja kõik failid salvestada. Samuti võib teha varukoopia /etc/dnsmasq.conf failist, Aga kuna selle seadistamine pole just kõige mahukam siis võib seda teha ka taastamisel nullist.
Teenuse taastamine
Kui teenusega ilmneb probleeme tuleb seadistusfailid ja sertifikaadid ning võtmed üle vaadata ja vajadusel taastada. Kontrollida, et arvutite ip-aadressid oleks vastavuses seadistusfailidega.
Versioonide ajalugu
ver. 0.1 03.11.2009
ver. 0.2 30.11.2009
ver. 0.3 01.12.2009
ver. 0.4 07.12.2009
ver. 0.5 08.12.2009
ver. 0.6 09.12.2009
ver. 0.7 11.12.2009
ver. 0.8 13.12.2009
ver. 0.9 16.12.2009
ver. 1.5 : Stabiilne versioon
ver. 1.6 : Lisati Web Proxy võimalus via tinyproxy
ver. 1.7 : Lisati võimalus muuta WebProxy teenuse porti.
ver. 1.8 : Parandati WebProxy probleemid.
Viimase muutmise aeg
7.05.2012