Italiano English
Modifica History Actions

Differenze per "RouterBgpRouteReflectorClient"

Differenze tra le versioni 4 e 19 (in 15 versioni)
Versione 4 del 2013-11-28 22:52:27
Dimensione: 1751
Autore: 2001:4c00:893b:f2:8848:cc16:4355:fc0f
Commento:
Versione 19 del 2014-01-05 21:16:12
Dimensione: 5111
Autore: 2001:4c00:893b:fab5:1:0:9:67
Commento:
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:
Linea 5: Linea 7:
Il primo passo è farsi assegnare un indirizzo pubblico da contatti(at)ninux(dot)org.

Assegnarsi un indirizzo Tabella Rete BGP 10.6.6.0/24


  * 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 15: Linea 13:
Installare Tinch versione 1.0.23 scaricandolo dal sito www.tinc-vpn.org e compilandolo. Installare Tinc versione 1.0.23 scaricandolo dal sito www.tinc-vpn.org e compilandolo.
Linea 17: Linea 15:
{{{
#cd <directory di tinc scompattato>
#./configure
#make
#make install
}}}
Linea 20: Linea 24:
tinc.conf /usr/local/etc/tinc/tinc.conf
Linea 22: Linea 26:
aaaaaaaaa Name = mionome
ConnectTo = namex
Mode = switch
Linea 25: Linea 31:
tinc-up 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
}}}
Linea 29: Linea 59:
scaricare quagga dal gitup di ninux branch openwrt.0.99.21 scaricare quagga dal github di ninux branch openwrt.0.99.21
Linea 31: Linea 61:
eseguire bootstrap.sh
./configure
eseguire
{{{
# bootstrap.sh
# ./configure --localstatedir=/var/run/quagga
# make
# make install
}}}
Linea 34: Linea 69:
Creare l'utente quagga e le cartelle log
Linea 35: Linea 71:



{{{
#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 42: Linea 82:
zebra.conf /etc/quagga/zebra.conf
Linea 53: Linea 93:
bgpd.conf /etc/quagga/bgpd.conf
Linea 56: Linea 96:
password mypassword password password mypassword
Linea 82: Linea 122:
zebra -d -f /etc/quagga/zebra.conf -i /tmp/zebra.pid
bgpd -d -f /etc/quagga/bgpd.conf -i /tmp/bgpd.pid
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
Linea 93: Linea 133:
(config)#
(config)#
(config)#
(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
Linea 100: Linea 141:

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

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>