BGP Routing Filter di MikroTik mengalami perombakan arsitektur yang signifikan antara RouterOS v6 (berbasis parameter/kolom) dan RouterOS v7 (berbasis scripting logic).

Cheat sheet ini dirancang untuk Network Engineer sebagai referensi cepat saat melakukan Traffic Engineering di edge router ISP atau Enterprise.

Best Practice Pendekatan Modular (ROS v7): Disarankan untuk memecah rule baris-demi-baris dengan nama chain yang sama. Tujuannya: Agar lebih modular, tidak rumit saat dibaca di Winbox, dan Anda bisa dengan mudah mendisable/enable (Tanda X) satu spesifik prefix tanpa merusak logika keseluruhan.

Di RouterOS v7, penulisan routing filter sangat mirip dengan sintaks C-style. Berikut adalah daftar shortcut dan parameter yang paling sering digunakan untuk Traffic Engineering:

1. Aksi Dasar (Actions)

  • Terima Rute: accept;
  • Buang Rute: reject;
  • Lompat ke Chain Lain: jump <nama-chain>; (Sangat berguna untuk modularitas)

2. Manipulasi Atribut BGP

  • AS-Path Prepend: set bgp-path-prepend <angka>; (Contoh: set bgp-path-prepend 3;)
  • Local Preference: set bgp-local-pref <angka>; (Contoh: set bgp-local-pref 200;)
  • Weight (Lokal MikroTik): set bgp-weight <angka>;
  • MED (Multi-Exit Discriminator): set bgp-med <angka>;
  • Mengatur BGP Community: set bgp-communities <ASN>:<Value>; (Contoh: set bgp-communities 65000:100;)
  • Menghapus semua Community: set bgp-communities "";

3. Kondisi Pencocokan Jaringan (Matching Network)

  • Sama Persis (Exact Match): if (dst == 203.0.113.0/24) { ... }
  • Berada di Dalam Subnet (Include): if (dst in 203.0.113.0/24) { ... } (Mencakup /24 hingga /32 di dalamnya)
  • Membatasi Panjang Prefix: if (dst.len == 24) { ... } atau if (dst.len in 24-26) { ... }
  • Kombinasi (Deaggregation): if (dst in 203.0.113.0/20 && dst.len == 24) { ... }

4. Operator Logika (Logical Operators)

  • Dan (AND): && (Contoh: dst in 10.0.0.0/8 && dst.len == 24)
  • Atau (OR): || (Contoh: dst == 1.1.1.1/32 || dst == 8.8.8.8/32)
  • Tidak (NOT): ! (Contoh: if (!dst in 10.0.0.0/8) { accept; })

5. Pencocokan BGP Atribut (Matching BGP Attributes)

  • AS-Path Regex (Mencari ASN tertentu): if (bgp-as-path ~ "65000") { ... }
  • Community Regex: if (bgp-communities ~ 24001:24001) { ... }
  • Berdasarkan Origin (IGP/EGP/Incomplete): if (bgp-origin == "igp") { ... }

Tip ROS v7: Selalu pastikan Anda meletakkan tanda titik koma ; setelah setiap aksi, dan jangan lupa menutup blok kondisi dengan accept; atau reject;!

Iklan

Kesalahan Umum di ROS v7 (Wajib Dihindari)

Berdasarkan troubleshooting di lapangan, hindari beberapa logic flaw berikut saat membuat rule:

  1. Lupa menambahkan accept; di dalam blok if: Contoh Salah: if (dst == 203.0.113.0/24) { set bgp-path-prepend 4; } Rule di atas akan menambahkan prepend, tapi router akan lanjut membaca rule ke bawahnya (fall-through) dan bisa saja berakhir di-drop. Selalu akhiri dengan accept; di dalam kurung kurawal.
  2. Menggunakan Local-Preference di filter OUT (eBGP): Contoh Salah (ke Upstream): if (dst == 203.0.113.0/24) { set bgp-local-pref 4; accept; } Atribut Local Preference tidak dikirim ke ASN tetangga (eBGP). Untuk mengatur jalur download dari upstream, selalu gunakan AS-Path Prepend.
  3. Menggunakan accept; kosong di baris paling bawah filter OUT: Ini sangat berbahaya! Semua rute di dalam router Anda (termasuk rute pelanggan lain / transit) akan bocor (Route Leak) ke Upstream. Selalu tutup filter OUT dengan reject;.
  4. Meng-announce /32 ke Upstream Umum: Sintaks if (dst == 203.0.113.75) { accept; } berarti Anda mengirim prefix /32. Upstream global akan membuang rute ini (maksimal /24). Kecuali, ini digunakan khusus untuk BGP Blackhole / Mitigasi DDoS (biasanya wajib ditambahkan BGP Community tertentu dari upstream).

SECTION 1: RouterOS v7

(Catatan: IP yang digunakan di bawah adalah IP Publik Contoh / RFC 5737)

1. Template Chain Modular (Action Blocks)

Anda bisa membuat chain khusus yang isinya hanya aksi.

/routing filter rule
# Contoh Chain Aksi Standar
add chain=prepend-2x rule="set bgp-path-prepend 2; accept;"
add chain=prepend-4x rule="set bgp-path-prepend 4; accept;"
add chain=weight-100 rule="set bgp-weight 100; accept;"

2. Skenario: Load Balance & Failover 2 Prefix (/29)

Tujuan: Prefix 203.0.113.0/29 utama ke Upstream A. Prefix 198.51.100.0/29 utama ke Upstream B. Pendekatan di bawah dipisah per baris agar mudah dikelola (di-klik silang/disable) di UI Winbox.

