OpenIKED, IPsec, dan Konfigurasi
halo teman-teman bsd, di blog ini saya ingin menjelaskan tentang OpenIKED, tapi pertama saya ingin menjelaskan secara singkat apa itu IPsec dan OpenIKED. Lalu kenapa kita mau menggunakannya, dan cara menyambungkannya dari linux, khususnya Arch 😉
Apa itu OpenIKED?
OpenIKED (Open IKE Daemon) adalah daemon native OpenBSD yang digunakan untuk membangun koneksi VPN menggunakan protokol IPsec.
Apa itu IPsec?
IPsec (Internet Protocol Security) itu adalah protokol yang mengamankan komunikasi di layer jaringan (layer 3). Ohiya layer 3 untuk OSI Model ya (network), bukan layer 3 TCP/IP (Transport). Pasti beberapa dari kalian bertanya, ‘Apa itu OSI Model?’, ‘Apa itu TCP/IP?’. Tapi saya tidak akan membahasnya disini karena akan menjadi terlalu panjang. Nanti di akhir saya akan berikan beberapa referensi berupa video 😉
Kenapa kita menggunakan OpenIKED?
Berikut beberapa kelebihan dari OpenIKED selama saya memakainya :
- Aman
- Native OpenBSD
- Konfigurasi simpel
- Minim resource
oke, langsung saja saya demonstrasikan cara menggunakan OpenIKED-nya OpenBSD 🐡
- command yang diawali
$
adalah user biasa - command yang diawali
#
adalah root - dan yang saya maksud teman itu adalah anda. jadi biar kelihatan akrab 😁
1. Konfigurasi /etc/iked.conf
Buat file /etc/iked.conf
lalu kita isi seperti ini:
server_kita = "104.28.226.248"
vpn_id = "vpn.temanbsd.web.id"
client_pool = "10.0.5.0/24"
client_dns = "104.28.226.248"
user "USERNAME_KITA" "PASSWORD_KITA"
ikev2 'user_vpn' passive esp \
from any to dynamic \
local $server_kita peer any \
srcid $vpn_id \
eap "mschap-v2" \
config address $client_pool \
config name-server $client_dns \
tag "ROADW"
oke saya jelaskan dulu apa yang ada di config ini. IP server_kita
hanyalah contoh, teman harus mengganti ini dengan IP ini dengan IP publik server teman. begitu juga dengan vpn_id
, arahkan vpn_id
ke domain teman yang memiliki IP publik server_kita
. client_pool
ini adalah IP local yang akan diberikan ke client teman/anda (pengguna vpn). boleh diganti ke rentang IP local lain, misalnya 192.168.*
. “USERNAME_KITA” dan “PASSWORD_KITA” silahkan teman ganti sesuai selera 😋, ini akan digunakan untuk autentikasi EAP. selebihnya akan saya jelaskan sambil lanjut ke tahap berikutnya 😉
2. Konfigurasi Packet Filter
Iked memerlukan packet filter untuk redirect dan NAT, Ini adalah step yang penting, jangan sampai ada kesalahan atau teman bisa terkunci dari server sendiri (berdasarkan pengalaman 💀)
Oke langsung saja edit dan tambahkan line ini /etc/pf.conf
:
ext_if = "wlan0"
pass in inet proto udp to port {isakmp, ipsec-nat-t} tag IKED
pass in inet proto esp tag IKED
pass on enc0 inet tagged ROADW
match out on $ext_if inet tagged ROADW nat-to $ext_if
match in quick on enc0 inet proto { tcp, udp } to port 53 rdr-to 127.0.0.1 port 53
variabel ext_if
silahkan diganti dengan external interface teman yang memiliki IP publik untuk vpn. teman bisa mengeceknya dengan ip addr
atau ifconfig
. oke saya jelaskan dulu ya apa isi config packet filter kita 🤓. isakmp
, dan ipsec-nat-t
adalah alias dari port 500 dan 4500 (port dasar untuk protocol IPsec). jadi kita akan mengizinkan paket UDP masuk ke port tersebut. lalu esp tag IKED
adalah protokol vpn dan kita berikan tag IKED
.
pass on
itu mengizinkan keluar dan masuknya paket 😳. enc0
adalah virtual interface nya OpenBSD, dan ROADW adalah tag kita yang ada di konfigurasi /etc/iked.conf
kita tadi. match out on $ext_if inet tagged ROADW nat-to $ext_if
nah, ini penting. kita melakukan NAT disini. jadi paket yang punya tag ROADW
akan ditranslasikan agar koneksinya kayak keliatan dari server kita.
match in quick on enc0 inet proto { tcp, udp } to port 53 rdr-to 127.0.0.1 port 53
lalu ini juga penting, jadi kita akan rdr (redirect) paket yang ber-protokol tcp dan udp ke server kita dengan port 53 (DNS). jadi nanti kita saya bakal kasih tau juga cara setup DNS Resolver teman sendiri. mantap kan? 😋
oke sekarang aktifkan
# pfctl -f /etc/pf.conf
# pfctl -e
3. Membuat sertifikat vpn
Kita buat dulu sertifikat nya sebagai autentikasi saat menyambungkan vpn kita nanti. karena akan dipakai oleh strongswan. Jalankan ini di terminal
# ikectl ca vpn create
# ikectl ca vpn install
certificate for CA 'vpn' installed into /etc/iked/ca/ca.crt
CRL for CA 'vpn' installed to /etc/iked/crls/ca.crl
# ikectl ca vpn certificate vpn.temanbsd.web.id create
# ikectl ca vpn certificate vpn.temanbsd.web.id install
writing RSA key
oke mantap, sekarang kita berhasil membuat sertifikatnya dengan algoritma RSA.
4. Pindahkan sertifikatnya ke client
Sekarang kita akan mengambil sertifikatnya dari sisi client, jadi siapkan linux teman dan package scp
. kita pindah dulu CA (sertifkatnya) agar bisa diambil dengan mudah
# cp /etc/iked/ca/ca.rct /home/ryusuke/
# chown ryusuke:ryusuke /home/ryusuke/ca.crt
lalu /home/<username>
dan <username>:<group>
nya silahkan diganti dengan username teman. lalu kita ambil sertifikatnya dari sisi client kita yaitu akadanar
akadanar@client:~$ scp ryusuke@temanbsd.web.id:ca.crt .
oke sekarang sertifikatnya sudah ada di tangan akadanar 😄. ohiya saya lupa, kita setup dulu DNS Resolver kita dengan unbound.
5. Konfigurasi unbound
Konfigurasi unbound cukup mudah, kita tinggal edit /etc/resolv.conf
lalu edit agar seperti ini
nameserver 127.0.0.1
lookup file bind
sip jadi sekarang kita menggunakan 127.0.0.1
atau server kita sendiri untuk DNS Query. lalu lookup file bind
itu adalah urutan lookup/pencarian hostnya, jadi yang nanti akan dicari mulai dari file
dulu, yaitu /etc/hosts
. Lalu ke bind
, yaitu 127.0.0.1
dari DNS resolver kita.
oke sip, lalu di /var/unbound/etc/unbound.conf
tambahkan seperti ini:
outgoing-interface: 104.28.226.247
access-control: 10.0.0.0/8 allow
accent-control: 10.0.5.0/24 allow
sudah, gampang kan? 🤓, jadi nanti unbound akan mengizinkan request pencarian dari 10.0.0.0
dengan subnet /8
dan 10.0.5.0
dengan subnet /24
karena kita menggunakan IP lokal ini untuk client kita.
6. Aktifkan IP forwarding dan ESP (enkripsi IPsec)
kita bisa mengaktifkan IP forwarding di server dengan command ini:
# sysctl net.inet.ip.forwarding=1
# sysctl net.inet6.ip6.forwarding=1
# sysctl net.inet.ipcomp.enable=1
# sysctl net.inet.esp.enable=1
# sysctl net.inet.ah.enable=1
lalu kita tambahkan ke /etc/sysctl.conf
:
$ echo 'net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
net.inet.ipcomp.enable=1
net.inet.esp.enable=1
net.inet.ah.enable=1' | doas tee -a /etc/sysctl.conf
oke langkah terakhir ini opsional tap sangat disarankan, kita ubah permisson /etc/iked.conf
agar hanya bisa write(w): 2 + read(r): 4 = 6 (0600)
0 untuk nonaktifkan bit khusus, 6 untuk root, dan 0 untuk group dan user. oke ayo kita ubah, jalankan ini di terminal
# chmod 0600 /etc/iked.conf
# rcctl enable iked
# rcctl start iked
Anjay, VPN dengan protokol IPsec kita udah aktif! 😎 Oke lanjut ke cara aktifkannya di Linux desktop yang modern.
Menyambugkan koneksi IPsec dari client
karena sekarang desktop modern menggunakan NetworkManager. kita install dulu plugin untuk strongSwan (digunakan untuk koneksi IPsec).
1. Install networkmanager-strongswan
NOTE: nama package bisa berbeda di setiap distro
akadanar@client:~$ sudo pacman -S networkmanager-strongswan
akadanar@client:~$ yay -S nm-connection-editor
nm-connection-editor adalah settings berbasis GUI untuk Arch Linux
2. Buka NetworkManager settings dengan GUI
kenapa pakai GUI? ga elit dong 😏
Jawabannya adalah, Mempermudah hidup 😂
oke mungkin masing GUI kita berbeda, tapi tujuan nya tetap sama, harusnya tidak terlalu beda jauh 😉
buka setting nya lalu klik ikon tambah +
atau bagaimana teman menambahkan koneksi di GUI teman lalu pilih tipe IPsec/IKEv2 (strongswan):
lalu kita create dan masukkan dengan sesuai
Penjelasan :
-
Connection name nya sesuai selera 😁
-
Address nya adalah
vpn_id
kita tadi
vpn_id = “vpn.temanbsd.web.id”
- Certificate nya tadi kita download di
/home/<username-client>
atau~
akadanar@client:~$ scp ryusuke@temanbsd.web.id:ca.crt .
- kita pakai autentikasi EAP dengan username dan password yang tadi dimasukkan di
/etc/iked.conf
hiraukan username dan password yang di gambar, itu cuma contoh 😁
user “USERNAME_KITA” “PASSWORD_KITA” ikev2 ‘user_vpn’ passive esp \
-
Ceklis
Request an inner IP address
danEnforce UDP encapsulation
-
Save connectionnya
3. Menyambungkan dengan nmtui
Disini saya akan menyambungkannya dengan nmtui
, tapi jika teman punya cara lain untuk menyambungkannya, silahkan dicoba.
akadanar@client:~$ nmtui
lalu Activate a connection
> VPN -> <connection name yang teman masukkan>
> activate
dengan ini koneksi ke IPsec harusnya berhasil. untuk mengeceknya, silahkan buka web https://whatismyipaddress.com/ atau dengan menjalankan curl -4 ifconfig.me
di terminal. Jika IP nya sudah berubah menjadi IP server teman, maka selamat!, koneksinya berhasil! Jika tidak coba Troubleshooting
Troubleshooting
Tidak ada IPv4
Jikalau teman tidak mendapatkan IPv4, kemungkinan besar masalahnya ada di pf.conf
coba periksa baik-baik apakah ada kesalahan di pf.conf
# vim /etc/pf.conf
cek juga settingan NetworkManager apakah Request an inner IP address
telah diceklis
DNS_PROBE Error di browser
Kalau teman mendapatkan error seperti ini di browser, kemungkinan besar masalahnya ada di unbound
coba periksa apakah unbound
sudah allow (accept) koneksi dari IP lokal client yang telah diberikan
lalu cek juga virtual interface dengan tcpdump
:
# tcpdump -i enc0
Jika muncul refused berarti antara /etc/pf.conf
tidak pass in port 53
atau miskonfigurasi dari unbound
.
Iked verbose
Untuk membuat troubleshooting lebih mudah, alangkah baiknya menjalankan Iked dengan flag -v
(verbose) dan -d
(no daemonize). Matikan dulu service nya jika berjalan, lalu jalankan Iked dengan flag -dv
# rcctl -d
# iked -dv
Referensi lain
Terimakasih teman-teman telah membaca!, saya mohon maaf jika terdapat kesalahan di penulisan saya. Jika teman ingin improve halaman atau ikut berkontribusi di temanbsd, silahkan hubungi kami