888
Commento:
|
5190
added link to BIRD
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 3: | Linea 3: |
Intro | Come è possibile leggere nella guida sull'[[http://blog.ninux.org/wp-content/uploads/2012/06/NinuxRoma-RoutingArchitecture-DocumentVersion0.pdf|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 |
Linea 7: | Linea 13: |
x | 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. |
Linea 11: | Linea 61: |
scaricare quagga dal github di ninux branch openwrt.0.99.21 | |
Linea 12: | Linea 63: |
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 |
|
Linea 15: | Linea 84: |
zebra.conf | /etc/quagga/zebra.conf |
Linea 26: | Linea 95: |
bgpd.conf | /etc/quagga/bgpd.conf |
Linea 29: | Linea 98: |
password mypassword | password password mypassword |
Linea 52: | Linea 121: |
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> }}} |
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>