Mengatasi Masalah Default ARP Policer di Router Juniper

Perangkat Juniper memiliki default ARP policer yang secara otomatis akan membuang (drop) paket request maupun response ARP jika melampaui batas 150kbps. Secara default, ini adalah aggregate policer yang berlaku untuk semua interface. Kondisi ini dapat memicu perilaku tidak terduga, di mana tingginya trafik ARP pada satu interface dapat menyebabkan terputusnya sesi BGP di interface lain. Anda tidak dapat mengubah limit default ini, tetapi Anda bisa membuat policer baru dengan limit yang lebih tinggi.

Masalah: Sesi IPv4 BGP Flapping

Saat menginvestigasi masalah yang dilaporkan oleh salah satu Transit provider, ditemukan bahwa sesi IPv4 BGP kami dengan mereka mengalami flap sekitar sehari sekali. Padahal, status interfacenya stabil dan sesi IPv6 tetap menyala (up). Satu site tertentu mengalami hal ini lebih sering daripada yang lain. Meskipun site-site tersebut menggunakan platform yang berbeda, semuanya menjalankan versi sistem operasi (code version) yang sama.

Hal yang menarik terlihat pada log. Terdapat pesan yang menyatakan bahwa kami menerima notifikasi: NOTIFICATION received from 192.0.2.188 (External AS 64498): code 4 (Hold Timer Expired Error). Syslog tersebut juga memuat informasi hold timer 30s, hold timer remain 0s, last sent 2s. Artinya, router kami merasa sudah mengirim pesan KEEPALIVE secara rutin, tetapi sisi remote menganggap sudah terlalu banyak pesan yang terlewat.

Setelah dicek lebih detail, sesi BGP flap ini juga terjadi pada neighbor lain, termasuk sesi iBGP. Jelas bahwa ini bukan masalah pada satu interface spesifik, perangkat vendor lain, atau kesalahan konfigurasi biasa.

Apa yang Sebenarnya Terjadi?

Router kami terhubung ke sebuah IXP (Internet Exchange Point) yang memiliki subnet berukuran besar dengan banyak peer. Hal ini menghasilkan trafik ARP dalam jumlah yang sangat besar.

Secara default, router Juniper membatasi (police) trafik ARP hingga 150kbps. Semua trafik ARP di atas batas tersebut akan dibuang. Fakta krusialnya: policer ini tidak bekerja per-interface, melainkan per-PFE (Packet Forwarding Engine).

Ketika router menerima trafik ARP yang sangat tinggi dari interface yang mengarah ke IXP, policer mulai bekerja membatasi trafik. Link Transit yang kami gunakan ternyata berada di PFE yang sama. Saat periode pembatasan (policing) terjadi, trafik ARP di interface transit ikut terkena imbasnya. Router kami tidak bisa mendapatkan ARP response untuk IP upstream provider, sehingga gagal mengirim pesan keepalive. Pihak upstream mendeteksi hilangnya keepalive ini, mengirimkan notifikasi kepada kami, dan akhirnya sesi BGP di-reset. Setelah sesi terputus, entri ARP berhasil didapatkan kembali dan sesi BGP pun dengan cepat kembali up.

Karena IPv6 menggunakan Neighbor Discovery (ND) dan bukan ARP, sesi IPv6 sama sekali tidak terpengaruh.

Mendeteksi ARP Policing

Ada beberapa cara untuk mengecek apakah masalah ini yang sedang menimpa router Anda:

Cek aggregate policer untuk melihat apakah limit sudah terpicu:

[email protected]> show policer __default_arp_policer__
Policers:
Name                                                Bytes              Packets
__default_arp_policer__                           3091706                67211

{master}
[email protected]>

Untuk melihat FPC mana yang terdampak (Khusus Juniper dengan tipe Chasis, MX204 hanya punya 1 FPC), Anda perlu masuk lebih dalam melalui shell:

{master}
[email protected]> start shell pfe network fpc2


