Selasa, 09 Februari 2010 di 00.20 |  
Karena seringnya bertugas di lapangan, saya kemana-mana selalu membawa modem GSM/CDMA, untuk melakukan troubleshoot darurat. Hanya sayangnya beberapa device di network yang saya tangani memiliki aplikasi khusus yang harus diakses melalui network kantor. Device-device tersebut disetup dengan menggunakan ip address kelas private. Untuk device yang web-based, saya dapat dengan mudah mengaksesnya dari network luar kantor dengan memasang proxy server yang saya tempatkan di salah satu node network kantor. Lalu saya tinggal menambahkan konfigurasi tambahan di browser saya. Cara ini dapat dilakukan dari network di luar network kantor. Tetapi agak sedikit berbeda dengan jenis device yang perlu diakses dengan software khusus seperti Alvarion DS-11 yang harus menggunakan aplikasi Breezeconfig. Tentu saja ini tidak bisa diakses dengan menggunakan proxy.

Yang kemudian muncul ide bagaimana membuat VPN yang bisa diakses dari mana saja untuk bisa mendapatkan routing sehingga bisa menjalankan aplikasi semacam Breezeconfig tersebut.

Untuk topologi permasalahannya nampak seperti di bawah ini:


OpenVPN.

Setelah membaca-baca sekian setting VPN yang pas buat saya, akhirnya saya memutuskan untuk mengimplementasi VPN dengan OpenVPN. Alasannya, karena OpenVPN mendukung penggunaan VPN di belakang NAT. Mungkin di luar sana masih banyak implementasi VPN yang lainnya yang bisa berjalan di belakang NAT, hanya saja saya memang memilih yang satu ini.

Asumsi.


* Server VPN menggunakan Linux CentOS 5.x. Dan tentu saja OpenVPN bisa berjalan di distro lain. Hanya saja setupnya mungkin agak sedikit berbeda. Sedangkan client VPN adalah laptop dengan OS Windows XP.

* Per instalasi di tulisan ini, versi OpenVPN yang saya gunakan adalah versi 2.0.9. Sedangkan untuk client saya menggunakan OpenVPN209 GUI 1.0.3.

* Untuk kompresi data yang dibutuhkan OpenVPN, diperlukan software algoritma LZO (Lempel-Ziv-Oberhumer). Per instalasi ini saya menggunakan versi 2.0.0. Cara instalasinya cukup mudah seperti yang akan dipaparkan di bawah.

* Untuk instalasi server diperlukan akses dengan privilege root.

* Interface network yang digunakan oleh OpenVPN adalah TUN/TAP. Pada dasarnya, di setiap distro terbaru, driver untuk dua interface ini sudah diikutsertakan dalam distro secara default. Tetapi jika ingin mencoba menginstall sendiri dalam distro-distro yang "tidak umum", maka source bisa didownload di http://vtun.sourceforge.net/tun/.


Instalasi.

INSTALASI SERVER

Download file lzo-2.00.tar.gz dan openvpn-2.0.9.tar.gz ke server, lalu uncompress masing-masing file tersebut:



root# cd /usr/local/src

root# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.00.tar.gz

root# wget http://www.openvpn.net/release/openvpn-2.0.9.tar.gz

root# tar -zxvf lzo-2.0.0.tar.gz && tar -zxvf openvpn-2.0.9.tar.gz



Lakukan kompilasi pada kedua package:



root# cd /usr/local/src/lzo-2.0.0

root# ./configure && make && make install

root# cd /usr/local/src/openvpn-2.0.9

root# ./configure && make && make install



Sampai pada tahap ini, seharusnya semua berjalan lancar. Pada awal instalasi saya mengalami gagal kompilasi dikarenakan ternyata belum ada package gcc-c++. Periksa kembali keberadaan compiler pada mesin server. Jika tidak ada masalah, yang berikutnya adalah membuat konfigurasi OpenVPN untuk bisa menggunakan X509 certificate untuk membuat Certificate Authority yang kemudian nanti akan digunakan untuk membuat server dan client certificate. Terlebih dahulu kita buat direktori keys di dalam direktori /usr/local/src/openvpn-2.0.9/easy-rsa. Dan di dalam direktori keys buat dua file lagi dengan nama index.txt dan serial.



