Caricamento contenuto pagina

È possibile caricare il contenuto per la pagina indicata sotto. Se viene cambiato il nome della pagina, è possibile caricare il contenuto per un'altra pagina. Se il nome della pagina è lasciato vuoto, il nome della pagina viene ipotizzato dal nome del file.

File da cui caricare il contenuto della pagina
Nome pagina
Commento
Tanto va la gatta al lardo che ci lascia lo?

Italiano English
Modifica History Actions

RouterBgpRouteReflectorClient

Router Bgp Route Reflector Client

Come è possibile leggere nella guida sull'architettura di rete i router BGP che comunicano verso l'esterno sono tra di loro in configurazione full-mesh: essi ricevono e trasmettono da e ai peering le sottoreti. Se dall'interno della rete (che come IGP usa OLSR) volessimo contattare direttamente la rete dei BGP per trasportare un indirizzo pubblico e attuare politiche di routing verso l'esterno dovremmo mettere un router BGP interno (IBGP) che riceve solo gli annunci provenienti da tutti i BGP di bordo e delegare l'annuncio dell'aggregato ad uno di essi. Questa funzione è assolta dal Route Reflector Server che altro non fa che spedire la full-route a tutti i suoi client che a questo punto possono instradare il loro traffico verso il router di bordo più opportuno. Quindi prima di iniziare la configurazione è necessario avere:

  • Un indirizzo pubblico della rete Ninux richiedendolo a contatti(at)ninux(dot)org.
  • Assegnarsi un indirizzo Tabella Rete BGP 10.6.6.0/24 su Gestione Indirizzi

TincVPN setup to enter the BGP virtual network

Installare Tinc versione 1.0.23 scaricandolo dal sito www.tinc-vpn.org e compilandolo.

#cd <directory di tinc scompattato>
#./configure
#make
#make install

Configurare tinc per collegarsi a uno dei router BGP

/usr/local/etc/tinc/tinc.conf

Name = mionome
ConnectTo = namex
Mode = switch

creare la directory /usr/local/etc/tinc/hosts

creare il file namex in /usr/local/etc/tinc/hosts

Address = 10.185.0.1 

creare il file tinc-up in /usr/local/etc/tinc

ip link set dev tap0 up
ip a a dev tap0 10.6.6.X/24 

generare hosts/mionome eseguendo il comando:

#tincd -K

A questo punto facciamo partire la sessione Tinc

/usr/local/sbin/tincd --bypass-security --pidfile=/var/run/tinc.pid --logfile=/var/log/tinc.log

Vedi BIRD#BGP route reflector client per usare BIRD al posto di Quagga.

Compile quagga

scaricare quagga dal github di ninux branch openwrt.0.99.21

eseguire

# bootstrap.sh
# ./configure --localstatedir=/var/run/quagga
# make
# make install

Creare l'utente quagga e le cartelle log

#adduser --no-create-home --disabled-login --disabled-password quagga
#mkdir /var/log/quagga
#chown quagga:quagga /var/log/quagga
#mkdir /var/run/quagga
#chown quagga:quagga /var/run/quagga

Attenzione: la directory /var/run/quagga scompare al reboot quindi è necessario mettere le ultime due righe in rc.local

Configure quagga

/etc/quagga/zebra.conf

hostname myhostname
password mypassword
enable password myenablepassword
ip forwarding
ipv6 forwarding
log file /var/log/quagga/zebra.log

/etc/quagga/bgpd.conf

hostname myhostname
password password mypassword
enable myenablepassword
log stdout
line vty

router bgp 197835
 bgp router-id 10.6.6.X_myID
 network mysubnet/mymask
 neighbor 10.6.6.1 remote-as 197835
 neighbor 10.6.6.1 description RouteReflector
 neighbor 10.6.6.1 next-hop-self
 neighbor 10.6.6.1 soft-reconfiguration inbound


 address-family ipv6
 network myaddress/mymask
 neighbor 10.6.6.1 activate
 neighbor 10.6.6.1 next-hop-self
 neighbor 10.6.6.1 soft-reconfiguration inbound
 exit-address-family

line vty

Per lanciare il tutto lanciare a mano prima zebra e poi bgpd

zebra -d -f /etc/quagga/zebra.conf -i /var/run/quagga/zebra.pid
bgpd -d -f /etc/quagga/bgpd.conf -i /var/run/quagga/bgpd.pid

Configurare il peering con il nostro client sul Router Reflector da consolle:

> ena
# configure t
(config)# router bgp 197835
(config)# neighbor 10.6.6.X_MyId  remote-as 197835
(config)# neighbor 10.6.6.X_MyId description mionome
(config)# neighbor 10.6.6.X_MyId next-hop-self
(config)# neighbor 10.6.6.X_MyId soft-reconfiguration inbound
(config)# neighbor 10.6.6.X_MyId route-map IBGP in
(config)# neighbor 10.6.6.X_MyId route-reflector-client

Se la macchina che avrà l'ip pubblico è quella su cui gira il server BGP allora occorre assegnare l'ip pubblico ad una delle interfacce (per esempio quella del tunnel):

# ip a a <your public ip> dev bgp_niniux

facciamo in modo che zebra inserisca le rotte nella tabella di routing forzando come ip sorgente quello pubblico, in zebra.conf aggiungiamo:

route-map PUBLIC_NINUX permit 10
set src <IP PUBBLICO>
ip protocol bgp route-map PUBLIC_NINUX

Verifichiamo tutti gli rp_filter siano a 0.

# for i in ./*/rp_filter; do
> cat $i
> done

Se c'è qualche 1 allora nell'rc.local tocca azzerarlo inserendo la riga.

echo 0 > /proc/sys/net/ipv4/conf/<NOME DELL'INTERFACCIA>/rp_filter

Se la macchina che fa da BGP accede a gli annunci OLSR allora bisogna configurare il plugin olsr per quagga, altrimenti se il BGP è dietro un router OLSR, su quest'ultimo aggiungiamo la rotta statica (in rc.local per renderla permanente al reboot):

ip r a t 110 <IP_PUBBLICO>/32 via <IP LAN DEL BGP>

Note

Usare un router iBGP e' un'alternativa ad usare i tunnel GRE anycast per il traffico in uscita:

In caso di tunnel GRE anycast:

  • i pacchetti arrivano fino all'endpoint GRE piu' vicino
  • entrano nella VPN iBGP
  • se il router BGP di uscita e' quello vicino all'endpoint, il traffico esce
  • altrimenti il traffico viene inoltrato tramite la VPN iBGP al router BGP di uscita

In caso di router iBGP:

  • il traffico passa nella VPN iBGP e va direttamente al router BGP di uscita