modified on 24 lis 2009 at 10:46 ••• 33 251 views

BGP HowTo i FAQ

Z MikroTik Wiki


Spis treści

Problem: Sesja BGP nie została zestawiona

BGP używa TCP, więc aby wykryć powód powstania problemu, możesz zacząć od testowania łączności TCP. Można to zrobić w sposób prosty: /system telnet <remote-ip> 179 i sprawdzić czy połączenie TCP może zostać zestawione, a port 179 jest otwarty i osiągalny.

Jeśli jest to eBGP, upewnij się, że ustawiłeś multihop=yes i potrzebne są ustawienia TTL. Użyj /routing bgp peer print status aby sprawdzić stan połączeznia BGP.

Zwróć jeszcze uwagę czy zdalna maszyna nie wspiera BGP Capabilities Advertisement (RFC 2842), potrzebny będzie dodatkowy czas do zestawienia sesji. W takim przypadku nie uda się zestawienie sesji za pierwszym razem, z powodu nieznanych opcji w wiadomości BGP OPEN. Druga próba powinna się udać (tzn. po około minucie) i każda kolejna, ponieważ RouterOS będzie pamiętać stwarzające problemy opcje dla tego routera i nie będzie ich brał więcej pod uwagę w wiadomościach BGP OPEN.

Problem: Sesja BGP została zestawiona, ale aktualizacje routingu są ignorowane

Ignorowana jest NLRI (Network Layer Reachability Information) jeśli atrybuty ścieżki są niepoprawne. Zobacz logi BGP debug aby poznań powód wystąpienia problemu. (/system logging add topics=bgp,!raw).

Częstym przypadkiem jest nieakceptowalny BGP next-hop. (Przeczytaj ten artykuł aby dowiedzieć się więcej o RouterOS i BGP next-hops.) W takim razie musisz naprawić next-hop po stronie nadawcy. W przypadku, gdy nadawca również jest MT możesz użyć parametru nexthop-choice aby zmodyfikować domyślne ustawienia wyboru next-hop. Jeśli i to się nie uda, określ ręcznie next-hop używając filtru routingu set-out-nexthop.

Pytanie: Jak sprawdzić czy konkretna trasa jest zamieszczona w tablicy routingu?

Znalezienie trasy po prefiksie jest szybkie:

/ip route print where dst-address = 193.23.33.0/24

Aby znaleźć wszystkie trasy z prefiksami mieszczącymi się w zakresie;

/ip route print where dst-address in 193.23.0.0/16

Możesz również przeszukiwać trasy po ich atrybutach, ale będzie to dużo wolniejsze i może zając więcej czasu na routerze z pełnym wsparciem BGP.

Na przykład, od RouterOS wersji 3.23 możesz użyć tego wyrażenia aby dopasowywać trasy pochodzące od konkretnego AS 30621:

[atis@SM_BGP] > /ip route print detail where bgp-as-path ~ "30621\$"
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
0 ADb  dst-address=12.151.74.0/23
       gateway=x.x.x.x recursive via y.y.y.y ether1 distance=20
       scope=40 target-scope=10 bgp-as-path="2588,42979,702,701,7018,30621"
       bgp-origin=igp received-from=x.x.x.x
 
1 ADb  dst-address=12.151.76.0/22
       gateway=x.x.x.x recursive via y.y.y.y ether1 distance=20
       scope=40 target-scope=10 bgp-as-path="2588,42979,702,701,7018,30621"
       bgp-atomic-aggregate=yes bgp-origin=igp received-from=x.x.x.x

Problem: Trasy są wymieniane i umieszczane w tablicy routingu, ale są nieaktywne

Trasy muszą być rozwiązane (resolved) aby stały się aktywne; możliwe że musisz zmienić atrybut scope lub target-scope dla niektórych tras.

Pytanie: Jak coś przefiltrować?

Używając filtrów routingu. Na przykład, aby wyfiltrować trasy z konkretnej wspólnoty BGP (BGP community) dodaj tą regułę:

/routing filter add bgp-communities=111:222 chain=bgp-in action=discard

Poinformuj pozostałych peerów BGP aby używali łańcucha filtru:

/routing bgp peer set peer in-filter=bgp-in

Istnieje także parametr out-filter do filtrowania wychodzących aktualizacji BGP.

W nowszych wersjach RouterOS filtr bgp-as-path akceptuje regularne wyrażenia. Nie jest jeszcze możliwe filtrowanie wspólnoty przez regularne wyrażenia.