root# cd /usr/local/src/openvpn-2.0.9/easy-rsa/

root# mkdir keys ; cd keys

root# touch index.txt ; touch serial

root# echo 01 > serial



Edit file /usr/local/src/openvpna/easy-rsa/vars pada bagian :



export KEY_COUNTRY=

export KEY_PROVINCE=

export KEY_CITY=

export KEY_ORG=

export KEY_EMAIL=




Misal bisa diisi dengan parameter seperti ini:



export KEY_COUNTRY=ID --> kode negara untuk Indonesia

export KEY_PROVINCE=Jateng

export KEY_CITY=Semarang

export KEY_ORG="VPN-Test" --> bebas diisi, tapi dalam contoh ini kita gunakan parameter seperti di samping.

export KEY_EMAIL="user@domain.com" --> diganti dengan email adminstrator yang bertanggung jawab




Untuk mensetting environment sesuai dengan konfigurasi yang ada di /usr/local/src/openvpn-2.0.9/easy-rsa/vars, kita jalankan perintah:



root# source vars

NOTE: when you run ./clean-all, I will be doing a rm -rf on /usr/local/src/openvpn-2.0.9/easy-rsa/easy-rsa/keys




Selanjutnya kita akan membuat diffie-hellman key yang akan digunakan untuk enkripsi, autentikasi dan key exchange. Proses ini akan memakan waktu beberapa saat tergantung berapa bit enkripsi yang digunakan. Standardnya kita akan menggunakan 1024 bit enkripsi. Jika ingin menggunakan enkripsi yang lebih aman lagi bisa menggunakan enkripsi 2048. Bahkan jika kita cukup bersabar dalam proses ini, kita bisa menggunakan enkripsi 4098 bit.



root# cd /usr/local/src/openvpn-2.0.9/easy-rsa

root# ./build-dh

root# ./build-ca



Proses di atas akan menghasilkan file ca.crt, ca.key , dan file df1024.pem.

Pada saat proses perintah ./buil-ca kita akan diminta untuk mengisikan beberapa parameter seperti di bawah ini:




Generating a 1024 bit RSA private key

.++++++

...............................++++++

writing new private key to 'ca.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [ID]:

State or Province Name (full name) [Jateng]:

Locality Name (eg, city) [Semarang]:

Organization Name (eg, company) [VPN-Test]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) []:

Email Address [user@domain.com]:



Jika kita lihat, parameter defaultnya sama persis dengan yang sudah kita edit di dalam file /usr/local/src/openvpn/easy-rsa/vars. Setelah langkah-langkah di atas, sekarang kia bisa membuat certificate/key pair. Yang pertama akan kita buat adalah certificate untuk server yang kita beri nama VPN-Server: Oh, ya, sampai titik ini kita belum meninggalkan direktori /usr/local/src/openvpn-2.0.9/easy-rsa/. Jadi pastikan bahwa kita masih berada di direktori tersebut dengan perintah pwd. Jika belum, ganti segera ke direktori tersebut.



root# ./build-key-server VPN-Server

Generating a 1024 bit RSA private key

...........++++++

..................++++++

writing new private key to 'vpn-amanjiwo.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [ID]:

State or Province Name (full name) [Jateng]:

Locality Name (eg, city) [Semarang]:

Organization Name (eg, company) [VPN-Test]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) []:VPN-Server

Email Address [user@domain.com]:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Using configuration from /usr/local/src/openvpn-2.0.9/easy-rsa/openssl.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

countryName :PRINTABLE:'ID'

stateOrProvinceName :PRINTABLE:'Jateng'

localityName :PRINTABLE:'Semarang'

