Log in


Forgot your password?
prijatelji LUGoNSa
gnu.gif
linuxzasve.jpg
hulk.jpg
zextras_logo.png
 
You are here: Home / Uputstva / Opšte / VPN

VPN

by Goran Mekić last modified Sep 24, 2008 09:20 AM
Kako spojiti više računara na različitim geografskim mestima u jednu virtuelnu mrežu

Šta je sve potrebno uraditi

Koraci koje treba preduzeti su sledeći:
  • konfigurisati kernel (ukoliko nije već konfigurisan)
  • podesiti VPN server
  • podesiti VPN klijent
  • generisanje ključeva



Konfiguracija kernela

Potrebno je, pored standardne konfiguracije, ubaciti i podršku za TUN/TAP uređaje.

  • Device Drivers  --->
    • [*] Network device support  --->
      • <M>   Universal TUN/TAP device driver support


Podešavanje VPN servera

Prvo morate instalirati OpenVPN paket. Nakon što je instalacija uspešno završena, potrebno je konfigurisati server. Konfiguracioni fajl obično stoji u /etc/openvpn, ali može da se razlikuje na distribuciji koju Vi koristite.

/etc/openvpn/openvpn.conf:

# Koristi tun interfejs
dev tun

# Radi u server modu sa datim opsegom (172.16.1.0/24)
server 172.16.1.0 255.255.255.0

# Koristi kompresovanje za prenos podataka
comp-lzo

# Nalog pod kojim openvpn radi
user openvpn
group openvpn

# Naredna 4 fajla definišu ključ (TLS/SSL)
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

# Dozvoli klijentima u virtuelnoj mreži da komuniciraju međusobno
client-to-client

# Koristi trajni ključ i tun uređaj
persist-key
persist-tun

# Na svakih 10 sekundi pošalji "ping" paket, i smatraj da je računar kome je isti poslat mrtva
# ukoliko ne odgovori za 120 sekundi. Ovo sprečava da se klijenti resetuju zbog nepostojanja saobraćaja
keepalive 10 120

# Nakon što se klijentski računar poveže, pokreni skriptu script.sh
learn-address /etc/openvpn/script.sh

# Koristi TCP protokol (neki ljudi kažu da ima mnogo bolje performanse nego UDP koji je default)
proto tcp

Veoma bitna skripta je script.sh, koja ažurira Vaš DNS (ukoliko ga imate, inače zakomentarišite zadnju liniju). Kako je ona plod mog intelekta, nije testirana u različitim okruženjima (služi mojim potrebama), te je moguće da ne radi svuda kako treba. Evo kako ona izgleda.

/etc/openvpn/script.sh:

#!/bin/bash

DNSZONE=vpn
DNSREVZONE=1.16.172.in-addr.arpa

# Ključ po kome se ažurira DNS zapis. Jako je bitno da bude isti kao i onaj koji je korišćen za DNS server
DNSKEY='c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K'
DNSKEYNAME=mykey
DOMAIN=vpn

IP=$2
REVIP=$(echo $IP | awk -F . '{ print $4 "." $3 "." $2 "." $1}')
HOST=$3.$DOMAIN
OLDIP=$(host $HOST | grep -v 'not found' | awk '{ print $4 }')
OLDREVIP=$(echo $OLDIP | awk -F . '{ print $4 "." $3 "." $2 "." $1}')
DELETEIP=
DELETEREVIP=

TMPFILE=`tempfile`

if [ ! -z $OLDIP ]; then
DELETEIP="update delete $HOST"
DELETEREVIP="update delete $OLDREVIP.in-addr.arpa"
fi

cat >$TMPFILE << EOF
server localhost
key $DNSKEYNAME $DNSKEY

zone $DNSZONE
$DELETEIP
update add $HOST 86400 IN A $IP
send

zone $DNSREVZONE
$DELETEREVIP
update add $REVIP.in-addr.arpa 86400 PTR $HOST
send
EOF

nsupdate $TMPFILE &>/tmp/vpn.log
rm $TMPFILE