Pytanie: Jak szybko sprawdzić ilość tras w tablicy routingu?

Dla wszystkich tras użyj:

ip route print count-only 

Aby zobaczyć licznik tras od konkretnego peera zobacz parametr prefix-count w:

route bgp peer print status

Pytanie: Jak zobaczyć trasy rozsyłane do i trasy otrzymywane od konkretnego routera?

Aby zobaczyć trasy rozsyłane do konkretnego peera (równoznaczne z show ip bgp neighbor x.x.x.x advertised-routes) użyj:

routing bgp advertisements print

lub

routing bgp advertisements print <peer_name>

Aby zobaczyć trasy odebrane od konkretnego peera (równoznaczne z show ip bgp neighbor x.x.x.x received-routes) użyj:

ip route print where received-from=<peer_name>

Pytanie: Jest możliwe równoważenie obciążenia w MT BGP?

Tak. Nawet jeśli samo BGP nie może propagować wielu next-hops dla pojedynczej trasy przez sieć, są sposoby posiadania tras z wieloma next-hops na routerze.

Jednym sposobem jest ustawienie wielu next-hops za pomocą filtru routingu.

routing filter add chain=bgp-in set-in-nexthop=10.0.1.1,10.0.2.1

Kolejnym sposobem jest rozwiązanie (resolve) next-hop (jeśli nie jest dostępny bezpośrednio) statycznie lub przez trasę OSPF z wieloma next-hops.

ip route add dst-address=x.x.x.x/y gateway=10.0.1.1,10.0.2.1

Zobacz również: Równoważnienie obciążenia BGP na dwóch interfejsach.

Pytanie:Jak rozgłaszać trasy?

Jeśli nie masz wielu tras do rozgłaszania i chcesz mieć możliwie najlepszą kontrolę nad nimi, użyj sieci BGP lub agregacji. Maksymalny licznik sieci BGL lub agregacji jest ograniczony do 200.

W przeciwnym razie użyj opcji redystrybucji trasy, konfigurowanej w ustawieniach instancji BGP.

Pytanie: What does BGP network synchronize option exactly mean?

Od wersji 3.30 routing-test oznacza "nie rozgłaszać tej sieci, chyba że jest dopasowująca aktywna IPG lub podłączona trasa w tablicy routingu". "Dopasowująca" w tym przypadku oznacza: z tym samym prefiksem.

Pytanie: Jak kontrolować rozsyłaną informację o routingu?

Używając filtrów routingu.

Aby rozesłać tą samą informację (np. niektóre wartości parametrów BGP) to wszystkich peerów użyj filtru wyjściowego instancji BGP:

/routing filter add set-bgp-communities=111:222 chain=bgp-out
/routing bgp instance set default out-filter=bgp-out

Aby wysłać informację routingu do różnych peerów, użyj specjalnych filtrów dla peerów. Na przykład, jeśli chcesz rozsyłać mniejszą wartość preferencji (większy koszt ścieżki) do jednego z peerów, możesz dodać prefiks wiele razy do swojego numeru AS do atrybutu BGP AS_PATH:

/routing filter add set-bgp-prepend=4 chain=bgp-out-peer1
/routing bgp peer set peer1 out-filter=bgp-out-peer1

Użyj /routing bgp advertisements printaby zobaczyć dokładnie jakie informacje o routingu są rozsyłane do peerów.

Problem: Wygląda na to, że mój filtr routingu nie działa

W większości przypadków prefix matcher jest źle skonfigurowany. Na przykład, chcesz ustawić filtr aby odrzucał wszystkie trasy pod prefiksem 1.1.1.0/24.

Robi się to poprzech matchera z określonym parametrem prefix-length:

add prefix=1.1.1.0/24 prefix-length=24-32 action=discard chain=bgp-in

Ta reguła jest niepoprawna (domyślna maska wynosi /32. więc będzie dopasowywać tylko prefiks 1.1.1.0/32):

add prefix=1.1.1.0 prefix-length=24-32 action=discard chain=bgp-in

Ta reguła też jest niepoprawna (ponieważ będzie tylko dopasowywać trasy z maską 255.255.255.0)

add prefix=1.1.1.0/24 action=discard chain=bgp-in

Użyj akcji filtru log aby zobaczyć jakie trasy są dopasowywane przez filtr routingu.

