Selain Openvpn, salah satu protocol VPN yang cukup populer digunakan adalah IKEV2 IPSEC. IKEV2 menggunakan basic dari IPSEC VPN. Beberapa device seperti Iphone dan Mac sudah menyediakan protocol VPN ini secara native di menu setting. Begitu juga dengan windows 10 dan windows 11 yang sudah native ada di menu setting VPN. Kita tidak perlu install aplikasi tambahan lagi seperti Openvpn.
Dukungan operating system ini membuat IKEV2 VPN cukup populer digunakan dan mudah untuk settingnya. Tidak perlu download file config, cukup input username dan password saja untuk connect. IKEV2 VPN juga compatible untuk penggunakan mobile device karena latency koneksinya yang rendah sehingga saat switch koneksi dari Wifi ke Mobile data hampir tanpa jeda. Secara security IKEV2 VPN juga cukup strong.
Dibalik kelebihan IKEV2 ada beberapa kelemahan dari IKEV2 ini. Penggunakan port di IKEV2 secara default menggunakan port UDP 4500 dan UDP 500 untuk proses key exchangenya. Default port ini tidak bisa dirubah ke port lain seperti pada openvpn. Hal ini membuat IKEV2 VPN sangat mudah untuk diblock.
Persiapan Server
Pada tutorial ini saya menggunakan Virtual Private Server dengan OS Linux Ubuntu 20.04. Bila menggunakan VPS pastikan menggunakan VPS minimal KVM dan tidak menggunakan NAT IP. VPS Openvz tidak support untuk IKEV2.
Domain name
Di sini saya menggunakan domain name dan free SSL dengan Lets Encrypt. Tujuan penggunakan domain ini agar proses authentication tidak perlu menggunakan private key di masing-masing client tetapi cukup menggunakan CA certificate dan private key dari SSL.
Berikut langkah untuk konfigurasi IKEV2 VPN server
- Update package linux dengan command sudo apt update
- Upgrade package dengan command sudo apt upgrade
- Install package storngswan apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
- install package certbot untuk free SSL apt install certbot
- Di sini saya akan menggunakan UFW sebagai firewall manager menggantikan iptables. jalan command sudo ufw allow 80,22,443/tcp. Command ini untuk allow port 80, 433 karena proses certbot menggunakan 2 port tersebut. sementara port 22 digunakan untuk SSH
- Selanjutnya jalankan command sudo ufw enable. command ini untuk mengaktifkan UFW sebagai Firewall Manager
SSL Certificate
Sebelum proses ini perlu dilakukan pointing domain name dengan IP Address dari server VPS. tutorial pointing domain silahkan mengikuti masing-masing provider domain.
- Jalan command certbot certonly –standalone –preferred-challenges http –agree-tos –email admin@domain.com -d vpn.domain.com. Silahkan ganti domain.com dan email sesuai domain yang akan digunakan
- File certificate ada di folder etc/letsencrypt/live/vpn.domain.com/
- Copy certificate tersebut ke folder IPSEC sehingga ipsec akan menggunakan certificate tersebut. berikut command yang digunakan.
– sudo ln -s /etc/letsencrypt/live/vpn.domain.com/chain.pem /etc/ipsec.d/cacerts/ca.pem
– sudo ln -s /etc/letsencrypt/live/vpn.domain.com/cert.pem /etc/ipsec.d/certs/certificate.pem
– sudo ln -s /etc/letsencrypt/live/vpn.domain.com/privkey.pem /etc/ipsec.d/private/key.pem
Konfigurasi IPSEC
Pada part ini kita akan melakukan konfigurasi untuk ipsec vpn menggunakan strongswan package.
- edit file config dengan command sudo nano /etc/ipsec.conf. copy script berikut
config setup
charondebug=”ike 1, knl 1, cfg 1″
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@vpn.domain.com #diganti dengan domain yang digunakan
leftcert=/etc/letsencrypt/live/vpn.domain.com/fullchain.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24 #private IP yang akan digunakan
rightdns=8.8.8.8
rightsendcert=never
eap_identity=%identity
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024,aes256-sha2_256-modp2048!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1,aes256-sha2_256-modp2048!
2. Konfigurasi IPSEC Secret. ini digunakan untuk konfigurasi authentication, pada tutorial ini menggunakan authentication RSA dengan certificate lets encrypt yang kita buat tadi. jalan commad berikut sudo nano /etc/ipsec.secrets
# This file holds shared secrets or RSA private keys for authentication.
# RSA private key for this host, authenticating it to any other host
# which knows the public part.
vpn.domain.com : RSA /etc/letsencrypt/live/vpn.domain.com/privkey.pem
user1 %any% : EAP “passworduser1”
user2 %any% : EAP “passworduser2”
silahkan sesuaikan dengan domain yang digunakan. sesuaikan nama user dan password yang akan digunakan. untuk password menggunakan tanda “
3. Selanjutnya kita perlu disable AppArmor Profile. step ini untuk allow penggunakan private key letsencrypt di Ipsec. jalan command berikut
- ln -s /etc/apparmor.d/usr.lib.ipsec.charon /etc/apparmor.d/disable/
- ln -s /etc/apparmor.d/usr.lib.ipsec.stroke /etc/apparmor.d/disable/
- apparmor_parser -R /etc/apparmor.d/usr.lib.ipsec.charon
- apparmor_parser -R /etc/apparmor.d/usr.lib.ipsec.stroke
4. Jalankan command berikut untuk restart ulang ipsec dengan konfigurasi yang baru kita buat. sudo systemctl restart ipsec lalu sudo ipsec rereadsecrets
Konfigurasi Firewall
selanjutnya kita akan melakukan konfigurasi ulang untuk firewallnya. Tujuannya untuk allow traffic dari ipsec.
- Jalan command sudo ufw allow 500,4500/UDP. command ini untuk allow port 500 dan 4500 yang digunakan Ipsec untuk proses authentication dan key exchange
- kita perlu menggunakan network interface yang digunakan di server. jalan command sudo ip route show default. akan muncul interface yang digunakan biasanya namanya eth0, ens3, enps10, dll tergantung dari konfigursi virtual server yang digunakan
- edit rules firewall dengan command sudo nano /etc/ufw/before.rules. tambahkan baris berikut di atas baris. *filter
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy –pol ipsec –dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADECOMMIT
*mangle
-A FORWARD –match policy –pol ipsec –dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp –tcp-flags SYN,RST SYN -m tcpmss –mss 1361:1536 -j TCPMSS –set-mss 1360
COMMIT
silahkan disesuaikan untuk interface eth0 sesuai info dari step 2
tambahkan baris berikut di bawah baris *filter
-A ufw-before-forward –match policy –pol ipsec –dir in –proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward –match policy –pol ipsec –dir out –proto esp -d 10.10.10.0/24 -j ACCEPT
4. Selanjutnya kita aktifkan untuk port forwarding dengan command berikut sudo nano /etc/ufw/sysctl.conf. edit baris berikut, pastikan tidak ada tanda # didepan baris
net/ipv4/ip_forward=1
Edit atau tambahkan baris berikut di akhir script
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
5. Restart konfigurasi firewall dengan command berikut systemctl restart ufw
Cara koneksi VPN
- Pilih VPN Protocol IKEV2
- Remote Address atau server diisikan domain yang digunakan
- masukan username dan password yang didaftarkan pada /etc/ipsec.secrets