1. Implementasi openVPN untuk Aplikasi Host-to-Host
Apr 21, 2007 Notes, Works
Cerita punya cerita, sebuah kantor yang koneksi internetnya lewat wireless ke netsolusi
membutuhkan konektifitas yang sangat stabil dengan downtime seminimal mungkin (hehehe
semuanya juga butuh kann..). Namun kondisi perinternetan Indonesia memang rada-rada
aneh dan terkadang menjadi batu sandungan bagi perusahaan-perusahaan yang mengandalkan
berkembangnya usaha mereka dengan memanfaatkan jalur internet.
PT. Davindo Pratama, demikian nama perusahaannya menjalankan usahanya dengan
melakukan koneksi host-to-host dengan provider pulsa handphone baik GSM maupun
CDMA. Aplikasi yang mereka gunakan adalah rabtronik dari RAB Indonesia, bagaimana
aplikasi ini bekerja saya kurang tahu persis, yang pasti traffic yang terjadi adalah paket-paket
XML informasi transaksi antara host davindo dengan beberapa host dealer pulsa (entah tepat
atau tidak istilahnya). Untuk melakukan komunikasi data, host davindo membutuhkan satu
buah IP Publik yang telah diregister dan dikenali oleh host milik dealer pulsa, yang tidak bisa
diubah dengan mudah.
Memberikan sebuah IP Publik bukan hal sulit, saya punya dua blok /29 dari ISP saya
lintaswave untuk dibagi-bagikan kepada yang membutuhkan. Namun permasalahan muncul
apabila terjadi masalah dengan wireless link yang ada antara host davindo dengan Gd. Cyber,
yang artinya, wireless link antara davindo dan netsolusi, netsolusi dan lintaswav, serta
lintaswave dan gd.cyber. Sebenarnya tidak menjadi masalah, karena SLA lintaswave masih
diangka 98% yang masih masuk hitungan baik dan bahkan lebih baik dari pada SLA
t****ms****y berdasarkan pengalaman davindo sendiri (sebelumnya mereka konek via
provider besar tersebut). Namun karena ada 3 hop yang mungkin putus/terganggu maka SLA
tidak bisa dipertahankan pada angka manis tersebut. Pernah terjadi kegagalan hardware yang
menyebabkan host davindo putus selama 4 jam (sebelum mereka konek ke netsolusi) dan
menyisakan kerugian secara material yang cukup besar (failed transaction) serta tentunya
kerugian imaterial (faktor trust dalam dunia bisnis).
2. Beberapa solusi pernah dicoba, salah satunya dengan berniat untuk melakukan collocation
host davindo di sebuah data center, yang katanya tidak berhasil karena host davindo
membutuhkan kondisi dengan sinyal gsm dan cdma dengan kualitas baik untuk menerima
permohonan transaksi yang masuk melalui kurang lebih 8 buah gsm dan cdma modem yang
tercolok di host davindo, hal ini tidak bisa mereka dapatkan di data center.
Solusi yang saya ajukan adalah dengan melakukan koneksi VPN dengan moda routing
sehingga kita bisa melakukan collocation, dan bahkan lebih baik lagi menyewa sebuah
account VPS dengan minimal 3 buah ip publik dan menggunakan sebuah IP Publik pada VPS
tersebut sebagai IP yang diregister ke host yang lain. Kemudian melakukan NAT any to any
dan push redirect gateway sehinggan host davindo hanya akan berada satu hop dibelakan IP
Publik tersebut baik terkoneksi melalui wireless, ataupun yang lain sebagai backup selama
melakukan koneksi melalui VPN Tunnel yang disediakan oleh VPN server di VPS Account.
Untuk VPS tentu saja pilihan jatuh kepada idVPS milik indika, karena saya sebelumnya
pernah menjadi pelanggan mereka dan tentu karena murah dan technical support yang dapat
diandalkan. Sementara untuk VPN pilihan jatuh kepada openVPN, tentunya open source dan
tidak terlalu sulit diimplementasikan untuk seseorang dengan pengerahuan linux pas-pasan
seperti saya.
OpenVPN diimplementasikan dengan moda routing (tun) dan push redirect gateway,
sehinggan host yang terkoneksi dengan openVPN akan menggunakan openVPN server
sebagai gateway. Konfigurasinya mudah, tinggal googling, salah satu panduan yang saya
pakai adalah blognya Mas Dicky untuk konfigurasi servernya dan wiki pada tektonik untuk
konfigurasi SNAT dan juga kemudian DNAT, karena VPS dengan XEN (milik idVPS) tidak
mensupport -t nat masquerade, dan secara default tidak mengkompile Module Driver TUN
pada kernelnya (hal ini diselesaikan dengan mudah setelah saya mengajukan permohonan
support ke idVPS — viva idVPS untuk fleksibilitas dan kehandalan supportnya).
Berikut ringkasan konfigurasi pada server..
instalasi openVPN pada debian..
# apt-get install openvpn
Bikin ssl nya dari direktori openvpn sample hasil instalasi pada debian
#cd /usr/share/doc/openvpn/examples/easy-rsa/
#export D=/etc/openvpn
#export KEY_CONFIG=$D/openssl.cnf
#export KEY_DIR=$D/keys
#export KEY_SIZE=1024
#export KEY_COUNTRY=ID
#export KEY_PROVINCE=”DKI Jakarta”
#export KEY_CITY=”Jakarta Timur”
#export KEY_ORG=”netsolusi”
#export KEY_EMAIL=”tajid.yakub@gmail.com”
#export KEY_COMMON=”xxx.idvps.com”
3. /usr/share/doc/openvpn/examples/easy-rsa# gunzip openssl.cnf.gz
/usr/share/doc/openvpn/examples/easy-rsa# cp openssl.cnf /etc/openvpn
#./clean-all
#./build-ca
#./build-key-server davindo
#./build-key davindo-client
#./build-dh
dan kemudian bikin konfigurasi servernya
#pico /etc/openvpn/davindo-vpn.conf
berikut isinya, gunakan ip publik untuk koneksi vpnnya, berbeda dengan ip publik yang akan
di nat any to any
port 1194
local 202.xx.xx.21
proto udp
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/davindo.crt
key /etc/openvpn/keys/davindo.key
dh /etc/openvpn/keys/dh1024.pem
server 10.10.10.0 255.255.255.0
persist-key
persist-tun
status openvpn-status.log
verb 2
dev tun
keepalive 10 120
comp-lzo
push “redirect-gateway”
push “dhcp-option DNS 10.10.10.1″
start openvpn server
#/etc/init.d/openvpn start
setelah distart akan muncul interface tun0
#ifconfig
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.1 P-t-P:10.10.10.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:3397 errors:0 dropped:0 overruns:0 frame:0
4. TX packets:3244 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:986676 (963.5 KiB) TX bytes:835539 (815.9 KiB)
Lakukan SNAT untuk “merubah” ip dari vpn client, dalam hal ini 10.10.10.x dan DNAT
untuk “merubah” permintaan ke ip 202.xx.xx.25 ke 10.10.10.x;
# iptables -t nat -s 10.10.10.x -A POSTROUTING -j SNAT –to 202.xx.xx.25
# iptables -t nat -A PREROUTING -d 202.xx.xx25 -j DNAT –to 10.10.10.x
openVPN server sudah berjalan dan mendengarkan permohonan koneksi dari vpnclient, ini
contoh koneksi dengan openVPN client di windowXP SP2, dengan key ca.crt, klien.crt, dan
klien.key yang telah dikopi ke komputer saya, dengan konfigurasi sebagai berikut;
client
dev tun
;dev-node MyTap
proto udp
remote xxx.idvps.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca carstenz-davindo-keyca.crt
cert carstenz-davindo-keydavindo-client.crt
key carstenz-davindo-keydavindo-client.key
comp-lzo
verb 3
;mute 20
Berikut hasil traceroute sebelum dan sesudah terkoneksi dengan vpn ;
C:Documents and SettingsTajid Yakub>tracert boleh.com
Tracing route to boleh.com [202.10.63.6]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms netsol.005.001.29.gw [172.16.5.1]
2 18 ms 3 ms 23 ms core.netsolusi.net [202.xx.xx.105]
3 14 ms 3 ms 4 ms morp.lintaswave.net.id [202.xx.xx.1]
4 6 ms 5 ms 4 ms 202.149.95.141
5 32 ms 6 ms 4 ms bolehnet.openixp.net [218.100.27.173]
6 5 ms 20 ms 7 ms 202.10.63.6
Trace complete.
Tracing route to boleh.com [202.10.63.6]
over a maximum of 30 hops:
5. 1 20 ms 7 ms 32 ms 10.10.10.1
2 22 ms 19 ms 7 ms gigabitethernet1-edge187.idvps.com [202.87.187.1]
3 5 ms 23 ms 7 ms bolehnet.openixp.net [218.100.27.173]
4 9 ms 19 ms 21 ms 202.10.63.6
Trace complete.
6. 1 20 ms 7 ms 32 ms 10.10.10.1
2 22 ms 19 ms 7 ms gigabitethernet1-edge187.idvps.com [202.87.187.1]
3 5 ms 23 ms 7 ms bolehnet.openixp.net [218.100.27.173]
4 9 ms 19 ms 21 ms 202.10.63.6
Trace complete.