NGMPC platform (1200Mhz QorIQ P2020 processor, 3584MB memory, 512KB flash)

NGMPC2(mx.lab.net vty)# show filter index 17000 counters
Filter Counters/Policers:
   Index               Packets                 Bytes  Name
--------  --------------------  --------------------  --------
   17000                 67186                        __default_arp_policer__

NGMPC2(mx.lab.net vty)#

Catatan: Masalah ini tidak menghasilkan pesan syslog terkait ARP policing karena ia menggunakan framework yang berbeda dengan fitur DDoS Protection.

Mengubah Limit ARP

Batas 150kbps untuk trafik ARP sangatlah kecil untuk sebuah router dengan banyak interface di subnet yang besar. Anda kemungkinan besar harus mengubah limit ini.

Karena Anda tidak bisa mengubah limit default tersebut secara langsung, ada dua pilihan yang bisa dilakukan:

  1. Buat ARP policer baru dan aplikasikan ke interface yang “sibuk” (yang memiliki trafik ARP tinggi). Policer ini hanya akan berlaku untuk interface tersebut, sementara interface lainnya tetap menggunakan default 150kbps.
  2. Buat ARP policer baru dan aplikasikan ke interface-interface penting lainnya. Biarkan interface yang “sibuk” tetap menggunakan default bucket.

Konfigurasinya sangat sederhana. Pertama, buat policer baru (contoh limit 1 Mbps):

set firewall policer arp_limit if-exceeding bandwidth-limit 1m
set firewall policer arp_limit if-exceeding burst-size-limit 1m
set firewall policer arp_limit then discard

Kemudian aplikasikan policer tersebut ke interface (misal: ae1):

set interfaces ae1 unit 0 family inet policer arp arp_limit

Monitoring Policer Baru

Anda bisa memantau hasilnya menggunakan perintah show policer. Jika Anda mengaplikasikan policer baru ke lebih dari satu interface, Anda akan melihat entri untuk masing-masing interface:

[email protected]> show policer ?
Possible completions:
  <[Enter]>            Execute this command
  <policer>            Policer name
  __auto_policer_template_1__
  __auto_policer_template_2__
  __auto_policer_template_3__
  __auto_policer_template_4__
  __auto_policer_template_5__
  __auto_policer_template_6__
  __auto_policer_template_7__
  __auto_policer_template_8__
  __auto_policer_template__
  __default_arp_policer__
  arp_limit-ae1.0-inet-arp
  arp_limit-xe-1/0/1.0-inet-arp
  detail               Show filter statistics with enhanced policer statistics
  logical-system       Name of logical system, or 'all'
  |                    Pipe through a command
{master}
[email protected]> show policer arp_limit-ae1.0-inet-arp
Policers:
Name                                                Bytes              Packets
arp_limit-ae1.0-inet-arp                                0                    0

{master}
[email protected]>

Pada output di atas, terlihat bahwa policer arp_limit telah berhasil diaplikasikan dan berjalan pada interface ae1 dan xe-1/0/1.0.

Atau jika ingin melihat semua statistik policer

udin@MX204> show policer 
Policers:
Name                                                Bytes              Packets
__default_arp_policer__                                 0                    0
__LS-IXP/arp_limit-ae1.12-inet-arp             49096328              1066520
__LS-IXP/arp_limit-ae1.13-inet-arp                    0                    0
__LS-IXP/arp_limit-ae1.14-inet-arp          24507706540            531555026
__LS-IXP/arp_limit-ae1.15-inet-arp            411915324              8816192
__LS-IXP/arp_limit-ae1.16-inet-arp              5265624               114237
__LS-IXP/arp_limit-ae1.17-inet-arp                    0                    0
__LS-IXP/arp_limit-ae1.18-inet-arp            363079102              7855477

Semoga catatan ini bermanfaat bagi siapa saja yang sedang mencari solusi untuk masalah sesi BGP atau BFD yang sering mengalami flapping.

Sumber/referensi:
https://lkhill.com/juniper-arp-policer/