OpenBGPD kasutamine operatsioonisüsteemiga OpenBSD
Sissejuhatus
Internet koosneb võrkude haldajatele usaldatud suurtest võrkudest, mida nimetatakse autonoomseteks süsteemideks (AS - Autonomous System) ning neid süsteeme tähistatakse AS numbritega (ASN - Autonomous System Number). Üheks oluliseks ülesandeks nende võrkude pidamisel on ruutingute haldamine, reeglina räägitakse võrkude vahel EGP protokolli ja võrgude sees IGP protokolli.
- EGP (Exterior Gateway Protocol) - nt BGP4 (Border Gateway Protocol) protokoll ja implementatsioon OpenBGPD; BGP4 on 2009 aastal praktiliselt ainus levinud EGP
- IGP (Interior Gateway Protocol) - nt OSPF (Open Shortest Path First) protokoll ja implementatsioon OpenOSPFD; OSPF on 2009 aastal tõenäoliselt kõige levinum IGP, lisaks on palju kasutusel IS-IS
Border Gateway Protocol (BGP) kasutusalad
- nn suurte võrkude omavahel ühendamiseks (nt ISP'ide vahelised ühendused)
- kasutaja ühendamiseks võrku mitme erineva ISP ühenduse abil
BGP protokolli oluline omadus on asjaolu, et tegemist on avatud standardiga (ingl. k. open standard). BGP protokoll loodi 1989 aastal vastuseks vajadusele hallata järjest suurenavas võrgus ruutinguid sklaeeruval ja toimival viisil. Enne BGP kasutuselevõtmist kasutati nn Hello protocol'i, millele järgnes RIP protokolli kasutamine. Oluline on tähele panna, et enne BGP protokolli kasutamist ei eristatud selgelt interior ja exterior ruutingut.
Ruutinguprotokolli põhiline ülesanne on tegeleda võrgus võrgu erinevate osade kättesaadavust puudutava info (ingl. k. reachibility information) vastuvõtmise, kasutamise ja levitamisega.
BGP tööpõhimõte
Üldiselt on BGP juures olulised kolm asjaolu
- tagada silmusevaba (ingl. k. loop-free) ruuting st paketi alguspunktist lõpppunkti jõudmisel ei läbi pakett ühte ja sama AS'i mitu korda
- BGP ei taga iseenesest AS sees silmusevaba ruutingut (see on vastavas AS'is töötava IGP protokolli ülesanne)
- töötada võimalikult väikeste andmemahtudega, osalised vahetavad alguses kõik andmed ja seejärel vahetatakse vaid muudatusi
- BGP on tehtud lähtudes praktilistelt kaalutlustelt, nt kasutatakse andmevahetuseks olemasolevat TCP protokolli ja ei leiutatud selleks uut protokolli
BGP on path vector protokoll (erinevalt nt link state protokollist).
Üheks iseloomulikus BGP kui exterior ruuting protokolli omaduseks on võimaldada toimuvat liiklust kokkulepitud korra alusel kontrollida (ingl. k. to implement a policy), nt lähtudes, millist teed mööda käib AS'i läbiv liiklus: kõige kiiremat, kallimat, turvalisemat teed.
BGP protokolli seisukohast koosneb internet erinevatele haldajatele usaldatud võrgusegmentidest, mis on omavahel ühendatud suhteliselt suurt andmevahetust võimaldavate kanalitega
....... ,----------, - -... R2 -------------- R3 .' \ R8 R9 - \ .' '. / '--------------| AS 65102 | | AS 65100 | |. AS 65101 | | . R10 | - \ | ' -------/ \ ' - R1 ' ... ' \ \ R7 R11 \ R12 \ / ... -------------\.--------| ---, \ / | | \ ------- / | | \ ' ' / | \ / \ R4 AS 65105 |-----/ ( AS 65103 | | AS 65104 | |. ' R6 \ -----) \-.-...---/ .._____/
Skeemil on kujutatud
- AS 65100, AS 65101 jne autonoomsete numbritele vastavaid võrgusegmente; need ei pruugi sisaldada järjestikuseid ip aadress vaid nt mitmed /22, /24, /16 võrgusegmente
- R1, R2 jne tähistavad autonoomsete võrkude piiridel töötavaid ruutereid, mis on naaber AS'iga ühendatud suurt andmevahetust võimaldava kanaliga
Ühe asjaolune on skeemil näha, et nt AS 65103 seest saab jõuda AS 65105 juurde välja kahte erinevat teed pidi
AS 65103 -> AS 65102 -> AS 65101 -> AS 65105
ja
AS 65103 -> AS 65102 -> AS 65101 -> AS 65100 -> AS 65105
kusjuures sellel teel ei pea AS numbrid kuidagi järjest paiknema ning täiesti normaalne võib olla ka see, kui liiklus käib nö visuaalselt skeemi vaadates pikemat teed mööda. See võib olla tingitud nt administratiivsetest kokkulepetest või ühenduskanalite omadustest ja nende kasutamisega seotud maksumusest lähtudes on nii otstarbekam.
BGP protokolli ülesanne on hallata ruutinguid ehk kontrollida, millist teed pidi üle paljudele erinevatele haldajatele usaldatud võrgusegmentidest liiklust jõuab lähtepunktist sihtpunkti. Üldiselt kaasneb andmesidega pakettide mõlemasuunamline liikumine, kusjuures paketid ei pruugi liikuda mõlemas suunas sama teed mööda. Sellist juhtumit nimetatakse asümmeetriliseks ruutinguks.
Kõik skeemil kujutatud ruuterid räägivad BGP protokolli kusjuures
- BGP ruuter suhtleb ainult temaga otseselt ühendatud teiste AS'ide ruuteritega ning oma AS'i kõigi BGP ruuteritega (iseenesest tuleb eristada füüsilise ühenduse mõttes kahte omavahel kokkuühendatud BGP ruuterit ja loogilises mõttes omavahel otse suhtlevat (nn peeringut tegevat) BGP ruuterit, paljudel juhtudev füüsiline ja loogiline topoloogia langevad kokku)
- kui ruuter suhtleb teise AS ruuteriga, siis öeldakse, et nad räägivad omavahel eBGP'd (external BGP)
- kui ruuter suhtleb oma AS'i ruuteriga, siis öeldakse, et nad räägivad omavahel iBGP'd (internal BGP)
- BGP ruuteri ülesanne on teatada teda otseselt ümbritsevatele teistele BGP ruuteritele, millised võrgud on tema AS'is; selle alusel teavad teised BGP ruuterid kuhu saata kõnealuse AS'i suunas saadetud liiklust
- BGP ruuteri ülesanne on teatada edasi järgmistele BGP ruuteritele, milliste AS'ide ja nende võrgusegmentide juurde jõuab läbi kõnealuse AS'i; nii levib tulemusena info kogu võrgu struktuurist kõigisse võrgu BGP ruuteritesse
- kõigil BGP ruuteritel on mälus samasugune nö pilt kogu võrgu ruutingutest; sellel põhjusel on tegelevad võrgusegmentide haldajad pigem väiksema (nt /21) kui suurema (nt /29) täpsusega võrkudega
- BGP tarkvara töö tulemusena tekib ruuteris ruutingutabel, mille alusel oskab ruuter saata talle mingi võrguseadme kaudu sisenenud pakette välja sobiva muu võrguseadme kaudu
- BGP ülesanne on korraldada liiklus AS'ide vahel, BGP ülesanne ei ole korraldada liiklust AS sees; AS sees korraldatakse liiklust keerukamal juhul IGP ruutinguprotokollidega, nt OSPF või AS sisemistes ruuterites staatiliselt seadistatud ruutingutabelid
BGP andmevahetuseks pöördub BGP peer suvaliselt pordilt BGP peer'i poole pordile 179/tcp. Üldiselt võiks arvestada, et ühenduste algatamine võib toimuda mõlemas suunas. Nt Wireshark abil paistab BGP liiklus selline
kus
- valitud real on kirjas vastavas BGP UPDATE sõnumis olev AS path
Mõisted
- ruuting domeen (ingl. routing domain), autonomous system - kogum ruutereid, mida haldab üks organisatsioon (BGP konktekstis)
- AS numbrid (ASN - Autonomous System Number) vahemikus 64512 - 65535 ei ole avalikult kasutuses ja on mõeldud privaatseks kasutamiseks.
- stub AS - AS omab ainult ühte ühendust ühe teise AS'iga; AS sees liigub ainult kohalik liiklus (ingl. k. local traffic)
- multihomed AS - AS omab ühendusi enam kui ühe teise AS'iga; AS sees liigub ainult kohalik liiklus
- transit AS - AS omab ühendusi enam kui ühe teise AS'iga; AS sees liigub kohalik liiklus ja teatud tingimustel läbiv liiklus (ingl. k. transit traffic)
- BGP speaker - seade (tavaliselt ruuter) mis oskab suhelda teiste seadmetega BGP protokolli kasutades
- BGP peers ehk BGP neighbors - kaks BGP speakerit, mis moodustavad BGP ühenduse eesmärgiga kasutada seda ruutinguinfo vahetamiseks
- NLRI (Network Layer Reachability Information) - rahvapäraselt prefiks
- BGP Identifier ehk router ID
- SOO - Source of Origin
- peer - ruutingupartner, kellega toimub nö otse liikluse pidamine, kuid kumbki ei ole teise jaoks nn transit AS; ühel võib olla mitu peer'i
- uplink - ruutingupartner, kelle kaudu toimub liiklus internetiga, st ta on nn transit AS; ühel võib olla mitu uplink'i
Atribuudid
- Well-known mandatory attributes - kõik BGP peerid peavad neid tundma ja peavad sisalduma igas sõnumis
- Well-known discretionary attributes - kõik BGP peerid peavad neid tundma kuid ei pea sisalduma igas sõnumis
- Optional transitive attributes - kõik BPG peerid ei pea tundma, kui peavad säilitama
- Optional nontransitive attributes - kõik BPG peerid ei pea tundma, update millest ei saada aru ei tohi edastatada peeridele
Näited well-known mandatory atribuutidest
- Origin Code (ORIGIN) - näitab prefix'i allikat (IGP, EGP INCOMPLETE)
- AS Path - nimekiri AS'idest, millest kõnealune update on läbi käinud
- Next Hop - ip aadress, millega BGP spiiker kuulutab prefiksit teise AS BGP spiikerile
- Local Preference
Lisaks näiteid
- Multiple Exit Discriminator (MED, optional nontransitive attribute)
- Communities (optional transitive attribute)
IX - Internet Exchange
Kui mingis asukohas töötavad mitmed erinevad interneti teenusepakkujad (ingl. k. - internet service provider, ISP), siis tavaliselt neist mõnel on kanalid nö välismaaga, kuid kõigil ei ole. Kellel on, need müüvad teistele nn välisühendust. Tavaliselt kogunevad ISPid ühe või mitme sõlmpunkti ümber, mille kaudu saavad kõik kõigi teistega otse suhelda ja läbi meelepärase välisühenduse teenusepakkuja ühenduda välismaaga. Selliseid sõlmpunkte nimetatakse IX (internet exchange, ingl. k. interneti vahetuspunkt). Eestis on nt sellised IX keskused
- TIX - http://tix.estpak.ee/
- TLLIX - http://www.tllix.net/
- RTIX - http://www.rtix.ee/rtix/
Kui organisatsioon otsustab kasutada internetiühendust ja oluline on töökindlus, siis üheks võimaluseks seda saavutada on muretseda kahe erineva teenusepakkuja käest ühendus ning kasutada selle haldamiseks BGP protokolli. Lisaks tehnilisele töökindlusele võib see anda ka eelise sobivamas hinnas kokkuleppele jõudmise osas.
Aadressil http://bgp.he.net/ saab infot AS kasutuse ja peeringute kohta, nt pildil on toodud ühe teenusepakkuja peeringud
Samas on ka valik Graph v4, mis kujutab AS path'i graafiliselt.
Icedove ASnumber plugin
Icedove ASnumber plugin näitab brauseri all paremas nurgas parasjagu avatud lehe veebiserverile vastavat AS numbrit. Lisaks, kui hiir viia numbrile, siis esitatakse üksikasjalisem info selle AS kohta, nt selliselt Kuutorvaja puhul
Plugini parema hiireklõpsuga avanenud hüpikmenüüst saab valida Whois lookup ning sooritatakse päring vastava AS kohta http://www.db.ripe.net veebikohas ning esitatakse tulemus järgmises brauseri sakis.
Sellise plugini kasutamisel tuleb arvestada, et nö plugina isand saab üsna hea ülevaate, milliseid veebikohti brauseriga külastatakse.
eBGP kasutamine
Olgu kasutada selliselt seadistatud võrk
- arvutites on seadistatud võrguseadmed
- vaikelüüs on seadistamata
- ip forwarding on sisselülitatud
RNW - 10.2.0.0/24 haapsalu tallinn narva AS 65101 AS 65102 AS 65103 ___ em0 - 192.168.12.101 (r-id) ___ em1 - 192.168.23.102 (r-id) ___ | | | | | | | 1 |--------------------------------| 2 |--------------------------------| 3 | |___| 192.168.12.102 - em0 |___| 192.168.23.103 - em0 |___| | | | em1 - 192.168.37.103 (r-id) | em1 - 192.168.14.101 | | | | | | | | | | | | | | | | | | em0 - 192.168.14.104 | | parnu | | tartu | AS 65104 _|_ em1 - 192.168.45.104 _|_ AS 65105 | | | | | | | 4 |--------------------------------| 5 | em1 - 192.168.23.105 | |___| 192.168.45.105 (r-id)- em0 |___| | | | em2 - 192.168.56.105 | | em2 - 192.168.46.104 (r-id) | | | | | | | | | | | | | | | | | | | | | em0 - 192.168.46.106 | | _|_ em1 - 192.168.56.106 (r-id) | _|_ em1 - 192.168.37.107 | | | | | | 6 |----------------------------------' 192.168.67.107 (r-id) - em0 | 7 | |___|---------------------------------------------------------------------|___| em2 - 192.168.67.106 voru pihkva AS 65106 AS 65107 RNW - 10.6.0.0/24
ning eesmärgiks kasutades OpenBSD OpenBGPD tarkvara
- seadistada iga arvutid tööle BGP ruuteritena oma Autonomous System (AS) jaoks (nt AS 65101)
- ruuterid levitavad üle BGP kuuldud ruutinguid
- 10.6.0.0/24 ja 10.2.0.0/24 võrgus töötavad arvutid peavad saama omavahel suhelda (RNW - routed network, ingl. k. ruuditud võrk)
Testvõrgu ettevalmistamine
Tundub, et 2009 aasta suvel on kõige otstarbekam BGP testiks kasutada tarkvara VMware Server v. 2 abil moodustatud virtuaalset keskkonda. Antud juhtumil on WMware keskkonnas seadistatud
- igale ruuterite omavahelisele ühendusele vastav nn hostonly võrk
- igale ruuterile vastav virtuaalne arvuti
- eemalt üle ssh ligipääsuks on tallinn ja voru arvutitele seadistatud lisaks üks sillatud režiimis töötav võrguseade; läbi nende arvutite pääseb seadistama ssh abil ka ülejäänud arvuteid
Lisaks tasub kaaluda GNS3 tarkvara kasutamist mida on kirjeldatud aadressil http://kuutorvaja.eenet.ee/wiki/GNS3 ja mis võimaldab simuleerida Cisco ruuteritest jms võrguseadmetest koosnevat võrku. Eelduseks on, et kasutada on mõni nö päris Cisco IOS tõmmis.
eBGP seadistamine
Erinevalt IGP protokolli, nt OSPF kasutamisest tuleb kõik BGP protokolli kasutavad osalised seadistada näidates ära vähemalt kaks parameetrit
- suhtluspartneri võrguseadme IP aadress
- suhtluspartneri ASN
BGP deemoni bgpd tööd kontrollib seadistusfail /etc/bgpd.conf, kus võib esineda neli sektsiooni, üldiselt alltoodud järjekorras
- makrod (ingl. k. macros) - muutujate kirjeldused, mille kasutamine seadistusfailis parandab loetavust ja korduvakasutust
- globaalsed seadistused (ingl. k. global configuration) - seadistuste üldosas mis kehtib ruuteri kohta üldiselt, nt ruuteri id väärtus ning AS number
- naabrid ja grupid (ingl. k. neighbors and groups) - naabruses asuvate ruuteritega andmevahetust pidamist kirjeldav osa
- filter (ingl. k. filter) - filtreerivad reeglid ruuterisse siseneva ja ruuterist väljuvale BGP protokolliga toimuvale andmevahetusele
Järgnevates alampunktides on esitatud kõigi skeemil kujutatud ruuterite seadistusfailid.
AS 65101 - Haapsalu
# cat /etc/bgpd.conf # global configuration AS 65101 router-id 192.168.12.101 neighbor 192.168.12.102 { remote-as 65102 descr AS65102 announce all } neighbor 192.168.14.104 { remote-as 65104 descr AS65104 announce all } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
kus
- AS 65101 - autonoomse süsteemi number, mida ruuter esindab
- router-id 192.168.12.101 - ruuteri identifikaator, tavaliselt kasutatakse sellena mõne ruuteri võrguseadme ip aadressi
- neighbor 192.168.12.102 { ... } - ruuteriga ühendatud teise ASi kuuluva ja ip aadressil 192.168.12.102 asuva ruuteri suhtlemise kirjelduse sektsioon
- remote-as 65104 - teise ASi number
- descr AS65104 - sissekande kirjeldus
- announce all - näitab, et sellele naaber-as ruuterile tuleb edastada info kõigist teada olevatest ruutingutest st kohalikest ja õle BGP teiste ruuterite käest õpitutest
- deny ja allow kirjed näitavad, milliseid üle BGP esitatud ruutinguid kõnealune ruuter õpib ja milliseid mitte; viimasena klappivat reeglit rakendatakse
AS 65102 - Tallinn
# cat /etc/bgpd.conf # global configuration AS 65102 router-id 192.168.23.102 network 10.2.0.0/24 neighbor 192.168.12.101 { remote-as 65101 descr AS65101 } neighbor 192.168.23.103 { remote-as 65103 descr AS65103 } neighbor 192.168.25.105 { remote-as 65105 descr AS65105 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
kus
- network 10.2.0.0/24 - ruuter levitab ise (ingl. k. router is originating 10.2.0.0/24 network) selle võrgu ruutinguid, st sellele võrgule saab ligi kõnealuse ruuteri kaudu
AS 65103 - Narva
# cat /etc/bgpd.conf # global configuration AS 65103 router-id 192.168.37.103 neighbor 192.168.23.102 { remote-as 65102 descr AS65102 announce all } neighbor 192.168.37.107 { remote-as 65107 descr AS65107 announce all } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
AS 65104 - Pärnu
# cat /etc/bgpd.conf # global configuration AS 65104 router-id 192.168.46.104 neighbor 192.168.14.101 { remote-as 65101 descr AS65101 announce all } neighbor 192.168.45.105 { remote-as 65105 descr AS65105 announce all } neighbor 192.168.46.106 { remote-as 65106 descr AS65106 announce all } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
AS 65105 - Tartu
# cat /etc/bgpd.conf # global configuration AS 65105 router-id 192.168.45.105 neighbor 192.168.45.104 { remote-as 65104 descr AS65104 } neighbor 192.168.25.102 { remote-as 65102 descr AS65102 announce all } neighbor 192.168.56.106 { remote-as 65106 descr AS65106 announce all } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
AS 65106 - Võru
# cat /etc/bgpd.conf # global configuration AS 65106 router-id 192.168.56.106 network 10.6.0.0/24 neighbor 192.168.46.104 { remote-as 65104 descr AS65104 } neighbor 192.168.56.105 { remote-as 65105 descr AS65105 } neighbor 192.168.67.107 { remote-as 65107 descr AS65107 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
AS 65107 - Pihkva
# cat /etc/bgpd.conf # global configuration AS 65107 router-id 192.168.67.107 neighbor 192.168.67.106 { remote-as 65106 descr AS65106 announce all } neighbor 192.168.37.103 { remote-as 65103 descr AS65103 announce all } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
eBGP kasutamine
BGP tarkvara käivitamiseks tuleb öelda
# bgpd
kusjuures algul võib olla abi käivitades võtmetega -v ja -d selleks, et programm väljastaks rohkem infot ja töötaks foregroundis
# bgpd -vd
Parsitud seadistusfaili sisu esitatakse öeldes
# bgpd -nv
BGP töötab kolme bgpd protsessina
# ps aux | grep bgpd root 3387 0.0 0.5 812 1312 p0 I+ 12:07PM 0:00.01 bgpd: parent (bgpd) _bgpd 22260 0.0 0.5 864 1304 p0 I+ 12:07PM 0:00.01 bgpd: route decision engine (bgpd) _bgpd 22081 0.0 0.5 1060 1408 p0 S+ 12:07PM 0:00.34 bgpd: session engine (bgpd)
Töötava BGP ruuteri haldamiseks on kasutada utiliit bgpctl, nt küsides ruuteris voru kokkuvõtet tuleb öelda
# bgpctl show summary Neighbor AS MsgRcvd MsgSent OutQ Up/Down State/PrfRcvd AS65107 65107 310 308 0 02:32:58 4 AS65105 65105 317 314 0 02:35:40 7 AS65104 65104 317 314 0 02:35:40 7
mis tähendab, et kõnealune ruuter suhtleb kolme loetletud AS'iga.
Selleks, et saada teada, milliste ASide kaudu toimub andmevahetus 10.2.0.0/24 võrguga tuleb öelda
# bgpctl show ip bgp | grep 10.2.0.0 *> 10.2.0.0/24 192.168.56.105 100 0 65105 65102 i * 10.2.0.0/24 192.168.46.104 100 0 65104 65101 65102 i * 10.2.0.0/24 192.168.67.107 100 0 65107 65103 65102 i
ning saame teada, et liiklus toimub läbi AS 65105 ja AS 65102.
Üks BGP kasutamise põhjus seisneb selles, et kui mõni võrgusõlm rikneb, siis süsteem hääletab ruutingud automaatselt ümber. Kui nt peatada BGP deemon ruuteris tartu, siis peaks hakkama liiklus käima läbi parnu või pihkva ruuteri; lülitades tartu tagasi tööle, liiklus läbi tartu taastub. Oluline on seejuures, et säilivad otspunktide vahelised tcp sessioonid, kuna ruuterid töötavad iseenesest IP kihis.
Lihne moodust asjakorraldust selles suhtes kontrollida on seadistada ruuteris tallinn lo1 võrguseade
# ifconfig lo1 create # ifconfig lo1 10.2.0.102/24
ning vorus
# ifconfig lo1 create # ifconfig lo1 10.6.0.106/24
Seejärel saab kasutada vorus pingi
# ping -I 10.6.0.106 10.2.0.102
või ssh'd
# ssh -b 10.6.0.106 10.2.0.102
Korrektsem testimine oleks kui ühendada voru ja tallinn ruuterite külge mõne nö päris vastav 10.x.x.x subnet.
iBGP kasutamine
Öeldakse, et AS sees töötavad BGP ruuterid on omavahel iBGP suhetes kusjuures
- kõik sama AS sees töötavad ruuterid peavad olema omavahel otse ühendatud, mis teeb praktiliselt üle nelja viie BGP ruuteri pidamise samas AS'is keerukaks (kuigi selle probleemi lahendamiseks on mitmeid nö abivõtted, nt ruutingupeeglid (ingl. k. route reflectors))
- iBGP peerilt saadud ruutisid ei edastata (teistele iBGP peeridele)
- omavahelisesl info edastamisel iBGP peerilt saadud attribuute ei muudeta
- omavahelisel info edastamisel iBGP ruuterid ei muuda AS Path'i sh nexthop väärtust
- et iBGP ruuterid saaksid töötada, peavad nad üldiselt saama kasutada nö alumises kihis ka ruutingu mõttes toimivat võrku andmete edastamiseks; praktiliselt tähendab see nt seda, et iBGP ruuterites on käivitatud lisaks BGP tarkvarale ka IGP tarkvara, nt OSPF
- iBGP peerid ei pruugi olla omavahel otse füüsiliste ühendustega ühendatud, töötamiseks on vajalik TCP ühendus (eBGP peerid on seevastu tavaliselt füüsiliselt otse ühendatud)
Üks iBGP praktilist kasutust selgitav juhtum võiks olla nt selline, kus kliendi ruuteri subnet on ühendatud kahe teenusepakkujaga
AS 65107 AS 65103 | | 192.168.56.106 - em1 __|__ __|__ em1 - 192.168.25.102 | | | | ruuter-isp-1 |_____| |_____| ruuter-isp-2 | | em0 - 192.168.23.102 192.168.67.106 - em0 | | | | | | | | 192.168.67.107 - em0 __|__ __|__ em0 - 192.168.23.103 | | | | ruuter-klient-1 | R1 | | R2 | ruuter-klient-2 |_____| |_____| | | 192.168.37.107 - em1 | | em1 - 192.168.37.103 | AS 65108 | | iBGP full mesh | --------|------------|-------------|------------|-------------|------ | OSPF | | | | | __|__ em0 __|__ em0 __|__ em0 | | 192.168.37.3 | | 192.168.37.4 | | 192.168.37.5 | R3 | | R4 | | R5 | |_____| |_____| |_____| em1 | .1 em1 | .1 em1 | .1 | | | -----|------------ -----|------------ -----|------------ 10.0.3.0/24 10.0.4.0/24 10.0.5.0/24
kus
- kliendi ruuterites R1 - R5 töötab BGP tarkvara
- kliendi ruuterid on oma ühte võrguseadet pidi seadistatud ühte nö kliendi ruuterite 192.168.37.0/24 subnetti
- R1 - R5 ruuterid on seadistatud omavahel peerima moodustades iBGP full meshi (ruuterite vahel on ka füüsiliste ühenduste full mesh)
- R1 ja R2 ruuterid peerivad lisaks vastavalt AS 65107 ja AS 64103 ruuteritega
- 192.168.37.0/24 subnetis töötab OSPF
Kui nt iBGP meshi ruuterid on BGP abil õppinud, et paketi aadressile 10.45.45.45 saatmiseks on nexthop ruuter-isp-1 aadress 192.168.67.106, siis ruuterite R3, R4 ja R5 taga olevates subnettides olevate arvutite jaoks, nt 10.0.3.15 näitel, töötab paketi liikumine selliselt
- arvuti 10.0.3.15 (mida skeemil ei ole näidatud) vaikelüüsiks on staatiliselt seadistatud 10.0.3.1
- arvuti 10.0.3.15 saadab välja paketi aadressile 10.45.45.45 mis peab jõudma ruuter-isp-1 juurde välja (ja liigub sealt edasi)
- R3 ruuter teab tänu BGP'le, et see pakett tuleb saata edasi vastava ASi nexthop aadressile 192.168.67.106
- R3 ruuter teab tänu OSPF'ile, et paketi aadressile 192.168.67.106 saatmiseks tuleb kasutada lüüsi 192.168.37.107
Võrgu ühendamine kahe teenusepakkujaga
Võrgu ühendamisel mitme teenusepakkujaga on tavaliselt eesmärgiks saavutada parem st redundantsem võrguühendus ühenduse olemasolu mõttes, aga mitte niivõrd liikluse koormusjaotust korraldada. Järgnevas tutvustatakse asjakorraldust, kus võrguühenduseks on kasutada kaks erinevat internetiteenusepakkujat ning kliendi võrguseadmed sh ruuterid on dubleeritud. Kliendi võrguühendusel on sellised omadusel
- ühendus avaliku võrguga jääb toimima ühe teenusepakkuja võrgus toimuvate tõrgete puhul
- ühendus avaliku võrguga jääb toimima ühe teenusepakkuja ja kliendi vahelise ühenduse riknemisel
- ühendus avaliku võrguga jääb toimima kui rikneb üks kliendi ruuter või switch
- ühendus avaliku võrguga toimub eelistatud läbi teenusepakkuja isp1 ehk joonisel vasakpoolse
Tehnilises mõttes saab rakendada toodud kasutusjuhtu ka ühe teenusepakkuja kahe võrgusõlme kasutamisel, aga lahenduse sisuline tähendus siis muutub vähem redundantseks. Praktiliselt võib kliendi ruuterites kasutada lisaks ka paketifiltri funktsionaalsust, st ruuterid on lisaks ka kliendi tulemüürideks.
Sõltuvalt võimalustest ja konkreetsetest vajadustest peab klient otsustama, kas kasutada avalikku ASN numbrit või ta lepib oma teenusepakkujatega kokku mingi privaatse ASN kasutamise.
Järgnevas testis on tegelikult kasutatud ülaltoodud virtuaalseid arvuteid ja nendevahelisi ühendusi, narva ja pihkva ruutereid on kasutatud kliendi ruuteritena; voru ja tallinn on vastavalt ISP 1 ja ISP 2.
Lähtetingimused ja eesmärk
Olgu kliendi võrgu 192.168.37.0/24 (AS 65108) ühendamiseks internetiga kasutada kaks teenusepakkujat suheldes kummagagi nende ühe ruuteri kaudu
- ISP 1 - AS 65107 (ühenduspunkt 192.168.67.106)
- ISP 2 - AS 65103 (ühenduspunkt 192.168.23.102)
kusjuures mõlemad teenusepakkujad on nõus seadistama kliendiga kaks bgp ühendust (mis kasutavad sama füüsilist kanalit).
Kliendi võrgu internetti ühendamiseks on kasutada kaks ruuterit ja kaks switchi, kumbagi switchi on ühendatud kaks erinevate ruuterite porti ning ühe ISP'i port. Ühendatava võrgu poolt on kasutuses neli ip aadressi
- 192.168.23.107 - ruuter-1
- 192.168.67.107 - ruuter-1
- 192.168.23.103 - ruuter-2
- 192.168.67.103 - ruuter-2
Skeem
Üldiselt on skeemil kujutatud
- suvaline arvuti internetis, ip aadressiga 10.5.0.12, AS 65105; selle abil saab kontrollida seadistatud süsteemi nõuetekohast töötamist
- kõrgendatud võrgulise redundantsusega kliendi võrk 192.168.37.0/24, AS 65108, mis jääb allapoole 'kliendi võrgu piir' tähistust
- kliendi võrgus töötavate arvutite vaikelüüsi aadress 192.168.37.254 on carp seadmel, mis on kas ühe või teise füüsilise ruuteri juures
- võrk on ühendatud kahe teenusepakkuja ISP 1 (AS 65107) ja ISP 2 (AS 65103) ruuterite abil internetiga
___ | | arvuti |___| 10.5.0.12 | ------|--------|----- | _|_ AS 65105 | | ruuter |___| | ... internet ... ... _|_ _|_ | | | | |___| |___| | | AS 65107 ..... AS 65103 ... | | 192.168.56.106 - em1 ___|_ _|___ em1 - 192.168.25.102 | | | | ruuter-isp-1 |_____| |_____| ruuter-isp-2 | | em0 - 192.168.23.102 192.168.67.106 - em0 | | .... kliendi võrgu piir .... _|___ ___|_ switch-1 | | | | switch-2 |_____|---, ,---|_____| | \ / | | \/ | | / \ | | / \ | 192.168.67.107 - em0 | / \ | em0 - 192.168.23.103 192.168.23.107 - em1 _|_|_ _|_|_ em1 - 192.168.67.103 | | | | ruuter-1 |_____| |_____| ruuter-2 | AS 65108 | 192.168.37.107 - em2 | carp1 192.168.37.254 | em2 - 192.168.37.103 | | | | --|----------------|-------|--|----- _|_ _|_ _|_ | | | | | | |___| |___| |___| arvuti-1 arvuti-2 arvuti-3 ip: 192.168.37.108 gw: 192.168.37.254
Täpsemalt on skeemil kujutatud
- ruuter-isp-1 - ühe teenusepakkuja ruuter, üks pool vaatab nö isp'i AS võrgu sisse; teine kliendi poole oma ühe pordiga
- ruuter-isp-2 - teise teenusepakkuja ruuter, üks pool vaatab nö isp'i AS võrgu sisse; teine kliendi poole oma ühe pordiga
- switch-1,2 - kliendi switchid
- ruuter-1 - kliendi üks ruuter, millel on kaks nö interneti-poolset võrguseadet em0 ja em1, need on ühendatud ühe ühe ja teine teise isp'iga läbi erinevate switchide
- ruuter-2 - kliendi teine ruuter, millel on kaks nö interneti-poolset võrguseadet em0 ja em1, need on ühendatud ühe ühe ja teine teise isp'iga läbi erinevate switchide
- arvuti-1,2,3 - kliendi arvutid, mille vaikelüüsiks on carp1 seadmega seotud ip aadress 192.168.37.254
- ruuter - ühe suvalise internetis oleva AS 65105 ruuter ja selle taga AS'i kuuluv arvuti, 10.5.0.12
Kliendi ruuterite seadistamine
BGP seadistamiseks sobib kasutada ruuteris ruuter-1 sellist bgpd seadistusfaili
# cat /etc/bgpd.conf # global configuration AS 65108 router-id 192.168.37.103 network 192.168.37/24 # ISP 1 neighbor 192.168.67.106 { remote-as 65106 descr AS65106 depend on carp1 demote carp } # ISP 2 neighbor 192.168.23.102 { remote-as 65102 descr AS65102 set prepend-neighbor 1 set prepend-self 1 } # IBGP naaber neighbor 192.168.37.103 { remote-as 65108 descr AS65108 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
ja ruuteris ruuter-2 sellist seadistusfaili
# cat /etc/bgpd.conf # global configuration AS 65108 router-id 192.168.67.107 network 192.168.37/24 # ISP 1 neighbor 192.168.67.106 { remote-as 65106 descr AS65106 } # ISP 2 neighbor 192.168.23.102 { remote-as 65102 descr AS65102 depend on carp1 demote carp set prepend-neighbor 1 set prepend-self 1 } # IBPG naaber neighbor 192.168.37.107 { remote-as 65108 descr AS65108 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
Seadistusfailides on seadistatud kahte tüüpi BGP ühendused
- eBGP (exterior BGP) - kommentaaride ISP1 ja ISP2 all toodud naabritega suhtlemist kirjeldavad sektsioonid
- iBGP (interior BGP) - kõik sama AS sees töötavad BGP serverid peavad olema omavahel otse ühendatud ja seadistatud suhtlema seadistusfailis esitatud viisil, sektsioon kommentaariga '# IBPG naaber'; muus osas on see tavaline sektsiooni, kuid remote-as väärtus langab kokku globaalse sektsiooni AS väärtusega; öeldakse ka nii, et AS sees töötavate BGP ruuterite vahel peab moodustuma full mesh
CARP ja OpenBGPD
Kliendi võrgu arvutites kasutatakse vaikelüüsina CARP seadme carp1 aadressi 192.168.37.254, mille seadistamiseks on lülitatud sisse carp preemt
# grep preempt /etc/sysctl.conf net.inet.carp.preempt=1
ning ühes ruuteris on /etc/hostname.carp1 sellise sisuga
# cat /etc/hostname.carp1 inet 192.168.37.254 255.255.255.0 192.168.37.255 advskew 128 vhid 107 carpdev em2 pass parool
ja teises
# cat /etc/hostname.carp1 inet 192.168.37.254 255.255.255.0 192.168.37.255 advskew 0 vhid 107 carpdev em2 pass parool
Lisaks on kasutatud bgpd.conf seadistusparameetrid
- depend on carp1 - et kontrollida bgp sessiooni olekut sõltuvalt sellest, milline on carp seadme olek; kui carp seade on backup olekus, siis vastav bgp sessioon on Idle olekus ja kui carp seade liigub masterisse, siis bgp sessioon hakkab tööle
- demote carp - et kontrollida carp seadme olekut tulenevalt sellest, milline on bgp sessiooni olek; kui nt teine osaline ei räägi enam bgp'd, siis carp seadme master olek viiakse backup olekusse
Masteris
# bgpctl show int Interface Nexthop state Flags Link state carp113 ok UP CARP, master ..
ja slave'is
# bgpctl show int Interface Nexthop state Flags Link state carp113 invalid UP CARP, backup ...
Teenusepakkujate ruuterite seadistamine
Lahenduse terviklikkuse huvides on esitatud, milline võiks olla teenusepakkujate bgpd seadistus OpenBGPD tarkvara kasutamise korral.
ruuter-isp-1
# cat /etc/bgpd.conf # global configuration AS 65106 router-id 192.168.56.106 # kliendi üks bgp ühendus neighbor 192.168.67.107 { remote-as 65108 descr AS65108 announce all } # kliendi teine bgp ühendus neighbor 192.168.67.103 { remote-as 65108 descr AS65108 announce all } # näiteks, mingi muu naaber neighbor 192.168.56.105 { remote-as 65105 descr AS65105 announce all } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
ruuter-isp-2
# cat /etc/bgpd.conf # global configuration AS 65102 router-id 192.168.23.102 # kliendi üks bgp ühendus neighbor 192.168.23.103 { remote-as 65108 descr AS65108 announce all } # kliendi teine bgp ühendus neighbor 192.168.23.107 { remote-as 65108 descr AS65108 announce all } # näiteks, mingi muu naaber neighbor 192.168.25.105 { remote-as 65105 descr AS65105 announce all } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
Oluline on tähele panna, et
- teenusepakkuja announce'ib kliendile kõiki ruutinguid, mida ta teab
- teenusepakkuja on ettevalmistanud omalt poolt kaks bgp ühenduspunkti selle kliendi võrgu ühenduseks
Süsteemi töö kontrollimine
Süsteemi töö kontrollimiseks tuleb teha prooviks need katkestused, mille süsteem on planeeritud üle elama
- kliendi ühe ruuteri katkestus, nt reboot
- kliendi ruuterite vahel carp seadme abil vaikelüüsi ümberlülitamine
- ühe teenusepakkujaga ühenduse katkestamine
Mitte ühelgi juhul ei tohi kliendi võrgus töötavad arvutid kaotada eemal AS 65105 võrgus töötava arvutiga 10.5.0.12 tcp ühendust.
Oluline on tähele panna, et esitatud asjakorraldus ei ela üle kui ainult bgpd deemon ise lakkab töötamast.
TODO
- kas bgp'd kasutada active või passive režiimis
- kas erinevate teenusepakkujate ühendusi prioritiseerida ja püüda nt teha mingit load-balance'ingut
Kahe lokatsiooni ühendamine teenusepakkuja võrguga kahe ühenduspunkti kaudu
Eesmärgiks on teenuseid pakkuva võrgusegmendi kaks eksemplari, nö põhiline ja sekundaarne lokatsioon, ühendada ühe ja sama teenusepakkuja võrguga kahe punkti kaudu, kusjuures ühenduspunktides kasutatakse erinevaid ip aadresse.
_____ | | smtp client |_____| | 172.3.1.31 | -> 172.16.0.13:25 ------------|----------|-- | internet ..... | __|__ em2 172.31.1.254 | | 10.0.21.190/24 em0 | R5 | em1 10.0.22.190/24 ,------------------|_____|-------------------, | | | ....... | | teenusepakkuja võrk | | ... | | | 10.0.21.254/24 em1 __|__ ISP AS 65111 __|__ em1 10.0.22.254/24 | | iBGP | | | R1 |--------------------------------------| R2 | |_____| em2 192.168.10.1 192.168.10.2 em2 |_____| 192.168.111.161/29 em0 | | em0 192.168.111.113/29 | | | | | | 192.168.111.162/29 em0 __|__ __|__ em0 192.168.111.114/29 | | | | | R3 | | R4 | |_____| |_____| 10.0.13.1/24 em1 | | em1 10.0.13.1/24 | AS 65100 AS 65100 | | | | | | | | | --------|---|---- ----|---|-------- | | __|__ 10.0.13.13/24 __|__ 10.0.13.13/24 | | | | |_____| stmp server |_____| smtp server
kus
- teenusepakkuja ruuterid R1, R2 ja R5 moodustavad iBGP nn mesh'i nii loogilises kui füüsilises mõttes (st kõik kolm ruuterit on omavahel füüsiliselt otse ühendatud)
- R3, R4 - ruuterid kahe sisemiselt identselt seadistatud lokatsiooni ees, mis on valmis vaheldumisi teenuseid pakkuma
Teenusepakkuja IGP seadistused
Teenusepakkuja kasutab iBGP ruuterite all IGP protokollina OSPF'i ning osalistel on OpenOSPFD seadistatud selliselt
- R1
# cat /etc/ospfd.conf router-id 195.80.111.161 redistribute connected # areas area 0.0.0.0 { interface em1 }
- R2
# cat /etc/ospfd.conf router-id 195.80.111.113 redistribute connected # areas area 0.0.0.0 { interface em1 }
- R5
# cat /etc/ospfd.conf router-id 172.31.1.254 redistribute connected # areas area 0.0.0.0 { interface em0 interface em1 }
Teenusepakkuja BGP seadistused
OpenBGPD on seadistatud teenusepakkuja ruuterites selliselt
- R1
# global configuration AS 65111 router-id 192.168.111.161 log updates # iBGP mesh neighbor 10.0.21.190 { remote-as 65111 descr AS65111 } # iBGP mesh neighbor 192.168.10.2 { remote-as 65111 descr AS65111 } # naaber AS65100 neighbor 192.168.111.162 { remote-as 65100 descr AS65100 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
- R2
# global configuration AS 65111 router-id 192.168.111.113 log updates # iBGP mesh neighbor 10.0.22.190 { remote-as 65111 descr AS65111 } # iBGP mesh neighbor 192.168.10.1 { remote-as 65111 descr AS65111 } # naaber A65100 neighbor 192.168.111.114 { remote-as 65100 descr AS65100 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
- R5
# global configuration AS 65111 router-id 172.31.1.254 network 172.31.1.0/24 log updates # iBGP mesh neighbor 10.0.21.254 { remote-as 65111 descr AS65111 } # iBGP mesh neighbor 10.0.22.254 { remote-as 65111 descr AS65111 } # filter out prefixes longer than 24 or shorter than 8 bits allow from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
Kliendi lokatsioonide eBGP seadistused
Kliendi kahes lokatsioonis töötab OpenBGPD tarkvara nn eBGP režiimis, sellise seadistusega
- R3
# global configuration AS 65100 router-id 192.168.111.162 network 10.0.13.0/24 log updates # neighbor 192.168.111.161 { remote-as 65111 descr AS65111 set prepend-self 2 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
- R4
# global configuration AS 65100 router-id 192.168.111.114 network 10.0.13.0/24 log updates # neighbor 192.168.111.113 { remote-as 65111 descr AS65111 set prepend-self 3 } # filter out prefixes longer than 24 or shorter than 8 bits deny from any allow from any inet prefixlen 8 - 24 # do not accept a default route deny from any prefix 0.0.0.0/0 # filter bogus networks deny from any prefix 169.254.0.0/16 prefixlen >= 16 deny from any prefix 192.0.2.0/24 prefixlen >= 24 deny from any prefix 224.0.0.0/4 prefixlen >= 4 deny from any prefix 240.0.0.0/4 prefixlen >= 4
kus
- selleks, et BGP ruuting eelistaks R3 ruuteri taga olevat lokatsiooni, kasutatakse seal väiksemat prepend-self väärtusi
Süsteemi kasutamine
Selleks, et teenusepakkuja asuks ruutima teenusega seotud avalikke 10.0.13.0 aadresse ühte või teise lokatsiooni tuleb muuda prepend-self väärtusi ning kehtestada bgpd.conf muudatus öeldes
# bgpctl reload
Teenusepakkuja ruuterites on abiks kontrollida nexthop väärtusi, korrektsel juhul peab olema tulemus midagi sellist
R5 # bgpctl show nexthop Nexthop State 192.168.111.162 valid
R4 # bgpctl show rib flags: * = Valid, > = Selected, I = via IBGP, A = Announced origin: i = IGP, e = EGP, ? = Incomplete flags destination gateway lpref med aspath origin I*> 10.0.13.0/24 192.168.111.162 100 0 65100 65100 65100 i * 10.0.13.0/24 192.168.111.114 100 0 65100 65100 65100 65100 i I*> 172.31.1.0/24 10.0.22.190 100 0 i
BGP andmevahetuse turvalisus
Selleks, et muuta BGP osaliste andmevahetus turvalisemaks sobib kasutada nende osaliste vastavatest sektsioonides 'tcp md5sig password' direktiivi, nt selliselt (teisel osaliselt sama tcp ... direktiiv)
neighbor 192.168.111.161 { remote-as 65101 descr AS65101 depend on carp113 demote carp tcp md5sig password salajanejargnevus }
Transparent AS
Asugu kolm AS'i järjest
R100 R101 R102 AS 65100 <---- AS 65101 <---- AS 65102 <--- intenet
ning olgu vajalik selline asjakorraldus, et internetist poleks näha AS path peal AS 65101. Selleks sobib kasutada
ruuteri R101 sektsiooni
neighbor 192.168.101.2 { remote-as 65101 descr AS65101 announce all transparent-as yes }
ja ruuteris R102
neighbor 192.168.102.2 { remote-as 65102 descr AS65102 announce all enforce neighbor-as no }
OpenBGPD looking glass
OpenBSD tarkvara baaskomplektis sisaldub man bgplg (looking glass for the OpenBSD Border Gateway Protocol daemon) tarkvara, mis on cgi skript arvutis töötava bgpd tegevuse vaatamiseks.
Tulemusena saab brauseris esitada nt andmed parasjagu olemas olevate naabrite kohta
Märkused
Järgnevas on püütud tuua ära olulised asjaolud, mille arvestamisest võib olla kasu.
Ruutingutee otsuse tegemine
Ruutingutee (ingl. k. AS-path) üle tehakse otsust sellistel kaalutlustel ja sellises järjekorras, http://unduli.bsws.de/papers/linuxforum2006/
- check if prefix is eligible a.k.a reachable
- localpref, bigger is better
- aspath length, the shorter the better
- origin, the lower the better
- MED decision, only comparable between the same neighboring AS
- EBGP is cooler than IBGP
- weight, bigger is better (extension)
- route age: older is better (extension, off by default)
- lowest BGP ID wins
- lowest peer address wins
- BGP puhul saab erinevalt OSPF protokollist välja kuulutada ka otseselt ruuteris mitte seadistatud seadmetele vastavaid võrke.
BGP naaber ei ole otse ühendatud
BGP naabrid ei pruugi olla tingimata otse ühendatud, st ei pea asuma samas subnetis. Kui AS65100 BGP ruuteri naaber on kättesaadav vaikelüüsi kaudu (eeldusel, et vaikelüüs on staatiliselt seadistatud), siis sobib kasutada seadistusfaili globaalses osas nexthop parameetrit selliselt
# global configuration AS 65100 router-id 192.168.111.162 network 10.0.13.0/24 nexthop qualify via default
Teine variant, kasutada neighbor sektsioonis set nexthop direktiivi (ja vajadusel lisaks multihop arv, et ttl'id otsa ei saaks), nt
neighbor 10.246.205.154 { remote-as 65201 descr yksasutus local-address 10.204.62.114 announce IPv4 unicast multihop 13 set nexthop 10.204.62.118 }
Vaikimisi kasutab bgpd ainult staatiliselt või teiste ruutingudeemonite, nt ospfd poolt seadistatud ruutinguid.
Privaatse AS varjamine
2009 aasta sügisel ei ole võimalik OpenBGPD tarkvara abil varjata ühte AS'i teise abil. Nt ei saa lahendada sellist ülesannet
R1 R2 R3 AS private ------ AS public ------- AS another public 65100 65101 65102 192.168.101.1 192.168.101.2 192.168.102.3 192.168.102.2
kus
- kõigis AS'ides kasutatakse avalikke ip aadresse
- R1, R2, R3 on vastavate AS'de BGP ruuterid
- AS 65100 on privaatne AS, muud on avalikud (kuigi näites on kasutatud kõiki privaatseid numbreid iseenesest)
- R3 bgpctl show rib väljundis ei ole näha R1 aadressruumi kohta mitte AS5100, vaid AS65101
Usutavasti võib seda olukorda nimetada teatud mõttes AS kihis toimuva NATi või proximisena.
Loopback aadressi kasutamine
Tundub, et bgpd ei pahanda, kui bgp peer ei ole kättesaadav nö otse st samas subnetis asuva aadressiga, vaid oma loopback aadressiga. bgpd enda puhul saab kasutusele võtta loopback seadme seadistades nt lo1 seadme öeldes
# ifconfig lo1 create # ifconfig lo1 10.81.0.1/24
ning kasutades neighbor sektsioonides direktiivi
local-address 10.81.0.1
Naabrid saavad seda aadressi kasutada kusjuures kui naabrib on ka bgpd'd, siis peaksid nad lisama sobiva staatilise ruutingu, et kõnealune loopback aadress oleks iseenesest ligipääsetav.
loopback aadressi kasutamisel on oluline, et ka ruuterist väljuvad ühendused paistaksid kõnealuselt src ip aadressilt lähtuvatena. Nt kui OpenBSD ruuteri peer on Cisco ruuter ning OpenBSD kasutab Cisco loopback aadressi, siis peab Cisco poolt algatatud ühenduse src ip olema mitte tema OpenBSD poolse võrguseadme ip aadress vaid loopback ip aadress.
BGP TCP paketi TTL
Vaikimisi on BGP TCP paketi TTL 1, mis tähendab, et andmevahetus on võimalik vaid otse omavahel ühendatud ruuterite vahel.
Ruutingutabeli koormuse vähendamine
Kui BGP peeril on ainult üks uplink, st default gateway on kindlalt teada, siis on mõttekas kasutada deny ja allow reegleid sellist, et rib baas ega ruutingutabel ei risustuks suure hulga sissekannetega, nt
... deny from any deny to any # allow from 192.168.112.99 allow to 192.168.112.99
Sel juhul küll tekib õigustatud küsimus, milleks üldse BGP'd kasutada.
BGP Capabilities
BGP peer teatab suhtlemise algul oma capabilitid, nt
# bgpctl show nei BGP neighbor is 10.10.11.1, remote AS 65001 Description: AS65001 BGP version 4, remote router-id 10.10.11.1 BGP state = Established, up for 10:44:46 Last read 00:00:15, holdtime 90s, keepalive interval 30s Neighbor capabilities: Multiprotocol extensions: IPv4 unicast, IPv4 vpn Route Refresh 4-byte AS numbers ...
Route reflectors
TODO
IPv6 kasutamine
Põhimõtteliselt toimub IPv6 ruutingutega töötamine sarnaselt kui IPv4 ruutingutega. Üks OpenBSD bgpd protsess võib töötada nn dual-stack režiimis, st tegeleb sama-aegselt mõlema IP protokolliga. Kui peer on samuti dual-stack, siis reeglina võiks nende vahel olla kaks kanalit
- üle IPv6 kanali toimub IPv6 ruutinguid puudutavate sõnumite vahetus
- üle IPv4 kanali toimub IPv4 ruutinguid puudutavate sõnumite vahetus
Näiteks võiks kasutada dual-stack puhul sellist bgpd.conf seadistusfaili
AS 65000 router-id 10.80.111.162 listen on 10.80.111.162 listen on 2001:db8:1:179::2 network 195.80.127.128/30 network 2001:db8:1:180::/64 nexthop qualify via default log updates neighbor 10.80.111.161 { remote-as 65001 descr AS65001 depend on carp106 announce IPv4 unicast local-address 10.80.111.162 } neighbor 2001:db8:1:179::1 { remote-as 65001 descr AS65001 announce IPv6 unicast local-address 2001:db8:1:179::2 } deny from any allow from any inet prefixlen 8 - 24 allow from any inet6 prefixlen 16 - 48 # do not accept a default route deny from any prefix 0.0.0.0/0 deny from any prefix ::/0 # filter bogus networks according to RFC5735 deny from any prefix 0.0.0.0/8 prefixlen >= 8 deny from any prefix 10.0.0.0/8 prefixlen >= 8 deny from any prefix 127.0.0.0/8 prefixlen >= 8 ... # filter bogus IPv6 networks according to IANA deny from any prefix ::/8 prefixlen >= 8 deny from any prefix 2001:2::/48 prefixlen >= 48 ...
kus
- annouce määrab selgelt millise peeriga millise protokolli ruutingutega tegeldakse
- kummagi protokolliga vaikelüüsi ei aktsepteerita
- mitmesugused avalikus võrgu mitte kasutusel olevad ruudid välistatakse
Kasulikud lisamaterjalid
- http://www.openbgpd.org/
- OpenSPFD_kasutamine_OpenBSD'ga
- http://en.wikipedia.org/wiki/Border_Gateway_Protocol
- http://www.mail-archive.com/misc@openbsd.org/msg06121.html
- http://etutorials.org/Networking/Integrated+cisco+and+unix+network+architectures/Chapter+10.+ISP+Connectivity+with+BGPv4-An+Exterior+Gateway+Path-Vector+Routing+Protocol+for+Interdomain+Routing/
- http://www.cisco.com/web/learning/netacad/course_catalog/PacketTracer.html
- http://safari.oreilly.com/ Practical BGP, Russ White, Danny McPherson, Sangli Srihari
- http://www.networx.ch/The%20Design%20and%20Implementation%20of%20OpenBGPD.pdf
- GNS3
- http://unduli.bsws.de/papers/linuxforum2006/