Monday, April 24, 2017

Bermain Dengan REGEX BGP

Apabila Anda sudah mulai menjadi admin BGP router, maka pastilah Anda akan menemukan setting dimana router kita perlu memfilter AS Number baik yang diterima dari neighbor bgp, maupun yang akan di advertise ke neighbor bgp.

Setidaknya apabila AS number kita tidak ingin menjadi transit antara dua upstream kita maka Anda perlu menerapkan adversiment ke semua upstream dengan filter regex:

^$ artinya match hanya untuk origin network (network kita sendiri)

Dan apabila ada ISP lain dibawah Anda, dan Anda ingin advertise semua prefix dari semua AS path, maka setidaknya filter regex yang dipakai adalah:

.*  artinya match semua AS number

Karakter yang umum digunakan:

1. Karakter titik . dan karakter +

. --> match 1 karakter apa saja
a --> match
ab -> match di a
xyz --> match di x
xyz abc --> match di x

.. --> match 2 karakter apa saja
a --> not match
aa --> match
aabb --> match di aa
abcd --> match di ab

a+ match karakter a muncul 1x atau lebih
a --> match
bcd --> not match
ab --> match
bab --> match
aa --> match, berulang 1x (aa)
aaa --> match berulang 2x (aaa)
aaaaaxy --> match berulang 4x (aaaaaxy)

(...)+ --> match 1 group 3 karakter dan group tsb muncul 1x atau lebih
abcabc --> match (abc muncul 2x)
abcxxx --> match (abc muncul 1x dan xxx muncul 1x)
abcx --> match (abc muncul 1x)
abcabcxyz --> match (abc muncul 2x dan xyz muncul 1x)

2. Karakter _

Karakter _ biasanya untuk merepresentasikan spasi atau 7 karakter lain:
","
"["
"]
"("
")"
"^"
"$"
" " spasi

_100_
7657 100 4343 --> match
100 400 300 --> match
500 200 100 --> match
300 700 400 10 --> not match

_100$
100 --> match
400 100 --> match
100 300 --> not match
400 100 300 --> noth match

3. Karakter [] untuk pilihan

[0-9]   atau [0-9]+
1 --> match
12 --> match
a --> not match
a1 --> not match

4. Karakter () untuk grouping karakter dan disimpan dalam variable

(100)_(200)_(300)_(abc)
\1 = 100
\2 = 300
\3 = 300
\4 = 400

100 200 300 abc --> match
100 200 400 abc --> not match

(100)_(...)$
100 200 --> match
100 3000 --> not match

Lebih jauh berikut dijelaskan beberapa percobaan tentang regex. Anda tinggal telnet ke route-server di luar negri untuk percobaan ini spt:

telnet  route-server.ip.tiscali.net
telnet  route-views.optus.net.au

Catatan lihat point 9 di bawah, di router Tiscali (IOS versi 2007) sepertinya ada bugs, lebih direcommend menggunakan Optus (IOS versi 2011)

Berikut daftar percobaan regex yang bisa di test:

1. Routing table bgp yang hanya bersumber dari origin (dari router ini sendiri)
sh ip bgp regex ^$

2. Routing table bgp dengan neighbour yang ASnya 3 angka
sh ip bgp regex ^..._([0-9]+)*

123 3454 433 17670 --> match
4321 222 333 444 --> not match

3. Routing table bgp dengan neighbour yang ASnya 4 angka
sh ip bgp regex ^...._([0-9]+)*

123 3454 433 17670 --> not match
4321 222 333 444  -->match



4. Lihat semua routing table bgp yang mengandung AS hanya 1 angka
sh ip bgp regex _._

888 3 777 --> match
888 33 777 --> not match


5. Routing table bgp dengan neighbour yang ASnya terserah berapapun banyaknya angkanya
sh ip bgp regex ^([0-9]+)

12345 989 8976 3734 --> match
2 989 827 2873 --> match
A 989 827 2873 --> not match (karena A tidak termasuk 0-9)


catatan:
sh ip bgp regex ^([0-9]+)
sh ip bgp regex ^([0-9]+)+
hasilnya akan sama (+ artinya 1 instance, atau lebih)

6. Origin dari AS 17670
sh ip bgp regex _17670$

8574 6454 17670 --> match
3872 2736 17670 222 --> not match


7. ISP mana yang transit ke AS 23947, yang tidak metransitkan ulang ke ISP dibawahnya
sh ip bgp regex 23947_([0-9]+)$

7843 666 5434 23987 444 --> match
7843 666 5434 23987 444 555 --> not match


8. ISP mana yang transit ke AS 23947
sh ip bgp regex 23947_([0-9]+)

7843 666 5434 23987 444 --> match
7843 666 5434 23987 444 555 --> match
7843 666 5434 23987 --> not match


Catatan:
sh ip bgp regex 23947_([0-9]+)
sh ip bgp regex 23947_([0-9]+)+
hasilnya akan sama (+ artinya 1 instance, atau lebih)

9. ISP mana yang terhubung ke AS 4517 yang prepend ASnya minimal 1x prepend
sh ip bgp reg 45147_([0-9]+)_\1

7843 666 5434 45147 666 --> not match
7843 666 5434 45147 666 666 --> match
7843 666 5434 45147 666 666 666 --> match
7843 666 5434 45147 666 666 666 888 --> match
7843 666 5434 45147 666 888 888 --> not match


Catatan:
1. Regex
sh ip bgp reg 45147_([0-9]+)_\1
sama dengan
sh ip bgp reg 45147(_[0-9]+)\1 <-- recommended

2. Sepertinya ada bugs di software Router tiscali.net, perhatikan prefix baris kedua 45116.156.0/22 as-path nya tidak ada yang di prepend, padahal kita ingin memeriksa as-path yang di prepend saja.

Apabila di coba di

route-views.optus.net.au

sepertinya hasilnya lebih benar (tidak ada bugs).



10. ISP mana yang terhubung ke AS 4517 yang prepend ASnya minimal 4x prepend
sh ip bgp reg 45147(_[0-9]+)\1\1\1\1


Apabila menggunakan browser bisa di coba ke

http://lg.as48972.net/

Mencari semua AS mana dibawah AS 4761 yang prepend minimal 3x

4761(_[0-9]+)\1\1\1



Demikian telah dijelaskan beberapa command regex pada BGP.

Untuk BGP Community artikel ini memberikan contoh yg cukup gamblang.

No comments: