ASA i pełne tablice BGP

o ile wielokrotnie wspominałem już, że routing dynamiczny na firewallu jest proszeniem się o kłopoty, czasami nie ma innego wyjścia.

w Cisco nie rekomendujemy używania ASA czy FTD do routing BGP z pełną tablicą. nie dlatego, że się do tego nie nadają, a dlatego, że nie jest to po prostu dobra praktyka w budowaniu, wymiarowaniu i prawidłowej inżynierii sieciowej.

poniżej przykłada z testowania w domowym labie klastra składającego się z pary ASA 5516-X, pracujących z oprogramowaniem. klaster dwóch takich ASA otrzymuje sesje BGP z pełnym widokiem światowym z mojego routera brzegowego - ASRa 1001X:

asa-cluster/TOP/master# cluster exec sh bgp sum
TOP(LOCAL):**********************************************************
BGP router identifier 192.168.254.1, local AS number 65011
BGP table version is 799115, main routing table version 799115
798962 network entries using 159792400 bytes of memory
798962 path entries using 63916960 bytes of memory
121273/121252 BGP path/bestpath attribute entries using 25224784 bytes of memory
107331 BGP AS-PATH entries using 5986830 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 254920974 total bytes of memory
BGP activity 798968/0 prefixes, 798968/1 paths, scan interval 60 secs

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.253.1   4        65055 121715  5         799329    0    0 00:01:54  798967

DOWN:****************************************************************
BGP router identifier 192.168.254.1, local AS number 65011
BGP table version is 1, main routing table version 1

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.253.1   4        65055 0       0              1    0    0 never  Idle

ASA 5516-X nie ma silnego procesora (to w końcu tylko Intel Atom!), ale o dziwo załadowanie 800k prefiksów nie zabiło go. o ile na samym początku widać skok obciążenia nawet o 40%, sytuacja stabilizuje się i wraca do ok. 5% obciążenia (wiele będzie zależało od obsługiwanego przy okazji ruchu), ale obsługa 800k prefiksów nie wydaje się specjalnym zmartwieniem.

pełna tablica (ok. 800k prefiksów IPv4) wymaga jak widać powyżej, około 255MB pamięci ale trzeba wziąć pod uwagę proces ładowania i ew. uaktualniania prefiksów. tak czy inaczej, bez 1-1.5GB wolnej pamięci RAM nie próbowałbym tego nawet w labie, nie mówiąc o środowisku produkcyjnym:

asa-cluster/DOWN/master# sh processes memory | i Allocated|BGP
Allocs      Allocated             Frees       Freed                 Process
0           0                     0           0                     BGP Scheduler
0           0                     0           0                     BGP Task
0           0                     1987        58343399              BGP Scanner
2032        71348506              2           70294                 BGP I/O
0           0                     0           0                     BGP Event
155008      1403827620            64362       365655449             BGP Router

jak widać, proces BGP Router trzyma nadal ok. 1GB RAMu, a BGP I/O dodatkowo 71MB.

jeszcze szybki rzut oka na pamięć w klastrze:

asa-cluster/DOWN/master# sh cluster memory 
Usage Summary In Cluster:********************************************* 
Free memory:      8002141434 bytes (53%) 
Used memory:      7172860392 bytes (47%) 
-------------     --------------- 
Total memory:     15175001826 bytes (100%)

DOWN(LOCAL):********************************************************** 
Free memory:      3881306753 bytes (51%) 
Used memory:      3706194160 bytes (49%) 
-------------     ---------------- 
Total memory:     7587500913 bytes (100%)

TOP:****************************************************************** 
Free memory:      4120834681 bytes (54%) 
Used memory:      3466666232 bytes (46%) 
-------------     ---------------- 
Total memory:     7587500913 bytes (100%)

i to mniej więcej tyle - a czy naprawdę musisz mieć na firewallu pełną tablicę BGP? to, że możesz - nie znaczy, że musisz.

w najbliższym czasie pokaże jak efektywnie zmniejszyć ilość przechowywanych prefiksów bez istotnej utraty dokładności routingu.