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!
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:
Posting Komentar