Akses Intranet dengan OpenVPN

Latar Belakang. 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 masingmasing 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/openvpn2.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/easyrsa/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/VPNServer.crt root# cp /usr/local/src/openvpn-2.0.9/easy-rsa/keys/VPN-Server.key /etc/openvpn/keys/VPNServer.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! Reff:

Sign up to vote on this title
UsefulNot useful