<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>RouterBgpRouteReflectorClient</title><revhistory><revision><revnumber>22</revnumber><date>2016-09-17 15:47:00</date><authorinitials>host6-232-dynamic.234-95-r.retail.telecomitalia.it</authorinitials></revision><revision><revnumber>21</revnumber><date>2014-11-09 23:07:09</date><authorinitials>leonaard</authorinitials><revremark>added link to rp_filter</revremark></revision><revision><revnumber>20</revnumber><date>2014-11-09 22:55:55</date><authorinitials>leonaard</authorinitials><revremark>added link to BIRD</revremark></revision><revision><revnumber>19</revnumber><date>2014-01-05 21:16:12</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>18</revnumber><date>2013-12-29 18:23:23</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>17</revnumber><date>2013-12-29 17:03:17</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>16</revnumber><date>2013-12-29 16:51:43</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>15</revnumber><date>2013-12-11 20:46:00</date><authorinitials>FaByS</authorinitials></revision><revision><revnumber>14</revnumber><date>2013-12-11 20:44:38</date><authorinitials>FaByS</authorinitials></revision><revision><revnumber>13</revnumber><date>2013-12-01 16:39:40</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>12</revnumber><date>2013-11-30 19:16:37</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>11</revnumber><date>2013-11-30 18:22:21</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>10</revnumber><date>2013-11-30 18:14:21</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>9</revnumber><date>2013-11-30 17:43:01</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>8</revnumber><date>2013-11-30 16:01:49</date><authorinitials>2001:4c00:893b:fab5:1:0:9:67</authorinitials></revision><revision><revnumber>7</revnumber><date>2013-11-28 23:01:23</date><authorinitials>ZioPRoTo</authorinitials></revision><revision><revnumber>6</revnumber><date>2013-11-28 22:55:06</date><authorinitials>2001:4c00:893b:f2:8848:cc16:4355:fc0f</authorinitials></revision><revision><revnumber>5</revnumber><date>2013-11-28 22:54:23</date><authorinitials>ZioPRoTo</authorinitials></revision><revision><revnumber>4</revnumber><date>2013-11-28 22:52:27</date><authorinitials>2001:4c00:893b:f2:8848:cc16:4355:fc0f</authorinitials></revision><revision><revnumber>3</revnumber><date>2013-11-28 22:17:17</date><authorinitials>ZioPRoTo</authorinitials></revision><revision><revnumber>2</revnumber><date>2013-11-28 22:16:26</date><authorinitials>2001:4c00:893b:f2:8848:cc16:4355:fc0f</authorinitials></revision><revision><revnumber>1</revnumber><date>2013-09-09 12:57:30</date><authorinitials>ZioPRoTo</authorinitials></revision></revhistory></articleinfo><section><title>Router Bgp Route Reflector Client</title><para>Come è possibile leggere nella guida sull'<ulink url="http://blog.ninux.org/wp-content/uploads/2012/06/NinuxRoma-RoutingArchitecture-DocumentVersion0.pdf">architettura di rete</ulink> 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: </para><itemizedlist><listitem><para>Un indirizzo pubblico della rete Ninux richiedendolo a contatti(at)ninux(dot)org. </para></listitem><listitem><para>Assegnarsi un indirizzo Tabella Rete BGP 10.6.6.0/24 su Gestione Indirizzi </para></listitem></itemizedlist><section><title>TincVPN setup to enter the BGP virtual network</title><para>Installare Tinc versione 1.0.23 scaricandolo dal sito www.tinc-vpn.org e compilandolo. </para><screen><![CDATA[#cd <directory di tinc scompattato>
#./configure
#make
#make install]]></screen><para>Configurare tinc per collegarsi a uno dei router BGP </para><para>/usr/local/etc/tinc/tinc.conf </para><screen><![CDATA[Name = mionome
ConnectTo = namex
Mode = switch]]></screen><para>creare la directory /usr/local/etc/tinc/hosts </para><para>creare il file namex in /usr/local/etc/tinc/hosts </para><screen><![CDATA[Address = 10.185.0.1 ]]></screen><para>creare il file tinc-up in /usr/local/etc/tinc </para><screen><![CDATA[ip link set dev tap0 up
ip a a dev tap0 10.6.6.X/24 ]]></screen><para>generare hosts/mionome eseguendo il comando: </para><screen><![CDATA[#tincd -K]]></screen><para>A questo punto facciamo partire la sessione Tinc </para><screen><![CDATA[/usr/local/sbin/tincd --bypass-security --pidfile=/var/run/tinc.pid --logfile=/var/log/tinc.log]]></screen><para>Vedi <ulink url="http://www.ninux.org/RouterBgpRouteReflectorClient/BIRD#BGP route reflector client">BIRD#BGP route reflector client</ulink> per usare BIRD al posto di Quagga. </para></section><section><title>Compile quagga</title><para>scaricare quagga dal github di ninux branch openwrt.0.99.21 </para><para>eseguire  </para><screen><![CDATA[# bootstrap.sh
# ./configure --localstatedir=/var/run/quagga
# make
# make install]]></screen><para>Creare l'utente quagga e le cartelle log </para><screen><![CDATA[#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]]></screen><para>Attenzione: la directory /var/run/quagga scompare al reboot quindi è necessario mettere le ultime due righe in rc.local </para></section><section><title>Configure quagga</title><para>/etc/quagga/zebra.conf </para><screen><![CDATA[hostname myhostname
password mypassword
enable password myenablepassword
ip forwarding
ipv6 forwarding
log file /var/log/quagga/zebra.log]]></screen><para>/etc/quagga/bgpd.conf </para><screen><![CDATA[hostname myhostname
password password mypassword
enable myenablepassword
log stdout
line vty
]]><![CDATA[
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
]]><![CDATA[
]]><![CDATA[
 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
]]><![CDATA[
line vty]]></screen><para>Per lanciare il tutto lanciare a mano prima zebra e poi bgpd </para><screen><![CDATA[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]]></screen><para>Configurare il peering con il nostro client sul Router Reflector da consolle: </para><screen><![CDATA[> 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]]></screen><para>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): </para><screen><![CDATA[# ip a a <your public ip> dev bgp_niniux]]></screen><para>facciamo in modo che zebra inserisca le rotte nella tabella di routing forzando come ip sorgente quello pubblico, in zebra.conf aggiungiamo: </para><screen><![CDATA[route-map PUBLIC_NINUX permit 10
set src <IP PUBBLICO>
ip protocol bgp route-map PUBLIC_NINUX]]></screen><para>Verifichiamo tutti gli <ulink url="http://www.ninux.org/RouterBgpRouteReflectorClient/Reverse%20Path%20Filter#">rp_filter</ulink> siano a 0.  </para><screen><![CDATA[# for i in ./*/rp_filter; do
> cat $i
> done]]></screen><para>Se c'è qualche 1 allora nell'rc.local tocca azzerarlo inserendo la riga. </para><screen><![CDATA[echo 0 > /proc/sys/net/ipv4/conf/<NOME DELL'INTERFACCIA>/rp_filter]]></screen><para>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): </para><screen><![CDATA[ip r a t 110 <IP_PUBBLICO>/32 via <IP LAN DEL BGP>]]></screen></section><section><title>Note</title><para>Usare un router iBGP e' un'alternativa ad usare i tunnel GRE anycast per il traffico in uscita: </para><para>In caso di tunnel GRE anycast: </para><itemizedlist><listitem><para>i pacchetti arrivano fino all'endpoint GRE piu' vicino </para></listitem><listitem><para>entrano nella VPN iBGP </para></listitem><listitem><para>se il router BGP di uscita e' quello vicino all'endpoint, il traffico esce </para></listitem><listitem><para>altrimenti il traffico viene inoltrato tramite la VPN iBGP al router BGP di uscita  </para></listitem></itemizedlist><para>In caso di router iBGP: </para><itemizedlist><listitem><para>il traffico passa nella VPN iBGP e va direttamente al router BGP di uscita </para></listitem></itemizedlist></section></section></article>