RFC Sperimentazione OLSR V2 a Roma
Con il 2015 finirà il supporto per OLSR V1, il protocollo attualmente in produzione nell'isola romana. La presente pagina vuole essere una base comune per organizzare la sperimentazione di olsr2 attualmente in versione alpha.
Roadmap
OLSR2 non è compatibile e non interoperabile nativamente con la versione precedente quindi occorre un approccio simile a quello adottato per l'IPV6 a livello mondiale, ovvero avere entrambi operativi. Per ottenere questa migrazione ci sarà bisogno:
- Di un FW per routing in antenna (airOS e Openwrt)
- Di un FW per il routing a terra (Openwrt)
- Spazio di indirizzamento IPv6 e IPv4 disgiunti dall'attuale indirizzamento.
- Policy Routing atto ad effettuare l'interoperabilità
L'idea è quella di avere inizialmente nodi che supportono entrambi i protocolli. Quando un nodo è connesso solo e soltanto a nodi dual-olsr deve essere possibile per lui commutare alla versione "solo olsr v2" rimanendo interconnesso.
Firmware per il routing sulle antenne (airOS)
Per la vesione modicata di AIROS (nome in codice Sburratone) si avranno le seguenti versioni partendo dall'SDK airOS 5.5.2:
SburratoneV2.x : con OLSR v1 e v2 interoperanti
SburratoneV3.x : con solo OLSR v2
Firmware OpenWRT
Per la versione Openwrt si potrebbe convergere sul progetto Libre-Mesh facendo:
- Plugin per OLSR V1
- Plugin per OLSR V2
in questo modo si ottimizzano gli sforzi con un progetto comune.
Spazio di indirizzamento
La rete OLSRv2 utilizzerà per Roma lo spazio 10.16.0.0/14 così assegnata: Si immagina una X su roma centrata su "Stazione Termini" dividendo Roma in 4 quadranti: Nord,Est,Sud,Ovest.
- 10.16.0.0/16: Nord
- 10.17.0.0/16: Est
- 10.18.0.0/16: Sud
- 10.19.0.0/16: Ovest
Il motivo è quello del routing dei privati verso le isole. Al momento il BGP isole è solo in un punto ma se dovesse essercene un altro la divisione geografica potrebbe aiutare il bilanciamento del traffico in ingresso. Per lo stesso motivo, ovvero bilanciamento del traffico in ingresso e simmetrizzazione dello stesso, va fatto per IPV6 dove già ci sono 2 punti di traffico in uscita ma solo uno è utilizzato per l'ingresso. Data l'estensione dello spazio di indirizzi si potrebbe usare un nibble più significativo dell'indirizzo per settare il proprio punto in ingresso del traffico (scalabile fino a 16 BGP in IPv6)
Rules
Ad ogni nodo è assegnata una sottorete /24 presa in funzione della posizione geografica, segna qui: http://wiki.ninux.org/GestioneIndirizzi#Tabella_Subnet_Roma_OLSR_V2 e segna qui: http://indirizzi.ninux.org
Le interfacce radio NON hanno indirizzi IP. Per un nodo dual-olsr dove l'interfaccia radio ha l'indirizzo ip per olsrv1 si duplica l'interfaccia utilizzando il macvlan: ip link add link <eth0.103> name <vradio103> type macvlan. Sostituire <eth0.103> con il nome dell'interfaccia radio (o vlan) e a <vradio103> il nome da assegnare
http://wiki.ninux.org/OlsrAndOlsr2Coexistence
olsr2.conf
Il file di configurazione è il seguente:
[domain=0] table 111 [domain=1] table 112 [domain=150] table 150 [domain=151] table 151 [domain=152] table 152 [domain=153] table 153 [domain=154] table 154 [domain=155] table 155 [domain=156] table 156 [domain=157] table 157 [domain=158] table 158 [domain=159] table 159 [domain=160] table 160 [olsrv2] lan 10.10x.y.0/24 domain=0 # lan 0.0.0.0/0 domain=1 [interface=vradio103] [interface=vradio104]
Tutti gli annunci delle network private "10.10x.y.0/24" vengono annunciate con il dominio "0" (una sorta di tag) e viene costruita la tabella di routing 111.
Gli annunci del da le default (nattate) vengono annunciate con il dominio "1" e viene costruita la tabella di routing 112.
I domini 150 a 160 ci sono gli annunci delle default non nattate (dai BGP) uno per ogni rete pubblica.
Routing Tables
110 -> local routes
111 -> olsrV2 router (domain 0)
112 -> olsrV2 adsl default (domain 1)
150..160 -> Default BGP
222 -> olsrV1 routes
223 -> olsrV1 default
224 -> default per la lan (adsl locale)
225 -> full route (if node has bgp router)
254 -> pubblici default di sistema
Regole Policy Routing
LAN=10.10x.y.0/24 # -------------------------------------------- # tables: # 111 -> olsrV2 router (domain 0) # 112 -> olsrV2 adsl default (domain 1) # 150 -> Default BGP 176.62.53.0/24 # 151 -> Default BGP 44. # 222 -> olsr router v1 # 223 -> olsr default # 224 -> default per la lan # 225 -> full route # 254 -> pubblici default di sistema # 110 -> local sleep 5 #Copy local routes only from table main 254 to table 110 ip route show table 254 | grep -Ev ^default | grep -Ev ^blackhole | while read ROUTE ; do MASK=`echo "${ROUTE}" | awk '{print $1}' | awk -F/ '{print $2}'` if [ "$MASK" -ne 16 ] ; then ip route add table 110 $ROUTE fi done #Sposto la rotta di default DEF_ROUTE=`ip route show table 254 | grep ^default` if [ -n "$DEF_ROUTE" ] ; then ip route add table 224 $DEF_ROUTE ip route del table 254 $DEF_ROUTE fi #First evaluate local routes ip rule add from all lookup 110 pref 30 #Private routes to OLSRv2 table ip rule add to 10.16.0.0/14 table 111 pref 35 #Private routes to OLSRv1 table ip rule add to 10.0.0.0/8 table 222 pref 40 #Private routes to OLSRv2 table ip rule add to 10.16.0.0/14 table 111 pref 35 #Private routes to OLSRv1 table ip rule add to 10.0.0.0/8 table 222 pref 40 ip rule add to 172.16.0.0/12 table 222 pref 40 ip rule add to 192.168.0.0/16 table 222 pref 40 #Ninux IP Addresses to OLSRv2 table ip rule add to 176.62.53.0/24 table 111 pref 41 ip rule add from 176.62.53.0/24 table 111 pref 41 #Ninux IP Addresses to OLSRv1 table ip rule add to 176.62.53.0/24 table 222 pref 42 ip rule add from 176.62.53.0/24 table 222 pref 42 #main and blackholes ip rule add from all lookup 254 pref 60 #Lookup default route first from user and then from OLSR ip rule add from $LAN table 224 pref 80 #default annunciata su olsrV2 (ipotesi chi ha V1 ha anche v2) ip rule add from 10.16.0.0/14 lookup 112 pref 85 #Percorso verso i BGP dei pubblici #questa riga deve essere generata dallo script. ip rule add from 176.62.53.0/24 lookup 150 pref 90 #i pacchettii generati dal router vanno alla default locale ip rule add iif lo lookup 224 pref 91 #default annunciata su olsrV1 ip rule add from all lookup 223 pref 100 #Blackhole private aggregates ip route add blackhole 10.0.0.0/8 table 254 ip route add blackhole 172.16.0.0/12 table 254 ip route add blackhole 192.168.0.0/16 table 254 #Blackhole Ninux aggregate ip route add blackhole 176.62.53.0/24 table 254
Note
Presentazione Ninuxday 2016 e Simulatore
https://github.com/fabys77/olsrd2CoreTB
== Download ==
TODO
Altre features
Approfitttando dell'aggiornamento del fw sarebbe il caso di inserire le seguenti features:
- Metodo per aggiungere in modo dinamico gli IP pubblici (WIP)
- Attivare di default il supporto per MLDv2
- Monitoring utilizzando Munin
Task
Task |
Chi |
Note |
Repositorio |
Branch |
Pacchetti SburratoneV2 |
FaByS |
|
olsr_v2_sburratone |