Pytanie: Jak rozesłać jeden duży prefiks IP zamiast wielu mniejszych (tzn. bardziej dokładnych)?

Użyj agregacji BGP jeśli musisz zagregować wiele tras w jedną. Agregacja będzie rozgłoszona jeśli istnieją aktywne trasy z maskami sieci zawierającymi się w agregacji. Gdy agregacja staje się aktywna, zostaje automatycznie utworzona odpowiednia trasa blackhole.

Domyślnie, agregacja BGP scala tylko trasy BGP. Aby dołączyć IGP, użyj parametru konfiguracyjnego include-igp.

Pytanie: Jak agregować trasy IGP?

Od wersji 3.30 pojawiła się opcja w konfiguracji agregacji BGP include-igp. Na przykład:

ip route add dst-address=10.9.9.0/25 gateway=10.0.0.1
ip route add dst-address=10.9.9.128/25 gateway=10.0.0.2
routing bgp aggregate add instance=default prefix=10.9.9.0/24 include-igp=yes

Efekt:

[admin@MikroTik] > routing bgp advertisements print
PEER     PREFIX               NEXTHOP          AS-PATH                              ORIGIN     LOCAL-PREF
peer1    10.9.9.0/24          10.0.0.131                                            incomplete

Użyj filtrów routingu do kontroli, które trasy mają być agregowane. Na przykład, jeśli nie chcesz agregować połączonych tras:

routing filter add chain=aggregate-out protocol=connect action=discard
routing bgp aggregate set [find] advertise-filter=aggregate-out 

Pytanie: Jak rozsyłać domyślną trasę?

Aby wysłać domyślną trasy do konkretnego peera, ustaw default-originate=always or if-installed dla tego peera.

Problem: Trasy są rozgłaszane, ale posiadają atrybuty nie pobrane z tablicy routingu

Istnieje ograniczenie operacji w MT BGP: jeśli sieć BGP ma wyłączoną synchronizację, lub rozgłaszana jest domyślna trasa wygenerowana przez default-originate=always, atrybuty tej trasy nie będą pobierane z tablicy routingu.


Jeśli ustawiona jest opcja synchronize=yes lub default-originate=if-installed, atrybuty rozgłaszanej trasy będą pobierane z tablicy routingu.

Pytanie: Czy MT może propagować aktualizację tras BGP bez umieszczania ich w tablicy routingu (tzn. służyć jako czysty reflektor tras)?

Nie, nie jest to możliwe.

Pytanie: Czy MT BGP obsługuje 4-oktetowe numery AS?

Tak. Wspierane są ASPLAIN I ASDOT jako formaty wejściowe; wyjściowe, tylko ASPLAIN.

Pytanie: Jakie są właściwości algorytmu wyboru trasy MT BGP?

Algorytm opisany jest tutaj. Algorytm jest oparty o BGP RFC, z kilkoma modyfikacjami:

  • Cisco-podobna waga używana jest jako pierwsze i najważniejsze kryterium;
  • Porównanie długości ścieżek AS może być wyłączone przez parametr konfiguracji;
  • preferowane są lokalne trasy BGP, w wypadku AS o takiej samej długości ścieżki, wagi i wartości local-preference;
  • pomijany jest krok obliczania i porównywania kosztu.

Algorytm używany jest tylko do porównywania tras BGP w tej samej instancji BGP. Dla różnych instancji, porównywane są tylko atrybuty "distance".

Pytanie: Jak dużo pamięci jest potrzebne to przechowywania globalnej tablicy routingu BGP?

Zalecamy minimum 256 MB RAM dla jednej kopii tablicy i przynajmniej 512 MB RAM dla dwóch lub trzech kopii.

Zakładając rozmiar tablicy routingu dla Internetu około 300'000 tras, dla pierwszej kopii tablicy, ze zresolvowanymi i aktywnymi trasami, potrzebne jest dodatkowe 150 MB pamięci. Dla każdej dodatkowej kopi tablicy potrzebna jest mniejsza ilość RAM. .

wykorzystanie RAM na RB1000 (rozmiar BGP 301'480 tras, bez redystrybucji):

  • trasy inne niż BGP: 26 MB
  • Pojedyncza kopia: 181 MB
  • Dwie kopie: 241 MB
  • Trzy kopie: 299 MB

Wymagania pamięciowe będą rosnąć w zależności od ilości peerów do których rozsyłamy trasy.

Nie jest zalecane włączanie SNMP na trasach z pełną obsługą BGP!