[Ninux-Wireless] Ninux Policy Routing Versione 2 RFC

Saverio Proto zioproto a gmail.com
Mar 9 Apr 2013 00:42:14 CEST


Ciao a tutti,

ieri facendo un po' prove sulla rete Ninux di Roma abbiamo trovato un
difetto nell'attuale Policy Routing:
https://github.com/ninuxorg/SDK.UBNT.v5.5/blob/d559e65713d64fee6c3f28f1d9d180a26756ecf3/package/ubnt-base-files/files/ninux#L36

il problema è che una volta annunciate le due /1, le regole di
blackhole non vengono mai valutate e quindi sono inutili. Design bug,
nonostante le tante eyeballs nessuno se ne è accorto fino a che non
abbiamo messo in campo la configurazione, ed abbiamo iniziato ad
annunciare le /1. Badate, tutto funziona, ma se spariamo un pacchetto
verso una destinazione che non esiste questo segue la /1 fino al
router BGP e li muore.
devo dire che il più sveglio è stato Fabio Capriati perché lui se ne è
accorto sulla carta senza vedere il problema :)

Per gestire meglio la cosa ho scritto una patch di olsrd che permette
di mettere le due /1 in una tabella di routing separata:

https://github.com/ninuxorg/ninux-openwrt-packages/blob/barra1testing/olsrd-ninux/patches/001-put-prefix1-ipv4-networks-to-table-113.patch

Con questa tabella 113 propongo quindi il seguente policy routing:

#110 Local routes
#111 RtTable
#112 RtTableDefault
#113 Special Table for /1
#114 blackholes table

#Copy local routes only from table main 254 to table 110
ip route show table 254 | grep -Ev ^default | grep -Ev ^blackhole |
grep -v ath0 | while read ROUTE ; do
ip route add table 110 $ROUTE
done

#First evaluate local routes
ip rule add from all lookup 110 pref 3

#Private routes to OLSR table
ip rule add to 10.0.0.0/8 table 111 pref 4
ip rule add to 172.16.0.0/12 table 111 pref 4
ip rule add to 192.168.0.0/16 table 111 pref 4

#Ninux IP Addresses to OLSR table
ip rule add to 176.62.53.0/24 table 111 pref 4

#Evaluate blackholes
ip rule add from all table 114 pref 5

#Send traffic of public addresses to BGP border routers
ip rule add from 176.62.53.0/24 table 113 pref 6

#Lookup default route first from user and then from OLSR
ip rule add from all lookup 254 pref 7
ip rule add from all lookup 112 pref 8

#Blackhole private aggregates
ip route add blackhole 10.0.0.0/8 table 114
ip route add blackhole 172.16.0.0/12 table 114
ip route add blackhole 192.168.0.0/16 table 114

#Blackhole Ninux aggregate
ip route add blackhole 176.62.53.0/24 table 114


Questo risolve il problema, quindi ora i blackhole funzionano (a meno
di mie sviste).

Inoltre mitiga il problema dell'aspirapolvere delle /1 (detto alla
Fish). Ovvero andando la /1 in una differente tabella, se uno ha il
policy routing configurato male, dovrebbe matchare più difficilmente
la /1 a meno di farlo proprio di proposito.

ho già compilato una RC5 di Sburratone che ho flashato sul nodo Gallia
e tutto funziona correttamente.

se la soluzione "piace" allora faccio la patch di olsrd più elegante e
cerco di farla mergiare upstream, in modo da non avere un firmware che
dipende da patches specifice di olsrd.

attendo feedback.

ciao,

Saverio



Maggiori informazioni sulla lista Wireless