/routing filter rule
# --- KE UPSTREAM A (OUT) ---
add chain=OUT-UPSTREAM-A rule="if (dst == 203.0.113.0/29) { accept; }" comment="Jalur Utama Pfx 1"
add chain=OUT-UPSTREAM-A rule="if (dst == 198.51.100.0/29) { set bgp-path-prepend 3; accept; }" comment="Jalur Backup Pfx 2"
add chain=OUT-UPSTREAM-A rule="reject;" comment="Batas Aman (Cegah Leak)"
# --- KE UPSTREAM B (OUT) ---
add chain=OUT-UPSTREAM-B rule="if (dst == 198.51.100.0/29) { accept; }" comment="Jalur Utama Pfx 2"
add chain=OUT-UPSTREAM-B rule="if (dst == 203.0.113.0/29) { set bgp-path-prepend 3; accept; }" comment="Jalur Backup Pfx 1"
add chain=OUT-UPSTREAM-B rule="reject;" comment="Batas Aman (Cegah Leak)"

3. Skenario: Deaggregation & Specific Reroute

Tujuan: Memecah blok /20, namun me-reroute spesifik blok /24 (misal 203.0.113.0/24) ke Upstream B, serta memberikan contoh fitur BGP Blackhole /32 untuk satu IP yang sedang di-DDoS (203.0.113.75).

/routing filter rule
# --- KE UPSTREAM A (Jalur Umum Utama) ---
# Mitigasi DDoS: IP /32 ini kita prepend panjang agar trafik tidak masuk dari jalur ini
add chain=OUT-UPSTREAM-A rule="if (dst == 203.0.113.75) { set bgp-path-prepend 4; accept; }" comment="Prepend IP DDoS"
# Blok /24 ini diset prepend karena jalur utamanya mau dipindah ke Upstream B
add chain=OUT-UPSTREAM-A rule="if (dst == 203.0.113.0/24) { set bgp-path-prepend 3; accept; }" comment="Reroute Pfx ke B"
# Sisanya izinkan deagg /24 berjalan normal tanpa prepend
add chain=OUT-UPSTREAM-A rule="if (dst in 203.0.112.0/20 && dst.len == 24) { accept; }" comment="Allow sisa /24"
add chain=OUT-UPSTREAM-A rule="reject;" comment="Drop sisanya"
# --- KE UPSTREAM B (Jalur Khusus Reroute / Blackhole) ---
# Mitigasi DDoS: Blackhole IP /32 (Kirim community blackhole sesuai ketentuan upstream, misal 65000:666)
add chain=OUT-UPSTREAM-B rule="if (dst == 203.0.113.75) { set bgp-communities 65000:666; accept; }" comment="Blackhole IP DDoS"
# Jalur utama untuk Reroute /24
add chain=OUT-UPSTREAM-B rule="if (dst == 203.0.113.0/24) { accept; }" comment="Utama Reroute Pfx"
# (Opsional) Upstream B jadi backup untuk sisa trafik /20
add chain=OUT-UPSTREAM-B rule="if (dst in 203.0.112.0/20 && dst.len == 24) { set bgp-path-prepend 3; accept; }" comment="Backup sisa /24"
add chain=OUT-UPSTREAM-B rule="reject;" comment="Drop sisanya"

4. Filter Keamanan Esensial (Inbound)

Filter yang menjaga agar rute sampah dan Bogon tidak masuk ke tabel routing kita. Dipisah baris per baris.

/routing filter rule
# 1. DROP BOGON & IP PRIVATE
add chain=IN-PEER rule="if (dst in 10.0.0.0/8) { reject; }"
add chain=IN-PEER rule="if (dst in 172.16.0.0/12) { reject; }"
add chain=IN-PEER rule="if (dst in 192.168.0.0/16) { reject; }"
add chain=IN-PEER rule="if (dst in 100.64.0.0/10) { reject; }"

# 2. DEFAULT ROUTE (Pilih salah satu)
add chain=IN-PEER rule="if (dst == 0.0.0.0/0) { accept; }" comment="Terima Default Route"
# add chain=IN-PEER rule="if (dst == 0.0.0.0/0) { reject; }" comment="Tolak Default Route (IXP)"

# 3. MENGATUR LOCAL PREF (Upload) DARI UPSTREAM INI
add chain=IN-PEER rule="set bgp-local-pref 200; accept;"

SECTION 2: RouterOS v6 (Legacy CLI)

Infrastruktur legacy ROS v6 logikanya pada dasarnya sudah modular baris per baris.

1. Load Balance & Failover 2 Prefix (/29)

/routing filter
# --- KE UPSTREAM A ---
add chain=OUT-UPSTREAM-A prefix=203.0.113.0/29 action=accept
add chain=OUT-UPSTREAM-A prefix=198.51.100.0/29 action=accept set-bgp-prepend=3
add chain=OUT-UPSTREAM-A action=discard

# --- KE UPSTREAM B ---
add chain=OUT-UPSTREAM-B prefix=198.51.100.0/29 action=accept
add chain=OUT-UPSTREAM-B prefix=203.0.113.0/29 action=accept set-bgp-prepend=3
add chain=OUT-UPSTREAM-B action=discard

# --- SET LOCAL PREF (UPLOAD/INBOUND) ---
add chain=IN-UPSTREAM-A action=accept set-bgp-local-pref=200
add chain=IN-UPSTREAM-B action=accept set-bgp-local-pref=100