Skripta je napravljena tako da pretpostavlja da se zona za VPN zove "vpn", da je IP opseg 172.16.1.0/24 (isti kao u openvpn.conf fajlu, ali je pri promeni opsega potrebno izmenu izvršiti u oba fajla), da se DNS server nalazi na istom računaru kao i VPN server i da je domen koji se ažurira ".vpn". Ukoliko to nije slučaj, izmenite skriptu tako da odgovara Vašim potrebama.

Da biste saznali ko je sve nakačen na VPN, treba da pošaljete SIGUSR2 openvpn procesu a potom pogledate šta je zapisano u /var/log/messages (ili u neki drugi log fajl, ukoliko je logger tako podešen):

# killall -SIGUSR2 openvpn



Podešavanje VPN klijenta

Konfiguracioni fajl klijenta je sličan serverskom, te su zbog toga komentarisane samo linije koje se razlikuju.

/etc/openvpn/openvpn.conf:


# Radi u klijent modu
client

# Server je moj.vpn
remote moj.vpn

dev tun
comp-lzo
user openvpn
group openvpn
ca ca.crt
cert client.crt
key client.key
persist-key
persist-tun
proto tcp

# Traži proveru sertifikata
remote-cert-tls server


Generisanje ključeva

Pomenuto je ranije da se za VPN koriste ključevi. Njihova uloga je sigurnost. Naime, ne samo što omogućavaju da ne može svako da se nakači, nego se i saobraćaj između servera i klijenata kriptuje. Generisanje ključeva može biti trik, ali OpenVPN dolazi sa skriptama koje olakšavaju ovaj posao. U većini slučajeva, te skripte su instalirane zajedno sa paketom OpenVPN. Ono što treba da tražite su:

  • vars
  • clean-all
  • build-ca
  • build-key-server
  • build-key
  • build-dh

Ukoliko ne možete da nađete gde se ove skripte nalaze, skinite OpenVPN source sa sajta i otpakujte ga. Tu ćete naći i potrebne skripte. Evo i kako se koriste:

# export KEY_CN=vpn.server
# export KEY_ORG=LUGoNS
# export KEY_EMAIL=ja@moj.mail
# export KEY_CITY="Novi Sad"
# export KEY_PROVINCE=Vojvodina
# export KEY_COUNTRY=RS
# ./vars
# ./clean-all
# ./build-ca

Ovime biste trebali da inicijalizujete generisanje ključeva. Skripta build-ca će tražiti da unesete informacije za generisanje ključa, kao što je država, grad, itd. Ovo stvarno nije bitno, te se ne morate truditi da popunite u skladu sa nekim propisima, ali je Common Name veoma bitno. Ovo polje treba da nosi informaciju imena Vašeg servera na Internetu. Recimo, moj.vpn (možete koristiti i dinamičke hostove). Posle toga prvo generišemo serverski ključ:

# ./build-key-server server

Kao i build-ca, i ova skripta će tražiti iste one informacije za generisanje ključa. Nakon generisanja serverskog ključa, možete generisati i klijentski:

# ./build-key klijent

Za generisanje ovog ključa se traže iste one informacije. Veoma je bitno da klijent bude jedinstveno ime u VPN mreži. Ne morate koristiti ime "klijent", šta više, preporučljivo je da date neko ime svakom od klijenata (mora biti različito). Ono što je ostalo je da se generišu Diffie Hellman parametri:

# ./build-dh

Ova operacija će potrajati možda i nekoliko minuta, ukoliko imate slabu mašinu. Ovime je završeno generisanje svih potrebnih ključeva, te jedino što je ostalo je da prekopirate potrebne fajlove (svi se nalaze u direktorijumu "keys") za server:

# cd keys
# cp ca.crt server.crt server.key dh1024.pem /etc/openvpn/

Potom je potrebno uraditi slično na klijentu:

# cd keys
# cp ca.crt klijent.crt klijent.key /etc/openvpn/

Ovime je konfiguracija servera i klijenta završena. Startujte OpenVPN i trebali biste da dobijete vezu između računara.

Ovo malo uputstvo je uglavnom prevedeno sa OpenVPN sajta. Na istoj lokaciji se nalaze i objašnjenja kako namestiti neke napredne opcije OpenVPN-a.

Related content
Jednostavan DNS server

Document Actions