Kalau dua kantor harus terhubung seperti satu jaringan, tapi jalurnya lewat internet umum, IPsec adalah salah satu cara paling tua dan paling banyak dipakai. Materi ini membahas konsepnya dulu, lalu praktik site-to-site dengan RouterOS.
π― Tujuan
Setelah membaca dan mempraktikkan materi ini, kamu diharapkan bisa:
- Menjelaskan **kenapa** dua lokasi butuh tunnel, bukan sekadar buka port ke internet.
- Membedakan **peer**, **identity**, **proposal**, dan **policy** β empat hal yang paling sering tertukar.
- Membangun tunnel **IPsec site-to-site IKEv2** memakai pre-shared key di dua router MikroTik.
- Membaca status tunnel: `active-peers`, `policy`, `installed-sa`, dan `statistics`.
- Membedakan gejala "phase 1 gagal" dan "phase 2 gagal" saat troubleshooting.
π‘ Tips: kuasai dulu urutan berpikirnya β *lawan bicara siapa β bukti identitasnya apa β algoritma apa yang disepakati β trafik mana yang masuk tunnel*. Kalau urutan ini hafal, konfigurasi IPsec jadi tidak terasa rumit.
π Konteks nyata
Bayangkan kamu mengirim dokumen rahasia antar kantor. Kalau dokumen ditaruh di atas meja terbuka dan dititipkan lewat kurir biasa, siapa pun di jalan bisa membaca isinya.
IPsec bekerja seperti **kurir bersegel**: dokumen asli dimasukkan ke amplop terkunci, lalu amplop itu diberi alamat baru. Kurir di jalan hanya melihat amplop dan alamat barunya β bukan isi surat, bukan alamat asli kantor.
π₯ Kasus nyata: sebuah SMK punya gedung utama dan blok workshop terpisah jalan. Aplikasi absensi di blok workshop harus membaca database siswa di server gedung utama. Solusi awalnya: port MySQL `3306` dibuka ke internet dan dibatasi "hanya IP sekolah". Dua minggu kemudian log server dipenuhi ribuan percobaan login dari IP asing β IP sekolah mudah dipalsukan dan berubah-ubah. Kepala sekolah meminta data siswa tidak lagi bisa dijangkau langsung dari internet. Solusinya IPsec site-to-site: port `3306` ditutup total, aplikasi tetap jalan karena trafiknya masuk lewat tunnel yang terenkripsi.
Yang perlu dipahami: IPsec **bukan** pengganti login aplikasi. IPsec hanya memastikan "paket ini benar datang dari router lawan dan tidak bisa dibaca di jalan". Hak akses user tetap diatur di aplikasi.
π§ Konsep singkat
IPsec adalah kumpulan protokol, bukan satu protokol tunggal. Tiga bagian besarnya:
- **IKE** β negosiasi kunci dan autentikasi kedua router.
- **ESP** β yang benar-benar mengenkripsi dan mengautentikasi data.
- **AH** β hanya autentikasi, tanpa enkripsi. Jarang dipakai karena tidak menyembunyikan isi.
Untuk tunnel antar jaringan, yang kita pakai hampir selalu **IKE + ESP mode tunnel**.
πΉ Dua fase yang wajib dibedakan
IPsec membangun tunnel dalam dua tahap. Ini penting karena 80% troubleshooting berhenti di "fase berapa yang gagal".
| Fase | Nama | Tugas | Yang harus cocok di kedua sisi | |---|---|---|---| | 1 | IKE SA | Autentikasi kedua router, sepakati algoritma | Metode auth, PSK/kunci, DH group, enkripsi, hash, exchange mode | | 2 | IPsec SA | Buat terowongan untuk data | Protokol (ESP), mode tunnel, PFS group, lifetime, selector alamat |
π Angka penting: default di RouterOS β profile `lifetime=1d`, `dpd-interval=8s`, `dpd-maximum-failures=4`; proposal `lifetime=30m`, `pfs-group=modp1024`. Default bukan berarti salah, tapi harus **sama** di kedua sisi kalau ingin tunnel stabil.
Kalau fase 1 gagal, `active-peers` akan kosong. Kalau fase 1 berhasil tapi fase 2 gagal, peer muncul dengan `ph2-total=0` dan policy berstatus `no-phase2`.
πΉ Empat bahan wajib, satu per satu
Pemula sering mengisi menu IPsec secara acak. Padahal urutannya logis:
- **Proposal** β daftar bahasa yang sama-sama bisa dipakai (enkripsi, hash, lifetime).
- **Profile** β aturan negosiasi fase 1 (DH group, enkripsi, hash, DPD).
- **Peer** β alamat lawan bicara. Ini "rumah tujuan", bukan isi paketnya.
- **Identity** β bukti identitas lawan (PSK atau sertifikat) yang terikat ke peer.
- **Policy** β daftar trafik yang WAJIB masuk tunnel: dari subnet mana ke subnet mana.
Analogi sederhananya: *peer* adalah alamat gudang tujuan, *identity* adalah cap dan tanda tangan yang dikenali, *proposal* adalah daftar bahasa yang disepakati, dan *policy* adalah manifes barang apa saja yang boleh dikirim lewat jalur khusus.
β οΈ Hati-hati: satu policy hanya berlaku **satu arah**. Kalau kamu hanya membuat policy `A β B`, paket dari A bisa masuk tunnel, tapi balasannya dari B tidak. Gejalanya khas: ping dari A terlihat "request timeout", padahal di B terlihat request masuk.
πΉ Kenapa butuh NAT bypass
Ini jebakan nomor satu setelah policy satu arah. Urutan pemrosesan paket keluar di RouterOS: NAT (`srcnat`) diproses **sebelum** paket dienkripsi IPsec.
Artinya, kalau aturan `masquerade` mengenai trafik antar-LAN, alamat sumber asli `10.1.203.10` berubah jadi IP WAN publik. Policy IPsec yang mencari `10.1.203.0/24` tidak lagi cocok, dan paket keluar tanpa enkripsi β atau dibuang.
Solusinya satu aturan pendek: **kecualikan** trafik antar-LAN dari NAT, letakkan di atas aturan masquerade.
πΉ Tunnel mode vs transport mode
- **Tunnel mode** membungkus seluruh paket IP asli dengan header IP baru. Inilah yang dipakai untuk menghubungkan dua jaringan.
- **Transport mode** hanya melindungi payload, header IP asli tetap terlihat. Cocok untuk host-ke-host, bukan network-ke-network.
π Angka penting: untuk site-to-site, pastikan `tunnel=yes` di policy. Kalau lupa, IPsec akan menolak memproses paket yang alamat asalnya bukan alamat peer itu sendiri.
π§© Istilah penting
- **IPsec** β rangkaian protokol untuk mengamankan paket IP (IKE, ESP, AH).
- **IKE** β Internet Key Exchange, protokol negosiasi kunci dan autentikasi.
- **IKEv2** β versi kedua IKE, lebih ringkas dan lebih tahan terhadap perubahan jaringan. Di RouterOS: `exchange-mode=ike2`.
- **SA (Security Association)** β "kontrak" satu arah antara dua peer. Satu tunnel punya beberapa SA.
- **ESP** β Encapsulating Security Payload, bagian yang mengenkripsi data.
- **PSK** β Pre-Shared Key, password panjang yang sama di kedua sisi.
- **NAT-T** β NAT Traversal, membungkus ESP ke dalam UDP `4500` agar bisa melewati NAT.
- **DPD** β Dead Peer Detection, pendeteksi lawan yang sudah tidak hidup.
- **PFS** β Perfect Forward Secrecy. Kunci baru per fase 2, sehingga bocornya satu kunci tidak membuka semua sesi lama.
- **Traffic selector** β pasangan `src-address`/`dst-address` di policy, penentu trafik mana yang masuk tunnel.
π§ Praktik: IPsec site-to-site IKEv2
Lab ini memakai dua router dan rentang alamat dokumentasi (RFC 5737) supaya aman dan tidak bentrok dengan jaringan asli.
| Perangkat | WAN | LAN | |---|---|---| | Kantor A | `192.0.2.10/24` | `10.1.203.0/24` | | Kantor B | `198.51.100.10/24` | `10.1.102.0/24` |
Router A memakai gateway `192.0.2.1`, router B memakai `198.51.100.1`. Keduanya sudah bisa saling ping ke IP WAN.
πΉ Langkah 1: pastikan waktu dan koneksi dasar
IPsec sangat sensitif terhadap selisih waktu. Dokumentasi MikroTik menyebut eksplisit: kalau kedua ujung tidak sinkron waktu, tunnel akan putus dan harus dibangun ulang.
/system ntp client
set enabled=yes servers=pool.ntp.org
/system ntp client print
Pastikan status `synced=yes`. Lalu uji dasar:
/ping 198.51.100.10 count=3
π‘ Tips: jangan lanjut kalau ping WAN belum stabil. IPsec tidak akan pernah "menyembuhkan" routing yang belum benar.
πΉ Langkah 2: buat proposal dan profile
Di **Kantor A**:
/ip ipsec profile
add name=profil-psk dh-group=modp2048 enc-algorithm=aes-256 \
hash-algorithm=sha256 lifetime=1d
/ip ipsec proposal
add name=prop-aes256 enc-algorithms=aes-256-cbc auth-algorithms=sha256 \
lifetime=30m pfs-group=modp2048
Di **Kantor B**, isi persis sama. Nama boleh berbeda, **isinya** yang harus cocok.
π Angka penting: `modp2048` (DH group 14) adalah titik seimbang antara keamanan dan beban CPU. Group 19 (ECP 256) lebih cepat dan disarankan dokumentasi untuk perangkat modern; group 2 (1024-bit) sebaiknya ditinggalkan.
πΉ Langkah 3: daftarkan peer
Di **Kantor A**:
/ip ipsec peer
add name=peer-ke-b address=198.51.100.10 exchange-mode=ike2 profile=profil-psk
Di **Kantor B**:
/ip ipsec peer
add name=peer-ke-a address=192.0.2.10 exchange-mode=ike2 profile=profil-psk
`address` adalah alamat lawan yang dipakai saat negosiasi fase 1. Kalau lawan punya IP dinamis, kamu perlu pendekatan lain (bukan cakupan materi ini).
πΉ Langkah 4: isi identity (PSK)
Di **Kantor A**:
/ip ipsec identity
add peer=peer-ke-b auth-method=pre-shared-key secret="GantiDenganKunciPanjang32Karakter"
Di **Kantor B**, `peer=peer-ke-a` dengan `secret` yang **sama persis**.
β οΈ Hati-hati: PSK harus identik karakter per karakter. Spasi di ujung, huruf besar-kecil, atau tanda kutip yang ikut tersimpan adalah penyebab umum fase 1 gagal. Dokumentasi MikroTik juga mengingatkan PSK rentan terhadap serangan *offline* β untuk produksi, sertifikat digital lebih disarankan.
πΉ Langkah 5: buat policy dua arah
Di **Kantor A**:
/ip ipsec policy
add peer=peer-ke-b src-address=10.1.203.0/24 dst-address=10.1.102.0/24 \
proposal=prop-aes256 tunnel=yes action=encrypt level=require \
comment="A ke B"
add peer=peer-ke-b src-address=10.1.102.0/24 dst-address=10.1.203.0/24 \
proposal=prop-aes256 tunnel=yes action=encrypt level=require \
comment="B ke A"
Buat dua policy yang sama di **Kantor B**, dengan `peer=peer-ke-a`.
Policy dibaca **dari atas ke bawah** seperti firewall. Taruh policy yang paling spesifik di atas. Jangan hapus entri default bertanda `*` dengan `template=yes` β itu bukan policy trafik, itu template sistem.
πΉ Langkah 6: kecualikan trafik tunnel dari NAT
Di **Kantor A**:
/ip firewall nat
add chain=srcnat action=accept place-before=0 \
src-address=10.1.203.0/24 dst-address=10.1.102.0/24 \
comment="bypass NAT untuk trafik tunnel"
Di **Kantor B**, tukar arah `src-address`/`dst-address`-nya.
π§ͺ Uji cepat: `/ip firewall nat print` β aturan bypass harus berada **di atas** aturan `masquerade`. Kalau di bawah, paket sudah terlanjur di-NAT dan tunnel tidak akan pernah membawa data.
πΉ Langkah 7: izinkan IKE dan ESP di firewall
/ip firewall filter
add chain=input action=accept protocol=udp dst-port=500,4500 \
src-address=198.51.100.10 comment="IKE + NAT-T dari Kantor B"
add chain=input action=accept protocol=ipsec-esp \
src-address=198.51.100.10 comment="ESP dari Kantor B"
Di Kantor B, `src-address` diganti `192.0.2.10`.
π Angka penting: UDP `500` untuk negosiasi IKE, UDP `4500` untuk ESP yang dibungkus NAT-T, dan protokol IP `50` untuk ESP polos. Membuka `500` saja sering cukup untuk fase 1, tetapi data tetap gagal kalau ESP diblok.
πΉ Langkah 8: uji tunnel dan trafik
/ip ipsec active-peers print
/ip ipsec policy print
/ip ipsec installed-sa print
/ip ipsec statistics print
Yang dicari:
- `active-peers` menampilkan state `established` dengan `ph2-total` minimal 2.
- `policy print` memberi flag `A` (active) dan `ph2-state=established`.
- `installed-sa` berisi entri ESP dengan `state=mature`.
Uji trafik nyata:
/ping 10.1.102.1 src-address=10.1.203.1 count=5
Tanpa `src-address`, ping dari router bisa memakai alamat WAN dan tidak cocok dengan policy β hasilnya "gagal" padahal tunnel sehat.
πΉ Langkah 9: versi Winbox
Kalau lebih nyaman memakai GUI:
- Buka **IP β IPsec β Profiles**, buat `profil-psk`.
- Masuk **Proposals**, buat `prop-aes256`.
- Masuk **Peers**, isi `Address`, pilih `Exchange Mode = ike2`, pilih profile.
- Masuk **Identities**, pilih peer, `Auth Method = pre-shared key`, isi secret.
- Masuk **Policies**, tambahkan dua entri berlawanan arah, centang `Tunnel`.
- Buka **IP β Firewall β NAT**, taruh rule `accept` di atas masquerade.
- Buka **IP β Firewall β Filter**, izinkan UDP `500,4500` dan `ipsec-esp`.
- Cek tab **Active Peers** dan **Installed SA**.
πΉ Langkah 10: bersih-bersih lab
Setelah selesai, hapus agar tidak mengganggu praktik berikutnya:
/ip ipsec active-peers kill-connections
/ip ipsec policy remove [find comment~"ke B"]
/ip ipsec policy remove [find comment~"ke A"]
/ip ipsec identity remove [find peer=peer-ke-b]
/ip ipsec peer remove [find name=peer-ke-b]
/ip firewall nat remove [find comment~"bypass NAT"]
/ip firewall filter remove [find comment~"Kantor B"]
Lakukan hal yang sama di router B, lalu simpan konfigurasi bersih dengan `/export file=lab-ipsec-bersih`.
π Dipakai di dunia kerja
- **Sekolah:** dua gedung terpisah jalan, server absensi/CBT hanya boleh diakses dari lab internal β IPsec menghilangkan kebutuhan membuka port database ke internet.
- **Kantor cabang:** aplikasi ERP di kantor pusat dibuka dari cabang tanpa VPN publik berbayar; tunnel menjaga data gaji dan pelanggan tetap tertutup di jalur internet biasa.
- **Industri/manufaktur:** data mesin dan PLC di plant dikirim ke server monitoring pusat, sementara akses vendor luar dibatasi hanya ke subnet tertentu lewat policy.
- **ISP dan NOC:** perangkat pelanggan korporat dipantau dari jaringan internal operator tanpa mengekspos alamat manajemen ke internet.
- **Klinik dan rumah sakit:** rekam medis elektronik harus tetap di jaringan internal, sementara cabang tetap bisa mengisi data pasien β IPsec membantu memenuhi tuntutan kerahasiaan data.
- **Kantor pemerintahan/desa:** layanan publik di kecamatan terhubung ke server kabupaten, dengan trafik yang bisa diaudit dan dienkripsi.
β Verifikasi
Jalankan berurutan, jangan langsung ke ping:
| Pemeriksaan | Perintah | Hasil yang diharapkan | |---|---|---| | Fase 1 hidup | `/ip ipsec active-peers print` | `state=established`, `uptime` bertambah | | Fase 2 hidup | `/ip ipsec policy print` | flag `A`, `ph2-state=established` | | SA terpasang | `/ip ipsec installed-sa print` | ada entri ESP `state=mature` | | Ada error? | `/ip ipsec statistics print` | `in-no-policies` dan `in-template-mismatches` tidak naik | | Trafik nyata | `/ping 10.1.102.1 src-address=10.1.203.1` | reply konsisten, 0% loss | | NAT tidak menelan | `/ip firewall nat print stats` | counter rule bypass bertambah |
π§ͺ Uji cepat: reset statistik dulu (`/ip ipsec statistics reset`), lalu ping 5 paket, lalu lihat lagi. Kalau `in-no-policies` naik, masalahnya di selector policy, bukan di enkripsi.
β οΈ Kesalahan umum & troubleshooting
| Gejala | Kemungkinan penyebab | Perbaikan | |---|---|---| | `active-peers` kosong | PSK beda, proposal beda, UDP 500 diblok | Samakan secret dan algoritma; cek firewall input | | Peer `established` tapi `ph2-total=0` | Policy tidak cocok, PFS group beda, `tunnel=no` | Samakan `src/dst`, `pfs-group`, set `tunnel=yes` | | Ping satu arah timeout | Policy balik belum dibuat | Tambah policy arah sebaliknya di kedua router | | Tunnel aktif, client tetap gagal | `masquerade` menelan trafik sebelum IPsec | Tambah rule `action=accept` di atas masquerade | | `in-no-policies` terus naik | SA masuk tapi tidak ada policy yang cocok | Periksa `sa-src-address`/`sa-dst-address` dan selector | | `in-template-mismatches` naik | Template policy tidak cocok (biasanya mode-config) | Cek `policy-template-group` dan `generate-policy` | | Tunnel putus tiap beberapa jam | Waktu tidak sinkron | Aktifkan NTP client di kedua sisi | | Fase 1 gagal saat di belakang NAT | `my-id` mengirim IP privat, lawan mengharapkan IP publik | Set `my-id` dan `remote-id` eksplisit | | Throughput kecil, ping besar gagal | MTU/fragmentasi | Turunkan MTU tunnel atau pakai MSS clamp |
β οΈ Hati-hati: kalau muncul `policy` dengan flag `I` (invalid), biasanya ada dua policy dengan `src-address`/`dst-address` yang sama. Hapus duplikatnya, jangan menambah policy baru di atasnya.
π Catatan keamanan & etika
- **PSK hanya untuk lab.** Dokumentasi MikroTik menyatakan PSK rentan terhadap serangan *offline*; untuk produksi gunakan sertifikat digital.
- **Batasi sumber IKE.** Jangan biarkan UDP `500/4500` terbuka dari seluruh internet. Batasi `src-address` ke IP peer yang dikenal.
- **Jangan pakai PSK pendek.** Minimal 32 karakter acak. PSK pendek bisa dipecahkan dari capture handshake.
- **IPsec bukan kontrol akses user.** Tunnel memberi akses jaringan, bukan hak aplikasi. Tetap pakai login, role, dan audit di aplikasinya.
- **Perhatikan data pribadi.** Trafik yang lewat tunnel tetap berisi data siswa/pasien. Enkripsi melindungi di jalan, bukan dari admin yang punya akses sah.
- **Etika praktik.** Semua pengujian dilakukan di lab sendiri atau perangkat yang kamu miliki izin. Memindai atau mencoba membangun tunnel ke perangkat orang lain adalah pelanggaran.
π Kesimpulan
IPsec terasa rumit karena empat menu harus saling nyambung: peer, identity, proposal, dan policy. Kalau urutannya dipahami, konfigurasinya justru pendek.
Tiga hal yang paling menentukan berhasil tidaknya tunnel:
- **Dua policy berlawanan arah**, karena satu policy hanya satu arah.
- **NAT bypass di atas masquerade**, karena NAT diproses sebelum enkripsi.
- **Waktu yang sinkron**, karena IPsec sangat sensitif terhadap selisih jam.
Langkah berikutnya: coba buat satu tunnel yang sengaja dirusak β ganti PSK di satu sisi, atau hapus satu policy β lalu baca sendiri gejala di `active-peers` dan `policy`. Kemampuan membaca gejala inilah yang membedakan orang yang "hafal command" dengan orang yang benar-benar paham.
π Materi terkait
- Mikrotik : VPN WireGuard Site-to-Site β alternatif VPN modern yang lebih ringan untuk kasus serupa.
- Mikrotik : Praktikum Uji WireGuard Site-to-Site β contoh pola uji dan fault injection yang bisa diadaptasi untuk IPsec.
- Mikrotik : Firewall Filter Dasar β dasar mengizinkan UDP `500/4500` dan `ipsec-esp` dengan aman.
- Mikrotik : NAT Masquerade agar Client Bisa Internet β memahami urutan NAT sebelum menambah bypass.
- Mikrotik : Static Route Dasar β routing antar-LAN yang harus beres sebelum tunnel dibangun.
- Mikrotik : Tabel Routing dan Manajemen Rute di RouterOS v7 β membaca tabel rute saat trafik tunnel tidak kembali.
- Mikrotik : Praktikum Cek Firewall Filter dengan Counter dan Log β memantau paket IKE/ESP yang jatuh di firewall.
π Referensi
- MikroTik RouterOS Documentation β IPsec: https://help.mikrotik.com/docs/spaces/ROS/pages/11993097/IPsec
- MikroTik RouterOS Manual β IPsec: https://manual.mikrotik.com/docs/virtual-private-networks/ipsec/
- IETF RFC 4301 β Security Architecture for IP
- IETF RFC 4303 β Encapsulating Security Payload (ESP)
- IETF RFC 7296 β Internet Key Exchange Protocol Version 2 (IKEv2)
- IETF RFC 5737 β IPv4 Address Blocks Reserved for Documentation