1. Pengenalan BGP
BGP (Border Gateway Protocol) adalah protokol routing yang menghubungkan Autonomous System (AS) di internet. BGP adalah protokol yang digunakan oleh ISP untuk saling bertukar routing information dan menentukan jalur terbaik untuk mengirim data antar jaringan di seluruh dunia.
BGP disebut juga sebagai "protokol yang menahan internet bersama." Tanpa BGP, ISP tidak bisa saling berkomunikasi dan internet seperti yang kita kenal tidak akan ada.
Pelanggan lokal
IX Indonesia (IIX)
Pelanggan lokal
1.1 BGP vs IGP (OSPF, RIP)
| Fitur | BGP (EGP) | OSPF/RIP (IGP) |
|---|---|---|
| Tipe | Exterior Gateway Protocol | Interior Gateway Protocol |
| Cakupan | Antar AS (antar ISP) | Dalam satu AS |
| Metric | Path attributes kompleks | Cost / hop count |
| Transport | TCP port 179 | Bervariasi |
| Convergence | Relatif lambat | Cepat |
| Skala | 900,000+ routes (full table) | Ribuan routes |
| Algoritma | Path Vector | Link State / Distance Vector |
2. AS Numbering
Setiap organisasi yang ingin terhubung langsung ke internet backbone membutuhkan Autonomous System Number (ASN). ASN adalah nomor unik global yang mengidentifikasi setiap AS di internet.
2.1 Jenis ASN
| Jenis | Rentang | Keterangan |
|---|---|---|
| 16-bit (2-byte) | 1 - 65535 | ASN tradisional, 64512-65534 private |
| 32-bit (4-byte) | 65536 - 4294967295 | ASN baru, diperlukan karena exhaustion |
| Private ASN | 64512-65534 (16-bit) | Untuk internal, tidak boleh di-announce ke internet |
| Private ASN | 4200000000-4294967294 | Private 32-bit range |
2.2 Cara Mendapatkan ASN
- APNIC (untuk Asia Pasifik, termasuk Indonesia) — www.apnic.net
- Daftar sebagai anggota APNIC atau melalui NIR (National Internet Registry) — di Indonesia yaitu IDNIC
- Ajukan permohonan ASN dengan justifikasi teknis
- Biaya: tergantung ukuran alokasi, mulai dari USD 1,156/tahun
- Proses: 2-4 minggu setelah dokumen lengkap
Jangan pernah meng-announce private ASN (64512-65534) ke jaringan publik internet. Private ASN hanya untuk penggunaan internal — misalnya untuk iBGP atau lab testing.
3. BGP Peering
BGP peering adalah hubungan antara dua router BGP yang saling bertukar routing information. Ada dua jenis peering utama: eBGP (antar AS) dan iBGP (dalam satu AS).
3.1 eBGP vs iBGP
| Fitur | eBGP | iBGP |
|---|---|---|
| Scope | Antar AS berbeda | Dalam satu AS |
| TTL | 1 (directly connected) | 255 |
| Next-hop | Diubah ke peer address | Tidak diubah |
| AS_PATH | Ditambahkan AS lokal | Tidak diubah |
| Full mesh | Tidak perlu | Perlu (atau gunakan route reflector) |
3.2 Jenis-jenis Peering
- Transit: Membeli akses ke seluruh internet (full table) dari upstream ISP. Biasanya berbayar.
- Peering (Settlement-Free): Saling bertukar traffic tanpa biaya. Umum di IXP (Internet Exchange Point).
- Paid Peering: Peering dengan biaya, biasanya dengan ISP yang lebih besar.
- Customer: Pelanggan yang membeli transit dari Anda. Anda meng-announce route mereka.
4. Path Selection Algorithm
BGP memilih jalur terbaik berdasarkan serangkaian path attributes. Urutan prioritas berikut adalah urutan standar yang digunakan oleh kebanyakan implementasi BGP:
4.1 BGP Best Path Selection
- Highest Weight — Cisco-specific, tidak ada di MikroTik (gunakan routing-mark)
- Highest Local Preference (LOCAL_PREF) — Prefensi route dalam AS (default 100)
- Locally Originated — Route yang di-announce dari router ini
— Jalur dengan AS_PATH terpendek - Lowest Origin Type — IGP < EGP < Incomplete
- Lowest MED — Multi-Exit Discriminator dari neighbor AS
- eBGP over iBGP — eBGP lebih diprioritaskan
- Lowest IGP Metric — Metric terendah ke next-hop
- Oldest Route — Route yang sudah ada lebih lama
- Lowest Router ID — Router ID terkecil
MikroTik RouterOS mendukung sebagian besar BGP path attributes. Untuk memanipulasi path selection, gunakan routing filter untuk mengubah local-pref, MED, atau prepend AS_PATH.
5. Route Filtering
Route filtering adalah praktik wajib pada setiap koneksi BGP. Tanpa filter, router Anda bisa menerima atau meng-announce route yang tidak seharusnya, menyebabkan masalah routing global.
5.1 Filter yang Harus Diterapkan
# Filter INBOUND: Terima hanya prefix yang valid dari peer
/routing filter add \
chain=BGP-IN \
prefix=0.0.0.0/0 \
prefix-length=0-32 \
rule="if (dst in 10.0.0.0/8 || dst in 172.16.0.0/12 || dst in 192.168.0.0/16) { reject }"
# Filter: Tolak prefix terlalu kecil (> /24 untuk IPv4)
/routing filter add \
chain=BGP-IN \
rule="if (dst-len > 24) { reject }"
# Filter: Tolak default route dari peer (jika tidak diinginkan)
/routing filter add \
chain=BGP-IN \
prefix=0.0.0.0/0 \
prefix-length=0 \
rule="reject"
# Filter OUTBOUND: Hanya announce prefix kita sendiri
/routing filter add \
chain=BGP-OUT \
rule="if (dst != 203.0.113.0/24) { accept } else { reject }"
# Filter: Jangan announce private ASN
/routing filter add \
chain=BGP-OUT \
rule="if (bgp-as-path ~ \"64[0-9]{3}\") { reject }"
5.2 Bogon Filtering (RFC 6890)
# Blokir bogon prefixes dari internet
:local bogons { \
"0.0.0.0/8"; "10.0.0.0/8"; "100.64.0.0/10"; \
"127.0.0.0/8"; "169.254.0.0/16"; "172.16.0.0/12"; \
"192.0.0.0/24"; "192.0.2.0/24"; "192.168.0.0/16"; \
"198.18.0.0/15"; "198.51.100.0/24"; "203.0.113.0/24"; \
"224.0.0.0/3" \
}
:foreach bogon in=$bogons do={
/routing filter add \
chain=BGP-IN \
prefix=$bogon \
rule="reject"
}
# Juga blokir AS_PATH yang mencurigakan
/routing filter add \
chain=BGP-IN \
rule="if (bgp-as-path ~ \"^0 \" || len(bgp-as-path) > 25) { reject }"
6. BGP Communities
BGP Communities adalah tag yang bisa ditambahkan ke route untuk menandai atau mengelompokkan route. Communities memudahkan filtering dan policy enforcement tanpa perlu match setiap prefix satu per satu.
6.1 Format Communities
# Format: ASN:VALUE (contoh: 65000:1)
# Beberapa community standar:
# 65535:0 = NO_EXPORT (jangan di-export ke eBGP peer)
# 65535:666 = BLACKHOLE
# 65535:0 = NO_ADVERTISE (jangan di-announce ke siapapun)
# Set community pada route yang di-announce
/routing filter add \
chain=BGP-OUT \
set-bgp-communities=65000:100 \
rule="if (dst in 203.0.113.0/24) { accept }"
# Match community pada filter inbound
/routing filter add \
chain=BGP-IN \
rule="if (bgp-communities includes 65000:100) { \
set-bgp-local-pref 200; accept \
}"
# Contoh penggunaan: ISP Indonesia (IIX community)
# Community untuk menandai route dari IIX
/routing filter add \
chain=BGP-IIX-IN \
set-bgp-communities=65000:1 \
rule="accept"
# Community untuk menandai route dari upstream
/routing filter add \
chain=BGP-TRANSIT-IN \
set-bgp-communities=65000:2 \
rule="accept"
6.2 Well-Known Communities
| Community | Nilai | Fungsi |
|---|---|---|
| NO_EXPORT | 65535:65281 | Jangan export ke eBGP peer |
| NO_ADVERTISE | 65535:65282 | Jangan announce ke peer manapun |
| NO_EXPORT_SUBCONFED | 65535:65283 | Jangan export ke confederation peers |
| BLACKHOLE | 65535:666 | Blackhole traffic ke prefix ini |
7. Konfigurasi BGP di MikroTik
7.1 Setup BGP Dasar
# Set router ID /routing router-id add \ name=bgp-id \ address=203.0.113.1 # Buat BGP instance /routing bgp instance add \ name=bgp1 \ as=65000 \ router-id=bgp-id \ redistribute-static=no \ redistribute-connected=no \ redistribute-ospf=no # Tambah BGP peer (upstream ISP) /routing bgp peer add \ name=upstream-isp1 \ instance=bgp1 \ remote-address=198.51.100.1 \ remote-as=64600 \ address-families=ip \ multihop=no \ in-filter=BGP-IN \ out-filter=BGP-OUT \ comment="Upstream ISP 1" # Tambah BGP peer (IX peering) /routing bgp peer add \ name=ix-peer1 \ instance=bgp1 \ remote-address=103.26.156.1 \ remote-as=7713 \ address-families=ip \ in-filter=BGP-IN \ out-filter=BGP-OUT \ comment="IIX Peering - Telkom" # Announce prefix kita /ip firewall address-list /routing filter add \ chain=BGP-OUT \ prefix=203.0.113.0/24 \ rule="accept"
7.2 Monitoring BGP
# Lihat BGP peers /routing bgp peer print # Lihat status detail peer /routing bgp peer print detail where name=upstream-isp1 # Lihat BGP routes yang diterima /routing bgp advertisements print peer=upstream-isp1 # Lihat routes yang di-announce /routing bgp advertisements print # Monitor BGP state changes /log print where topics~"bgp" # Cek jumlah routes /routing bgp peer print count-only # Reset BGP session (soft reset) /routing bgp peer refresh upstream-isp1 # Hard reset BGP session /routing bgp peer reset upstream-isp1
8. Multi-homing Setup
Multi-homing adalah konfigurasi di mana satu AS terhubung ke internet melalui lebih dari satu ISP. Ini memberikan redundancy dan load balancing.
8.1 Dual-ISP BGP Setup
# Primary ISP — set local-pref lebih tinggi /routing filter add \ chain=BGP-ISP1-IN \ rule="set-bgp-local-pref 200; accept" # Backup ISP — local-pref default (100) /routing filter add \ chain=BGP-ISP2-IN \ rule="accept" # Peer ISP 1 (primary) /routing bgp peer add \ name=isp1-primary \ instance=bgp1 \ remote-address=198.51.100.1 \ remote-as=64600 \ in-filter=BGP-ISP1-IN \ out-filter=BGP-OUT \ comment="Primary ISP" # Peer ISP 2 (backup) /routing bgp peer add \ name=isp2-backup \ instance=bgp1 \ remote-address=198.51.101.1 \ remote-as=64601 \ in-filter=BGP-ISP2-IN \ out-filter=BGP-OUT \ comment="Backup ISP" # Load balancing: set local-pref sama untuk traffic masuk # dan gunakan AS-path prepend pada satu ISP untuk preferensi
9. BGP State Machine
BGP memiliki state machine yang menentukan tahapan koneksi antara dua peer:
9.1 BGP States
| State | Keterangan |
|---|---|
| Idle | State awal, menunggu koneksi |
| Connect | Mencoba membuat koneksi TCP ke port 179 |
| Active | Gagal connect, mencoba ulang |
| OpenSent | BGP Open message terkirim, menunggu balasan |
| OpenConfirm | Open message diterima, menunggu Keepalive |
| Established | Koneksi berhasil, mulai tukar route |
9.2 BGP Message Types
- Open: Membangun sesi — berisi AS number, BGP version, hold time, router ID
- Update: Mengirim atau menarik route — berisi NLRI (prefix), path attributes, withdrawn routes
- Keepalive: Menjaga sesi tetap hidup — dikirim setiap 60 detik (default)
- Notification: Mengirim error dan menutup sesi
- Route Refresh: Meminta peer mengirim ulang semua route
9.3 Troubleshooting BGP
# Cek status BGP peers /routing bgp peer print detail where name=upstream-isp1 # Aktifkan BGP debug logging /system logging add topics=bgp action=memory # Lihat BGP log /log print where topics~"bgp" # Common issues: # - State: Active → Tidak bisa TCP connect (firewall block port 179) # - State: OpenSent → AS number salah di remote-as # - State: Established tapi no route → Filter salah # Pastikan port 179 tidak diblokir /ip firewall filter print where dst-port=179 # Test TCP connectivity /tool port-scan address=198.51.100.1 port=179 # Lihat route yang diterima dari peer /routing bgp advertisements print peer=upstream-isp1 # Lihat jumlah route /ip route print count-only where bgp
10. Best Practices untuk ISP
- Selalu gunakan route filter — jangan pernah peering tanpa filter
- Filter bogon dan private prefix dari inbound
- Batasi prefix length — tolak prefix lebih kecil dari /24 (IPv4) atau /48 (IPv6)
- Batasi AS_PATH length — tolak AS_PATH terlalu panjang (>25)
- Implementasikan RPKI untuk validasi route origin
- Monitor BGP secara aktif — gunakan Looking Glass, BGPalerter
- Gunakan IRR (Internet Routing Registry) untuk dokumentasi route policy
- Back up konfigurasi dan dokumentasikan semua filter
- Test failover secara berkala
Quiz Pemahaman
🧠 Tes Pemahaman: BGP Fundamentals
1. BGP termasuk jenis protokol routing apa?
2. Mengapa route filtering sangat penting pada BGP?
3. Apa fungsi dari LOCAL_PREF pada BGP?
4. Community 65535:666 digunakan untuk apa?
5. Apa itu multi-homing dalam konteks BGP?