organizationName :PRINTABLE:'VPN-TEST'

commonName :PRINTABLE:'VPN-Server'

emailAddress :IA5STRING:'user@domain.com'

Certificate is to be certified until Oct 9 14:06:48 2019 GMT (3650 days)

Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated




Sedangkan untuk membuat certificate/key pair untuk client, menggunakan tool berbeda, misal kita beri nama dengan VPN-Client:



root# ./build-key VPN-Client

Generating a 1024 bit RSA private key

...........++++++

..................++++++

writing new private key to 'vpn-amanjiwo.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [ID]:

State or Province Name (full name) [Jateng]:

Locality Name (eg, city) [Semarang]:

Organization Name (eg, company) [VPN-N2C]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) []:vpn-amanjiwo

Email Address [wishnu@velo.net.id]:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Using configuration from /usr/local/src/openvpn-2.0.9/easy-rsa/openssl.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

countryName :PRINTABLE:'ID'

stateOrProvinceName :PRINTABLE:'Jateng'

localityName :PRINTABLE:'Semarang'

organizationName :PRINTABLE:'VPN-Test'

commonName :PRINTABLE:'VPN-Client'

emailAddress :IA5STRING:'user@domain.com'

Certificate is to be certified until Oct 9 14:06:48 2019 GMT (3650 days)

Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated




Pada pembuatan dua key di atas, kita perhatikan pada bagian commonName, di sini kita bisa berikan dua nama yang berbeda agar server bisa mengenali client yang mengautentikasi diri ke server. Jadi di sini kita menggunakan dua nama berbeda untuk server dan client. Sampai di sini kita sudah membuat semua key yang kita butuhkan untuk keperluan instalasi VPN. Lalu pindah semua key yang dibutuhkan ke direktori baru yang akan kita buat untuk mempermudah manajemen file.



root# mkdir -p /etc/openvpn/keys

root# cp /usr/local/src/openvpn-2.0.9/easy-rsa/keys/ca.crt /etc/openvpn/keys/ca.crt

root# cp /usr/local/src/openvpn-2.0.9/easy-rsa/keys/dh1024.pem /etc/openvpn/keys/dh1024.pem

root# cp /usr/local/src/openvpn-2.0.9/easy-rsa/keys/VPN-Server.crt /etc/openvpn/keys/VPN-Server.crt

root# cp /usr/local/src/openvpn-2.0.9/easy-rsa/keys/VPN-Server.key /etc/openvpn/keys/VPN-Server.key



Buat file konfigurasi untuk server dengan nama server.conf dan simpan di dalam direktori /etc/openvpn. Isi file konfigurasi tersebut seperti:



ifconfig 10.4.0.1 255.255.255.0

dev tap

tls-server

ifconfig-pool 10.4.0.100 10.4.0.120 255.255.255.0

mode server

max-clients 20

push "route 10.0.40.0 255.255.0.0 10.4.0.1"

keepalive 120 600

ca /etc/openvpn/keys/ca.crt

cert /etc/openvpn/keys/VPN-Server.crt

key /etc/openvpn/keys/VPN-Server.key

dh /etc/openvpn/keys/dh1024.pem




Pada konfigurasi di atas, ip address untuk tunnel VPN di sisi server adalah 10.4.0.1, sedangkan untuk client akan dialokasikan sebanyak 20 ip address mulai range 10.4.0.100 sampai dengan 10.4.0.120. Lalu client mengambil setting routing ke network 10.0.0.40/24 (network wireless - lihat gambar bagan di awal) sehingga clientbisa mengakses semua device di range ip address 10.0.40.0/24 melalui VPN server 11.22.33.44. Setelah itu jalankan daemon server OpenVPN agar berjalan di background process.



root# openvpn --config /etc/openvpn/server.conf &





INSTALASI CLIENT

