Implementasi openVPN untuk Aplikasi Host-to-Host

April 21, 2007

backup-host-small.jpg

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).

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”

/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
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-key\\ca.crt
cert carstenz-davindo-key\\davindo-client.crt
key carstenz-davindo-key\\davindo-client.key
comp-lzo
verb 3
;mute 20

Berikut hasil traceroute sebelum dan sesudah terkoneksi dengan vpn ;

C:\Documents and Settings\Tajid 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:

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.

12 Responses

  1. hye,,, mo nanya nie,,, (boleh khan???)
    gini, aq dah selese konfigurasi VPN seperti yg km buat
    saat di START-kan, client ma server na dah OK. Tp waktu di ifconfig, tun0 pada client ga muncul, tp klo pada server udah.
    kira2 masalah na apa ya?
    makasi ya sebelum na…
    =FEBY=

  2. @feby, clientnya pake OS dan software apa, kalau pada contoh ini kan saya menggunakan winM$ ..

  3. openvpn bs utk koneksi full duplex 2 ip address private tdk?
    yg 1 via gprs, yg 1 internet
    thanks

  4. hY..
    hY..
    aq mO nanya niY..
    pLz bgD..
    hmm.
    cara IMPLEMENTASI INTERKONEKSI PC/DOS KE HOST MENGGUNAKAN PROTOKOL TCP/IP…
    cara terbagustnya lah..
    n ajarin juga cara prakteknya dari mana ke mana…
    hmm..
    plz bgt..
    bls ajah ke emaiL aq..
    thankz yia..

  5. kalo yang beginian error-nya gimana:

    TLS State Error: No TLS state for client 192.168.1.116:2588, opcode=4
    Feb 11 16:24:35 frontx openvpn[10606]: GET INST BY REAL: 1

  6. Done, coba pake versi 2.0

  7. mas, terimakasih tutorialnya,cukup jelas. saya berhasil bikin koneksi vpn dari client xp ke server linux debian..
    hasilnya :
    - di ethernet interface, gatewaynya yg seharusnya 192.168.1.1 menghilang, dns server tetap 192.168.1.1,
    -sedangkan di TAP interface muncul ip address 10.10.10.6, gateway 10.10.10.5, dns 10.10.10.1, subnet mask 255.255.255.252.

    saya bisa ping ke 10.10.10.1 (linux server), cuma kok kenapa gatewaynya 10.10.10.5 ??? saya ga bisa
    ping ke 10.10.10.5. Gimana caranya bikin koneksi openvpn yg otomatis supaya mirip dengan vpn default (PPTP) pada windows xp, jadi pas browsing ip addressnya di whatismyip.com otomatis berubah…

    Sejauh ini saya baru bisa SSH aja ke server linux saya, baik lewat 10.10.10.1 atau ip address langsung 216.XXX.XXX.XXX…cuma koneksi openvpn ini blum bisa buat internet/tunnell…

  8. @udin, itu terbuat emulasi blok /30 sehingga gatewaynya menjadi 10.10.10.5, ini hanya emulasi soalnya ada kelemahan di windowsnya dalam kaitannya dengan openVPN. Kalau mau bisa internetan setupnya di Linuxnya mas, tinggal dinyalakan ip forward dan di masquerade, dan pastikan bagian;
    push “redirect-gateway”
    push “dhcp-option DNS 10.10.10.1″
    jadi untuk DNS nya diganti aja dengan DNS yang valid dan bisa digunakan (karena bisa jadi juga masalahnya di DNS). Goodluck ya…

  9. mantab mas inponya….
    tapi tetep aja belum paham2 nih….hihihihihih
    Pak kabar mas tadjid, jarang OL skrng….

  10. heheh baik mas faul, jarang ol memang karena ganti Yahoo ID mas, add saya ya .. tajid.yakub[di]yahoo.com

  11. Nanya nih bro,
    Kalo buat Windows XP ke debian/linux settingnya sama tidak ? terus, apa bedanya sih openvpn dengan pptp ? apa opnvpn bisa melewati proxy ?

    ~makasih buat jawabannya

  12. Bro itu contohnya dari Windows XP ke Debian kok, openVPN dan pptp beda protokol, openVPN tidak menggunakan GRE, seharusnya tidak ada masalah dengan proxy (tapi ya tergantung setingan proxynya juga)

Leave a Reply