Anda di halaman 1dari 16

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 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!
Reff: