== How To Configurare IPv6 == Lo scopo di questa pagina è quello di aiutare nella configurazione di IPv6 delle antenne nella fase di deployment di questo protocollo sulla rete ninux. Dato che è in fase di sperimentazione potrebbero verificarsi la necessità di ulteriori passaggi non inclusi in questa guida. In quel caso è bene integrare la seguente pagina. == Requirements == 1) Firmware che supporti IPv6 (scaricabile da [[http://nnx.me/sburratone4|qui]] - MD5SUM: 225baa919da285498549568e99916595 ) 2) Un indirizzo IPv4 sulle interfacce ath0 e eth0 (nel caso sceglierli nella pagina GestioneIndirizzi) == Come aggiornare il firmware == ''' /!\ ATTENZIONE QUESTO FIRMWARE E' STATO PROVATO E TESTATO CON I SEGUENTI APPARATI: Ubiquiti Nanostation M5, Ubiquiti !AirGrid 5, Ubiquiti NanoBridge 5.''' Per aggiornare il firmware alla versione che supporta IPv6 basta semplicemente accedere alla cartella dove è stato scaricato, rinominarlo e copiarlo nella cartella /tmp/ dell'Access Point. Quindi ad esempio con scp: {{{ mv XM.v5.3.3.sdk.9634.111221.2238.bin fwupdate.bin && scp fwupdate.bin root@:/tmp/ }}} a questo punto fare l'accesso all'antenna in ssh e digitare: {{{ /sbin/ubntbox fwupdate.real -m /tmp/fwupdate.bin -d }}} dopo qualche "strano output" :-) la connessione ssh dovrebbe chiudersi...calmi, è tutto normale! Provare quindi a ricollegarsi dopo qualche secondo e verificare che i file di configurazione non siano stati modificati (es. configurazione di olsr, ip delle interfacce, etc..) == Creazione dello script per IPv6 == Dopo aver aggiornato il firmware, bisogna creare lo script di avvio per la configurazione automatica degli ip delle interfacce in IPv6. '''''__ {i} __ __Premessa__''''': per le interfacce wireless (ath0) si utilizza la subnet '''''2001:4c00:893b:1::/128''''', per le hna6 basta sceglierne una, nella pagina GestioneIndirizzi, da annunciare agli altri (per questa guida noi utilizzeremo la '''''2001:4c00:893b:caca::/64''''') La logica da seguire per la configurazione delle interfacce ath0 ed eth0 è la seguente: Considerando l'attuale indirizzo IPv4 dell'interfaccia wireless ath0 (es. 172.16.174.1) prendere il 3 e il 4 ottetto (174 e 1) e sostituirli al posto di X e Y nella subnet per le interfacce wireless '''''2001:4c00:893b:1:X::Y/128''''' (quindi nel nostro caso: IPv4: 172.16.174.1 --> IPv6: 2001:4c00:893b:1:'''174'''::'''1'''/128) Per l'interfaccia eth0, dopo aver scelto la subnet da annunciare (es. 2001:4c00:893b:caca::/64) prendere l'ultimo ottetto dell'attuale indirizzo IPv4 della eth0 (es. dell'indirizzo 192.168.105.102 prendere solo 102) e sostituirlo alla X dell'indirizzo 2001:4c00:893b:caca::X/64 (quindi nel nostro caso: IPv4/eth0: 192.168.105.102 --> IPv6/eth0: 2001:4c00:893b:caca::102/64) Una volta ricavati gli indirizzi IPv6 delle interfacce ath0 ed eth0 creare un nuovo file chiamato "ninux" in /etc/persistent/ con il comando {{{ vi /etc/persistent/ninux }}} una volta dentro vi digitare {{{ :set noautoindent }}} premere il tasto " i " per entrare nella modalità di "Insert" e incollare il seguente script avendo cura di sostituire gli indirizzi IP con quelli sopra ricavati {{{ ( sleep 60 if [ -e /etc/persistent/olsrd.conf ]; then olsrd -f /etc/persistent/olsrd.conf -d 0 elif [ -e /olsrd.conf ]; then olsrd -f /olsrd.conf -d 0 fi insmod ip_tables insmod iptable_filter #insmod ip_conntrack #insmod ip_nat #insmod iptable_nat #echo 300 > /proc/sys/net/ipv4/netfilter/ip_conntrack_timeout_established echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra ip -6 addr flush dev eth0 scope global ip -6 addr flush dev ath0 scope global ip addr add 2001:4c00:893b:1:174::1/128 dev ath0 ip addr add 2001:4c00:893b:caca::102/64 dev eth0 olsrd -f /etc/persistent/olsrd6.conf -d 0 radvd -C /etc/persistent/radvd.conf ) & }}} '''Nota:''' Chi avessse bisogno di rimuovere un default gateway che non riesce a togliere dalla interfaccia grafica (bug noto a tutti) puo' inserire questa riga prima delle parentesi '') &'' {{{ route del default gw }}} una volta incollato e modificato gli IP premere "ESC" e digitare {{{ :wq }}} a questo punto per verificare che sia tutto memorizzato correttamente dare il comando: {{{ cat /etc/persistent/ninux }}} in output dovrebbe comparirvi lo script che avete appena incollato! ''' /!\ ATTENZIONE verificate che gli IPv6 appena inseriti in questo script siano giusti. Un errore rischia di mettere fuori uso la rete''' Dare i permessi di esecuzione allo script con il comando: {{{ chmod a+x /etc/persistent/ninux }}} == Configurazione OLSRv6 == OLSR è il protocollo di routing utilizzato nella rete ninux per permette ai vari Access Point di scambiarsi le rotte e quindi inoltrare le informazioni in modo corretto. OLSR ha bisogno di una ulteriore istanza per il protocollo IPv6. Sull'antenna quindi risulteranno attivi due daemond OLSR, uno per IPv4 e uno per IPv6. Chiaramente questi due demoni utilizzano dei files di configurazione differenti. La configurazione di OLSR quindi è abbastanza semplice. Basta semplicemente creare questo file di configurazione (se non già presente) sempre in /etc/persistent/ con il comando: {{{ vi /etc/persistent/olsrd6.conf }}} Una volta dentro l'editor di test, dare i seguenti comandi: {{{ :set noautoindent }}} premere il tasto "i" per entrare in Insert Mode e incollare il seguente template '''avendo cura di sostituire tra le parentesti graffe dell'hna6''': {{{ DebugLevel 0 IpVersion 6 Pollrate 0.025 FIBMetric "flat" UseNiit no SmartGateway no Hna6 { #Inserire qui la subnet IPv6 scelta nella pagina GestioneIndirizzi 2001:4c00:893b:caca:: 64 } UseHysteresis no TcRedundancy 2 MprCoverage 7 LinkQualityLevel 2 LinkQualityAlgorithm "etx_ff" LinkQualityAging 0.05 LinkQualityFishEye 1 LoadPlugin "olsrd_txtinfo.so.0.1" { PlParam "port" "2007" PlParam "Accept" "::" } InterfaceDefaults { HelloInterval 3.0 HelloValidityTime 125.0 TcInterval 2.0 TcValidityTime 500.0 MidInterval 25.0 MidValidityTime 500.0 HnaInterval 10.0 HnaValidityTime 125.0 } Interface "ath0" "eth0" { Mode "mesh" IPv6Multicast FF02::6D } }}} dopo aver incollato il template premere "ESC" e dare il comando {{{ :wq }}} Verifichiamo che sia tutto ok visualizzando il file appena creato: {{{ cat /etc/persistent/olsrd6.conf }}} dovrebbe venirvi fuori la configurazione appena incollata. ''' /!\ ATTENZIONE verificate che gli IPv6 appena inseriti in questo script siano giusti. Un errore rischia di mettere fuori uso la rete''' == Configurazione Radvd == Il '''Router ADVertisement Daemon''' è molto utile in una LAN quando i client devono essere configurati automaticamente. E' una sorta di configuratore automatico di IPv6. Questo router ascolta le RS (Router Solicitations) e risponde con delle RA (Router Advertisement) oltre che inviare delle unsolicited RAs ogni tanto. Per configurarlo basta creare un file nella cartella /etc/persistent/ con il comando {{{ vi /etc/persistent/radvd.conf }}} Una volta dentro l'editor di testo, dare i seguenti comandi: {{{ :set noautoindent }}} premere il tasto "i" per entrare in Insert Mode e incollare il seguente template avendo cura di sostituire la subnet con quella scelta precedentemente nella pagine GestioneIndirizzi, quindi nel nostro caso (con la subnet 2001:4c00:893b:caca::/64) avremo: {{{ interface eth0 { AdvSendAdvert on; MinRtrAdvInterval 3; MaxRtrAdvInterval 10; AdvLinkMTU 1280; prefix 2001:4c00:893b:caca::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; }; }}} dopo aver incollato il template premere "ESC" e dare il comando {{{ :wq }}} Verifichiamo che sia tutto ok visualizzando il file appena creato: {{{ cat /etc/persistent/radvd.conf }}} dovrebbe venirvi fuori la configurazione appena incollata. ''' /!\ ATTENZIONE verificate che gli IPv6 appena inseriti in questo script siano giusti. Un errore rischia di mettere fuori uso la rete''' == Solo per chi utilizza come username di accesso qualcosa di diverso da root (es ubnt) == Correggiamo i permessi perchè alcune macchine stentano ad avviare radvd se non hanno i permessi settati in questo modo (rimuovere i permessi di scrittura agli other) {{{ chmod 400 /etc/persistent/radvd.conf }}} nello script ninux il comando di avvio di radvd deve includere la direttiva -u ubnt (o quello che si utilizza) per cui le ultime due righe dello script devono diventare qualcosa di simile a questo {{{ .... radvd -C /etc/persistent/radvd.conf -u ubnt ) & }}} == Rendere il tutto "persistent" == La configurazione è terminata. Per rendere persistenti le modifiche fatte e riavviare l'antenna dare il comando: {{{ cfgmtd -w -p /etc/ && reboot }}} == Verifica == Una volta riavviata l'antenna verificate che l'interfaccia ath0 e la eth0 abbiamo effettivamente preso gli indirizzi indicati nello script "ninux" con i comandi: {{{ ifconfig ath0 ath0 Link encap:Ethernet HWaddr 00:15:6D:9C:46:C8 inet addr:172.16.174.1 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: 2001:4c00:893b:1:174::1/128 Scope:Global inet6 addr: fe80::215:6dff:fe9c:46c8/64 Scope:Link UP BROADCAST RUNNING PROMISC ALLMULTI MULTICAST MTU:1500 Metric:1 RX packets:701231 errors:0 dropped:0 overruns:0 frame:0 TX packets:562196 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:591008817 (563.6 MiB) TX bytes:184695095 (176.1 MiB) ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:15:6D:9D:46:C8 inet addr:192.168.105.102 Bcast:192.168.105.255 Mask:255.255.255.0 inet6 addr: 2001:4c00:893b:caca::102/64 Scope:Global inet6 addr: fe80::215:6dff:fe9d:46c8/64 Scope:Link UP BROADCAST RUNNING PROMISC ALLMULTI MULTICAST MTU:1500 Metric:1 RX packets:553188 errors:0 dropped:0 overruns:0 frame:0 TX packets:677134 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:112033873 (106.8 MiB) TX bytes:571749011 (545.2 MiB) }}} ''' /!\ ''''''ATTENZIONE!!! La direttiva "sleep" all'inizio dello script "ninux" potrebbe far tardare l'assegnazione dell'IPv6 all'interfaccia. Questa direttiva è stata inserita per essere sicuri che l'IP venga assegnato solo una volta che l'antenna si sia correttamente allineata a livello fisico!''' ''' {i} Nota''': Per poter raggiungere un altro punto IPv6 i vostri hop intermedi devono supportare IPv6. Se un nodo nel percorso fino a destinazione non supporta IPv6 il vostro pacchetto si fermerà li non permettendovi di raggiungere la vostra destinazione.