Seperti yang disebutkan di awal, untuk client saya menggunakan laptop dengan OS Windows XP. Untuk instalasi OpenVPN209 GUI 1.0.3 cukup mudah. Cukup dengan mendownload file http://openvpn.se/files/install_packages/openvpn-2.0.9-gui-1.0.3-install.exe.

Setelah selesai instal program OpenVPN tersebut, download beberapa file yang dibutuhkan yang berada di server ke dalam direktori C:\Program Files\OpenVPN\config. File-file tersebut adalah:


* /usr/local/src/openvpn-2.0.9/easy-rsa/keys/VPN-Client.crt

* /usr/local/src/openvpn-2.0.9/easy-rsa/keys/VPN-Client.key

* /usr/local/src/openvpn-2.0.9/easy-rsa/keys/ca.crt

* /usr/local/src/openvpn-2.0.9/easy-rsa/keys/dh1024.pem


Kemudian buat file dengan nama client.ovpn dan simpan di C:\Program Files\OpenVPN\config. Isinya adalah sebagai berikut:



remote 11.22.33.44 1194

tls-client

pull

float

dev tap

resolv-retry infinite

nobind


dh "C:\\Program Files\\OpenVPN\\dh1024.pem"

ca "C:\\Program Files\\OpenVPN\\ca.crt"

cert "C:\\Program Files\\OpenVPN\\Client.crt"

key "C:\\Program Files\\OpenVPN\\Client.key"



11.22.33.44 pada konfigurasi di atas adalah ip address server VPN (lihat kembali bagan pada gambar di awal).

tls-client mendeklrasikan bahwa client ini akan mengautentikasi dengan menggunakan TLS.

pull konfigurasi ini akan mengambil semua konfigurasi yang dideklarasikan di server untuk client dengan opsi push.

float memperbolehkan partner VPN mengubah remote ip address.

dev tap di sini mendeklarasikan interface tunneling yang akan digunakan yaitu TAP.

resolv-retry parameter ini digunakan jika OpenVPN tidak berhasil meresolve nama domain, maka akan melakukan request ulang dalam sekian detik sesuai konfigurasinya. Pada konfigurasi ini kita setting untuk tidak terbatas dengan parameter infinite.

nobind memungkinkan client untuk menggunakan sembarang port (hanya untuk client).

Sebenarnya masih banyak parameter untuk konfigurasi client, tetapi nanti akan saya bahas kapan-kapan jika ada waktu luang.

Jalankan OpenVPN GUI dengan klick Start -> All Programs -> OpenVPN -> OpenVPN GUI :


Pada icon tray akan muncul icon OpenVPN seperti ini:


Lalu klik kanan pada icon tersebut dan pilih menu Connect, Jika berhasil, icon akan berubah berwarna hijau:






Sampai di sini jika tidak ada masalah, berarti instalasi server/client OpenVPN berhasil. Dan dari laptop saya bisa mengakses semua device yang ada di belakang server VPN seperti pada gambar bagan di awal. Untuk melihat hasilnya, kita bisa mengetikkan perintah ipconfig di console Windows XP untuk melihat interface TAP:


di sini nampak interface TAP mendapatkan ip address 10.4.0.100 yang diperoleh dari server. Lalu kita coba ping ip address server untuk koneksi VPN:



C:\Documents and Settings\godril>ping 10.4.0.1

Pinging 10.4.0.1 with 32 bytes of data:

Reply from 10.4.0.1: bytes=32 time=63ms TTL=64

Reply from 10.4.0.1: bytes=32 time=66ms TTL=64

Reply from 10.4.0.1: bytes=32 time=75ms TTL=64

Reply from 10.4.0.1: bytes=32 time=82ms TTL=64

Ping statistics for 10.4.0.1:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 63ms, Maximum = 82ms, Average = 71ms



Dan jika kita jalankan perintah route print pada console Windows XP, kita akan memperoleh routing table baru ke network 10.0.40.0/24 melalui gateway 10.4.0.1.




SELAMAT MENCOBA!
Diposting oleh Hadi Yudhitia

0 komentar: