Konfigurace BGP na Linux a Bsd (Quagga)

Instalace Quagga je poměrně jednoduchá, například, pro uživatele Debianu stačí udělat sudo apt-get install quagga, a bude o vše postaráno. Konfigurační soubory jsou uloženy do /etc/quagga. Pro spuštění BGP je potřeba editovat 3 soubory – soubor daemons pro výběr daemonu, kteří se musí spustit při startu quagga, zebra.conf (soubor, který odpovídá za obecnou konfiguraci routeru), bgpd.conf (konfigurace bgpd daemonu).
Podíváme se na konfiguraci menšího ISP, který má jeden border router, přes který poteče ven a k němu veškerý provoz přes dva ISP. Viz. obrázek.

BGP_1-2

Daemons 
S konfiguraci daemons je to opravdu jednoduché – zebra=yes, bgpd=yes. Tímto řekneme, aby při /etc/init.d/quagga start se spouštěli zebra a bgpd.

zebra.conf 
Konfigurace jak zebry tak bgpd je hodně podobná konfigu Cisco routerů !
! Zebra configuration saved from vty
! 2010/08/19 21:29:23
!
hostname zebraAlex
password xxxxxxxxxxxxxx
enable password xxxxxxxxxxxxxx
log file /var/log/quagga/zebra.log
!
debug zebra events
debug zebra packet
!
interface eth0
ip address 192.168.255.25/29
ipv6 nd suppress-ra
!
interface eth1
ip address 10.10.10.102/30
ipv6 nd suppress-ra
!
interface eth2
ip address 109.205.240.1/24
ip address 109.205.245.1/24
ip address 109.205.246.1/24
ipv6 nd suppress-ra
!
ip route 109.205.240.0/21 Null0 254
!
ip forwarding
!
!
line vty
exec-timeout 0 0
!

Kdo se trochu vyzná v konfiguraci Cisco, hned pochopí, že máme 3 ethernet rozhraní eth0 a eth1 jsou použité pro navázání BGP spojení se 2 ISP a eth2 se dívá dovnitř naší sítě, která je 109.205.240.0/21.
Na první pohled divná konstrukce ip route znamená, že i pří výpadku rozhraní apod. bude naše síť vždy pro tento router dostupná a bude moct ji vždy propagovat ven.

bgpd.conf 

hostname AS12345
password xxxxxxxxxxxx
enable password xxxxxxxxxxx
log file /var/log/quagga/bgpd.log­
log stdout
!
router bgp 12345
bgp router-id 192.168.255.25
bgp log-neighbor-changes
network 109.205.240.0/21
!

Od řádku router bgp 12345 až po řádek network je uvedená základní konfigurace BGP procesu.
12345 – AS cislo, které dostanete přidělené od RIPE NCC.
Bgp router-id – ip adresa kterou dostanete od vašeho ISP, bude zároveň sloužit jako identifikátor BGP routeru. Network – tímto dáváte najevo jaký prefix budete propagovat ven z AS do světa.

!
neighbor 192.168.255.29 remote-as 11111
neighbor 192.168.255.29 description ISP1
neighbor 192.168.255.29 next-hop-self
neighbor 192.168.255.29 soft-reconfiguration inbound
neighbor 192.168.255.29 route-map ISP1-in in
neighbor 192.168.255.29 route-map ISP1-out out
neighbor 10.10.10.101 remote-as 22222
neighbor 10.10.10.101 description ISP2
neighbor 10.10.10.101 next-hop-self
neighbor 10.10.10.101 soft-reconfiguration inbound
neighbor 10.10.10.101 route-map ISP2-in in
neighbor 10.10.10.101 route-map ISP2-out out
!
Neighbor je konfigurace BGP spojení s jednotlivými ISP, v našem případě 192.168.255.29 je ISP1 a 10.10.10.101 je ISP2. Řádky Neighbor 192.168.255.29 a dále jsou konfiguraci BGP spojení pro prvního ISP. V našem případě je to záložní linka a je to ISP1. Potom následuje konfigurace dvou route map pro příchozí a odchozí routy ISP1. Pro všechny routy, co přijdou z ISP1 použijeme pravidlo ISP1-in a na všechny routy které do ISP1 pošleme, aplikujeme pravidla ISP1-out. To samé je pro ISP2.
Ještě existuje možnost použivání MD5 hesla pro spojení. Heslo se nastaví na obou stranách spojení příkazem neighbor 10.10.10-101 password mojeheslo.
Tady si musíte dát pozor na to, že funkce MD5 hesla nefungují korektně pod BSD, ale pouze pod Linuxem. Je to známá věc, ale Quagga vyvojáři ji do dneška neopravili

!
ip prefix-list bogons description bogus nets
ip prefix-list bogons seq 20 permit 127.0.0.0/8 le 32
ip prefix-list bogons seq 30 permit 10.0.0.0/8 le 32
ip prefix-list bogons seq 35 permit 172.16.0.0/12 le 32
ip prefix-list bogons seq 40 permit 192.168.0.0/16 le 32
ip prefix-list bogons seq 45 permit 169.254.0.0/16 le 32
ip prefix-list bogons seq 50 permit 224.0.0.0/4 le 32
ip prefix-list bogons seq 55 permit 240.0.0.0/4 le 32
ip prefix-list our-CIDR-blocks seq 5 permit 109.205.240.0/21 le 32
ip prefix-list upstream-out seq 10 permit 109.205.240.0/21
!
ip as-path access-list 1 permit _6451[2-9]_
ip as-path access-list 1 permit _645[2-9][0-9]_
ip as-path access-list 1 permit _64[6-9][0-9][0-9]_
ip as-path access-list 1 permit _65[0-9][0-9][0-9]_
ip as-path access-list 47 permit _11111$
!

Ip prefix list a ip-as path access list jsou příkazy pro konfiguraci filtru.
V tomto případě do filtru bogons přidáme všechny Bogon sítě, které nechceme do našeho AS příjimat.
Do as-path access-listu 1 zadáme čísla privátních AS, které taky nepotřebujeme zbytečně evidovat na svém BGP routeru.
As-path access-list 47 nám bude sloužit pro povolení prodloužené AS_PATH pro prepending cest přícházejicích z ISP1, který je záložní.

!
route-map ISP1-in deny 100
match as-path 1
!
route-map ISP1-in deny 110
match ip address prefix-list bogons
!
route-map ISP1-in deny 120
match ip address prefix-list our-CIDR-blocks
!
route-map ISP1-in permit 200
match as-path 47
!
route-map ISP1-in permit 210
set local-preference 100
!
route-map ISP1-out permit 100
match ip address prefix-list upstream-out
set as-path prepend 12345 12345 12345 12345 12345
!
route-map ISP1-out deny 200
!

Popis route map pro ISP1-
route-map ISP1-in 
po pořadí od nejnižšího čísla pravidla:
match as-path 1 – tímto zakážeme přijímat v updatech routy privátních AS čísel. Viz. ip as-path access-list 1
match ip address prefix-list bogons – zakážeme příjem IP privátních sítí
match ip address prefix-list our-CIDR-blocks – zakážeme příjem z internetu vlastních adres
match as-path 47 – toto znamená povolit všechno ostatní co poteče do AS ISP1 + natavit pravidlo ip as-path access-list 47, které povolí AS_PATH prepending
set local-preference 100 – nastavit u všeho co poteče do ISP1 směrem ven local-preference 100
Local-preference a weight – jsou parametry které se používají v BGP4 pro řízení odchozího provozu uvnitř AS resp. uvnitř jednoho routeru (v případě weight).

route-mapy ISP1-out 
route-map ISP1-out permit 100 match ip address prefix-list upstream-out – propagujeme ven jenom sítě které jsou v prefix listu upstream-out (tzn. jenom naše sítě)
set as-path prepend 12345 12345 12345 12345 12345 – nastavíme as path prepending, aby všechny routery venku viděli tuto cestu prodlouženou, v tomto případě o 5 AS čísel.
route-map ISP1-out deny 200 – vše ostatní je zakázáno

!
route-map ISP2-out permit 100
match ip address prefix-list upstream-out
!
route-map ISP2-out deny 200
!
route-map ISP2-in deny 100
match as-path 1
!
route-map ISP2-in deny 110
match ip address prefix-list bogons
!
route-map ISP2-in deny 120
match ip address prefix-list our-CIDR-blocks
!
route-map ISP2-in permit 200
set local-preference 200
set weight 200 !
line vty
!

Popis route map pro ISP2:
Jedná se o konfiguraci pro hlavní konektivitu.
Je dosti podobna konfiguraci pro záložní akorát jsou tu dvě zásádní odlišnosti
a. není nastaven as path prepending. To znamena že BGP routery venku uvidí vždy tuto cestu jako kratší a pošlou svůj provoz sem.
b. všechny příchozí routy dostanou local preference 200, což je vyšší než u rout záložní konektivity, tzn. provoz směrem ven poteče s celého AS přes tento router a tento peer.
Zároveň jsme nastavili set weight 200 – tzn. cesty z ISP2 dostanou tu největší prioritu lokálně na routeru.

Monitorování BGP
Nejprvé je potřeba připojit se k bgpd procesu. Pro připojení k bgpd se používá telnet localhost 2605, pro připojení k zebra – telnet localhost 2601. Pro monitorování stavu našeho BGP spojení v quagga se používají stejné příkazy jako v Cisco směrovačích :

  • show ip bgp summary – shrnutí BGP stavu našeho směrovače. Jsou tady údaje o peerech jako IP adresy, čísla AS, status spojení
  • show ip bgp neighbors – detailní zobrazení informací o naších peering partnerech(dále sousedech)
  • show ip bgp neighbors X.X.X.X – detailní zobrazení informací o spojení s vybraným sousedem
  • show ip bgp neighbors X.X.X.X advertised-route – zobrazí všechny sítě, které posíláme ven do AS vybraného souseda
  • show ip bgp neighbors X.X.X.X received-route – zobrazí všechny sítě, které dostáváme od vybraného souseda
  • show ip bgp – zobrazí všechny routy, které jsme přijali
  • show ip bgp Y.Y.Y.Y – zobrazí všechny cesty, kam poteče provoz k vybrané IP adrese Y.Y.Y.Y
  • debug bgp updates – spustit debug všech příchozích i odchozích updatů
  • debug bgp events – sledovat veškere BGP události

 

Leave a Reply

Be the First to Comment!

Notify of

wpDiscuz