Differenze tra le versioni di "RoadWarrior"

Da raspibo.
Jump to navigation Jump to search
 
(12 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
=== Scopo ===
+
= Scopo =
  
Questo progetto nasce dall'esigenza di portarsi sempre con se la propria rete anche quando si è in viaggio http://en.wikipedia.org/wiki/Road_warrior_%28computing%29  
+
Il Road Warrior [http://en.wikipedia.org/wiki/Road_warrior_%28computing%29] è una persona che è spesso in viaggio, e fa largo uso del computer.
  
Avere sempre con se una rete wifi sicura e che i nostri dispositivi conoscono ci evita ogni volta di riconfigurarli.
+
Questo progetto nasce dall'esigenza di portarsi sempre con se la propria rete anche quando si è in viaggio.
 +
 
 +
Avere sempre con una rete wifi sicura e che i nostri dispositivi conoscono ci evita di dover riconfigurarli ogni volta.
 +
 
 +
In presenza di captive portal basta collegarsi da un solo dispositivo per dare connettività a tutti gli altri.
 +
 
 +
E' presente anche una wireless sicura che dirotta tutto il traffico attraverso una VPN, in modo da nascondere il traffico sulla rete "ospite" e per accedere alla propria lan senza dover installare in client vpn su ogni dispositivo.
  
 
Il sistema inoltre può essere reso modulare aggiungendo moduli che si connettono ad esempio in wifi, 3G o quello che preferiamo.
 
Il sistema inoltre può essere reso modulare aggiungendo moduli che si connettono ad esempio in wifi, 3G o quello che preferiamo.
  
=== Aggiornamento firmware sul router ===
+
Tutto questo puo' essere realizzato con un access point router di dimensioni compatte, facile da aggiungere al bagaglio, tipicamente il router ha piu' di una interfaccia di rete e magari una porta usb.
 +
 
 +
Gli esperimenti descritti di seguito sono stati condotti su due modelli:
 +
* HooToo Trip Mate Nano [http://www.hootoo.com/hootoo-tripmate-nano-ht-tm02-wireless-portable-router.html] molto compatto con porta Ethernet, wifi, USB
 +
* AUKEY PB-W1, che è un router portatile con powerbank integrato, wifi, ethernet e usb.
 +
 
 +
Il modello del router non e' fondamentale, e' importante che il router sia compatibile con OpenWRT e che abbia almeno 8MB di flash (necessaria per installare OpenVPN).
 +
 
 +
[[File:RoadWarrior Aukey.jpg|400px]][[File:RoadWarrior HooToo.jpg|600px]]
 +
 
 +
= Aggiornamento firmware sul router HooToo =
 +
 
 
In questo caso utilizziamo un piccolo access point portatile su cui installiamo il firmware openwrt, il modello non è importante, quello che conta è che il dispositivo sia compatibile con questo firmware.
 
In questo caso utilizziamo un piccolo access point portatile su cui installiamo il firmware openwrt, il modello non è importante, quello che conta è che il dispositivo sia compatibile con questo firmware.
  
Riga 24: Riga 41:
 
A questo punto ci si può collegare al router con il cavo ethernet.
 
A questo punto ci si può collegare al router con il cavo ethernet.
  
 +
D'ora in poi sara' possibile utilizzare i files con il firmware ufficiale openwrt.
  
Ultimo firmware per hootoo:
+
Riportiamo per comodita' il link dell'ultimo firmware per hootoo (al momento in cui viene editata la pagina): [https://downloads.openwrt.org/chaos_calmer/15.05/ramips/rt305x/openwrt-15.05-ramips-rt305x-ht-tm02-squashfs-sysupgrade.bin openwrt-15.05-ramips-rt305x-ht-tm02-squashfs-sysupgrade.bin]
  
https://downloads.openwrt.org/chaos_calmer/15.05/ramips/rt305x/openwrt-15.05-ramips-rt305x-ht-tm02-squashfs-sysupgrade.bin
 
  
 +
= Configurazione =
  
 +
- Inserire la parte di installazione di openwrt -
  
  
 +
=== Configurazione WiFi client ===
 +
Collegarsi al router all'indirizzo 192.168.1.1.
  
 +
Cambiare indirizzo ip della lan e applicare le modifiche, io ho usato 192.168.250.1. Fatto questo bisogna ricollegarsi al router al nuovo indirizzo.
  
=== Info (by itec, da sistemare) ===
+
Accedere ad internet andando su Network - Wifi.
 
 
Il "RoadWarrior" è un router portatile che permette di condividere una connessione ad internet wireless, in modo sicuro.
 
 
 
Una volta collegato ad un hotspot fornisce facilmente connettività wireless a tutti i dispositivi già associati.
 
 
 
In presenza di captive portal basta collegarsi da un solo dispositivo per dare connettività a tutti gli altri.
 
 
 
E' presente anche una wireless sicura che dirotta tutto il traffico attraverso una VPN, per avere un'uscita verso internet criptata.
 
 
 
 
 
Per fare le prove ho usato un router AUKEY PB-W1, che è un router portatile con powerbanck integrato, wifi, ethernet e usb.
 
 
 
In alternativa si può usare un Hootoo Tripmate Nano, o qualsiasi altro router a patto che riesca a supportare OpenWRT e che abbia almeno 8MB di flash (necessaria per installare OpenVPN
 
 
 
 
 
 
 
=== Howto un po' incasinato ===
 
 
 
- Inserire la parte di installazione di openwrt -
 
  
 +
Cercare una wifi conosciuta facendo scan sulla scheda di rete interna.
  
Collegarsi al router all'indirizzo 192.168.1.1, impostare la password e accedere ad internet andando su Network - Wifi.
+
Impostare la password di rete e salvare applicando le modifiche.
Cercare una wifi conosciuta facendo scan sulla scheda di rete interna
 
  
 +
=== Aggiornamento software e installazione pacchetti ===
  
Collegarsi al router in ssh (per gli utenti windows c'è Putty che funziona molto bene)
+
Collegarsi al router in ssh (ad esempio con il programma Putty).
  
 
Installare i pacchetti dando i seguenti comandi:
 
Installare i pacchetti dando i seguenti comandi:
 +
<source lang=sh>
 
  opkg update
 
  opkg update
 
  opkg install nano
 
  opkg install nano
 
  opkg install luci-ssl
 
  opkg install luci-ssl
 +
</source>
  
 
Voglio usare sue schede wifi, quella integrata per esporre le mie reti, una esterna per collegarsi all'hotspot che fornisce connettività.
 
Voglio usare sue schede wifi, quella integrata per esporre le mie reti, una esterna per collegarsi all'hotspot che fornisce connettività.
  
 
Per il supporto periferiche usb ho dovuto installare i seguenti pacchetti:
 
Per il supporto periferiche usb ho dovuto installare i seguenti pacchetti:
 +
<source lang=sh>
 
  opkg install kmod-usb-core kmod-usb-ohci kmod-usb2
 
  opkg install kmod-usb-core kmod-usb-ohci kmod-usb2
 
+
</source>
 
Per fargli riconoscere la mia scheda wifi "blueway"
 
Per fargli riconoscere la mia scheda wifi "blueway"
 +
<source lang=sh>
 
  opkg install kmod-rt2800-lib kmod-rt2800-usb kmod-rt2x00-lib kmod-rt2x00-usb
 
  opkg install kmod-rt2800-lib kmod-rt2800-usb kmod-rt2x00-lib kmod-rt2x00-usb
 
+
</source>
  
 
Riavviare per permettere al router di individuare la scheda.
 
Riavviare per permettere al router di individuare la scheda.
Riga 80: Riga 88:
  
 
Cancellare le reti, utilizzare la seconda scheda di rete per collegarsi ad internet
 
Cancellare le reti, utilizzare la seconda scheda di rete per collegarsi ad internet
 
Configurare la lan con un ip statico (es 192.168.250.1) e dhcp server
 
 
  
  
Andare su System - system e configurare il nome del dispositivo (che apparirà anche nel nome file quando si salva la configurazione)
+
Andare su System - system e configurare il nome del dispositivo (che apparirà anche nel nome file quando si salva la configurazione). Se non avete idee suggerisco "RoadWarrior"
  
 
Volendo cambiare i server ntp (ntp1.inrim.it,ntp2.inrim.it)
 
Volendo cambiare i server ntp (ntp1.inrim.it,ntp2.inrim.it)
  
 
+
=== Installare openvpn ===
Installare openvpn
+
<source lang=sh>
 
 
 
  opkg install openvpn-openssl
 
  opkg install openvpn-openssl
 
+
</source>
 
Creare un'interfaccia '''slan''', con ip statico diverso dalla lan (es 192.168.251.1), interfaccia fisica slan, e con dhcp
 
Creare un'interfaccia '''slan''', con ip statico diverso dalla lan (es 192.168.251.1), interfaccia fisica slan, e con dhcp
  
 
Creare un'interfaccia '''swan''', unmanaged, con interfaccia fisica tun0
 
Creare un'interfaccia '''swan''', unmanaged, con interfaccia fisica tun0
  
Vanno aggiunte queste righe su etc/config/network
+
Per farlo vanno aggiunte queste righe su etc/config/network
 
+
<source lang=sh>
 
  config interface 'swan'
 
  config interface 'swan'
 
  option ifname 'tun0'
 
  option ifname 'tun0'
Riga 112: Riga 116:
 
  option type 'bridge'
 
  option type 'bridge'
 
  option ifname 'slan'
 
  option ifname 'slan'
 +
</source>
 +
 +
E queste su etc/config/dhcp
 +
<source lang=sh>
 +
config dhcp 'slan'
 +
option start '100'
 +
option leasetime '12h'
 +
option limit '150'
 +
option interface 'slan'
 +
</source>
  
 
Controllare che il dhcp sia attivo sull'interfaccia slan
 
Controllare che il dhcp sia attivo sull'interfaccia slan
  
Applicare le regole firewall [...]
+
Applicare le regole firewall inserendo queste righe su /etc/config/network
 
+
<source lang=sh>
Inserire queste righe su /etc/config/network
 
 
 
 
  config zone
 
  config zone
 
  option input 'ACCEPT'
 
  option input 'ACCEPT'
Riga 153: Riga 165:
 
  option dest 'swan'
 
  option dest 'swan'
 
  option src 'slan'
 
  option src 'slan'
 
+
</source>
  
 
Creare dentro a /etc/openvpn il file client.conf e aggiungere i certificati nella stessa cartella.
 
Creare dentro a /etc/openvpn il file client.conf e aggiungere i certificati nella stessa cartella.
  
 
Il mio è così:
 
Il mio è così:
 
+
<source lang=sh>
 
  client
 
  client
 
  dev tun
 
  dev tun
 
  proto tcp
 
  proto tcp
 
   
 
   
  remote itec78.no-ip.org 443
+
  remote [indirizzo] 443
 
  resolv-retry infinite
 
  resolv-retry infinite
 
  #redirect-gateway def1
 
  #redirect-gateway def1
Riga 184: Riga 196:
 
  route-up "/etc/openvpn/route-up.sh"
 
  route-up "/etc/openvpn/route-up.sh"
 
  keepalive 10 60
 
  keepalive 10 60
 
+
</source>
  
 
E' importante la riga '''route-nopull''' perchè non deve ereditare la tabella di routing dal server
 
E' importante la riga '''route-nopull''' perchè non deve ereditare la tabella di routing dal server
Riga 190: Riga 202:
 
Nella stessa cartella aggiungere anche il file '''route-up.sh''', dargli le autorizzazioni e inserire all'interno il seguente script:
 
Nella stessa cartella aggiungere anche il file '''route-up.sh''', dargli le autorizzazioni e inserire all'interno il seguente script:
  
 +
<source lang=sh>
 
  #!/bin/sh
 
  #!/bin/sh
 
   
 
   
Riga 225: Riga 238:
 
   
 
   
 
  exit 0
 
  exit 0
 
+
</source>
  
 
In questo modo openvpn parte all'avvio e cerca di connettersi al server, una volta connessa crea una tabella di routing specifica per la slan (source routing)
 
In questo modo openvpn parte all'avvio e cerca di connettersi al server, una volta connessa crea una tabella di routing specifica per la slan (source routing)
Riga 248: Riga 261:
 
Ho modificato il file wifiMgr.sh cambiando i nomi delle interfacce e aggiungendo alcune funzioni come segue:
 
Ho modificato il file wifiMgr.sh cambiando i nomi delle interfacce e aggiungendo alcune funzioni come segue:
  
 +
<source lang=sh>
 
  #!/bin/sh
 
  #!/bin/sh
 
  . /etc/wifiMgr/config
 
  . /etc/wifiMgr/config
Riga 391: Riga 405:
 
  echo "Wrong arguments"
 
  echo "Wrong arguments"
 
  fi
 
  fi
+
</source>
  
 
L'avvio con /etc/init.d ha qualche problema, e a volte scollega tutte le wifi ricollegandosi, ma tutto sommato funziona.
 
L'avvio con /etc/init.d ha qualche problema, e a volte scollega tutte le wifi ricollegandosi, ma tutto sommato funziona.
 
 
 
  
 
=== Idee e cose da provare ===
 
=== Idee e cose da provare ===
Riga 413: Riga 424:
 
E' possibile accendere e spegnere il wifi con questo script (che avevo fatto partire con il connect della vpn), da testare
 
E' possibile accendere e spegnere il wifi con questo script (che avevo fatto partire con il connect della vpn), da testare
  
 +
<source lang=sh>
 
  #!/bin/sh
 
  #!/bin/sh
 
   
 
   
Riga 423: Riga 435:
 
   
 
   
 
  exit 0
 
  exit 0
 
+
</source>
  
 
Sarebbe bello utilizzare la porta ethernet come wan per collegarsi via cavo. Impostando un indirizzo ip statico di management in caso di emergenza
 
Sarebbe bello utilizzare la porta ethernet come wan per collegarsi via cavo. Impostando un indirizzo ip statico di management in caso di emergenza
Riga 429: Riga 441:
  
 
Di solito i router hanno 1-2 led. Farebbe comodo sapere dai led se la wan e la vpn sono collegate (lampeggio o accensione continua)
 
Di solito i router hanno 1-2 led. Farebbe comodo sapere dai led se la wan e la vpn sono collegate (lampeggio o accensione continua)
 +
 +
 +
Si potrebbe fare uno script per cambiare automaticamente il canale della scheda wireless integrata in modo che le due schede non si disturbino
 +
 +
 +
[[Category:Progetti]]

Versione attuale delle 23:53, 5 nov 2015

Scopo

Il Road Warrior [1] è una persona che è spesso in viaggio, e fa largo uso del computer.

Questo progetto nasce dall'esigenza di portarsi sempre con se la propria rete anche quando si è in viaggio.

Avere sempre con sè una rete wifi sicura e che i nostri dispositivi conoscono ci evita di dover riconfigurarli ogni volta.

In presenza di captive portal basta collegarsi da un solo dispositivo per dare connettività a tutti gli altri.

E' presente anche una wireless sicura che dirotta tutto il traffico attraverso una VPN, in modo da nascondere il traffico sulla rete "ospite" e per accedere alla propria lan senza dover installare in client vpn su ogni dispositivo.

Il sistema inoltre può essere reso modulare aggiungendo moduli che si connettono ad esempio in wifi, 3G o quello che preferiamo.

Tutto questo puo' essere realizzato con un access point router di dimensioni compatte, facile da aggiungere al bagaglio, tipicamente il router ha piu' di una interfaccia di rete e magari una porta usb.

Gli esperimenti descritti di seguito sono stati condotti su due modelli:

* HooToo Trip Mate Nano [2] molto compatto con porta Ethernet, wifi, USB
* AUKEY PB-W1, che è un router portatile con powerbank integrato, wifi, ethernet e usb.

Il modello del router non e' fondamentale, e' importante che il router sia compatibile con OpenWRT e che abbia almeno 8MB di flash (necessaria per installare OpenVPN).

RoadWarrior Aukey.jpgRoadWarrior HooToo.jpg

Aggiornamento firmware sul router HooToo

In questo caso utilizziamo un piccolo access point portatile su cui installiamo il firmware openwrt, il modello non è importante, quello che conta è che il dispositivo sia compatibile con questo firmware.

Di seguito la procedura per installare openwrt su HooToo, un access point a basso costo, con wifi interno, presa per la rete cablata, alimentato con usb, switch hardware.

L'installazione del firmware è riportata sul wiki di openwrt: http://wiki.openwrt.org/toh/hootoo/tripmate-nano.

Il dispositivo ha bisogno di una memoria usb esterna, ad esempio una chiavetta su cui appoggiare il file con il nuovo firmware.

Per caricare openwrt, spostare lo switch sul router nella posizione "mondo", inserire una chiavetta di memoria usb nello slot.

Collegarsi al router tramite wifi e sull'interfaccia web caricare il firmware openwrt.

Attendere 5 minuti di orologio scollegare l'alimentazione e ricollegarla.

A questo punto ci si può collegare al router con il cavo ethernet.

D'ora in poi sara' possibile utilizzare i files con il firmware ufficiale openwrt.

Riportiamo per comodita' il link dell'ultimo firmware per hootoo (al momento in cui viene editata la pagina): openwrt-15.05-ramips-rt305x-ht-tm02-squashfs-sysupgrade.bin


Configurazione

- Inserire la parte di installazione di openwrt -


Configurazione WiFi client

Collegarsi al router all'indirizzo 192.168.1.1.

Cambiare indirizzo ip della lan e applicare le modifiche, io ho usato 192.168.250.1. Fatto questo bisogna ricollegarsi al router al nuovo indirizzo.

Accedere ad internet andando su Network - Wifi.

Cercare una wifi conosciuta facendo scan sulla scheda di rete interna.

Impostare la password di rete e salvare applicando le modifiche.

Aggiornamento software e installazione pacchetti

Collegarsi al router in ssh (ad esempio con il programma Putty).

Installare i pacchetti dando i seguenti comandi:

 opkg update
 opkg install nano
 opkg install luci-ssl

Voglio usare sue schede wifi, quella integrata per esporre le mie reti, una esterna per collegarsi all'hotspot che fornisce connettività.

Per il supporto periferiche usb ho dovuto installare i seguenti pacchetti:

 opkg install kmod-usb-core kmod-usb-ohci kmod-usb2

Per fargli riconoscere la mia scheda wifi "blueway"

 opkg install kmod-rt2800-lib kmod-rt2800-usb kmod-rt2x00-lib kmod-rt2x00-usb

Riavviare per permettere al router di individuare la scheda. Rientrando su Luci, andare su network - wifi e controllare se è apparsa la seconda interfaccia radio

Cancellare le reti, utilizzare la seconda scheda di rete per collegarsi ad internet


Andare su System - system e configurare il nome del dispositivo (che apparirà anche nel nome file quando si salva la configurazione). Se non avete idee suggerisco "RoadWarrior"

Volendo cambiare i server ntp (ntp1.inrim.it,ntp2.inrim.it)

Installare openvpn

 opkg install openvpn-openssl

Creare un'interfaccia slan, con ip statico diverso dalla lan (es 192.168.251.1), interfaccia fisica slan, e con dhcp

Creare un'interfaccia swan, unmanaged, con interfaccia fisica tun0

Per farlo vanno aggiunte queste righe su etc/config/network

 config interface 'swan'
 	option ifname 'tun0'
 	option proto 'none'
 
 config interface 'slan'
 	option proto 'static'
 	option ipaddr '192.168.251.1'
 	option netmask '255.255.255.0'
 	option _orig_ifname 'lan0'
 	option _orig_bridge 'false'
 	option type 'bridge'
 	option ifname 'slan'

E queste su etc/config/dhcp

 config dhcp 'slan'
 	option start '100'
 	option leasetime '12h'
 	option limit '150'
 	option interface 'slan'

Controllare che il dhcp sia attivo sull'interfaccia slan

Applicare le regole firewall inserendo queste righe su /etc/config/network

 config zone
 	option input 'ACCEPT'
 	option output 'ACCEPT'
 	option name 'slan'
 	option network 'slan'
 	option forward 'REJECT'
 
 config zone
 	option forward 'REJECT'
 	option output 'ACCEPT'
 	option input 'REJECT'
 	option masq '1'
 	option mtu_fix '1'
 	option network 'swan'
 	option name 'swan'
 
 config rule
 	option target 'ACCEPT'
 	option family 'ipv4'
 	option proto 'udp'
 	option src 'slan'
 	option name 'Secure DHCP'
 	option dest_port '67-68'
 
 config rule
 	option target 'ACCEPT'
 	option src 'slan'
 	option name 'Secure DNS'
 	option dest_port '53'
 	option family 'ipv4'
 
 config forwarding
 	option dest 'swan'
 	option src 'slan'

Creare dentro a /etc/openvpn il file client.conf e aggiungere i certificati nella stessa cartella.

Il mio è così:

 client
 dev tun
 proto tcp
 
 remote [indirizzo] 443
 resolv-retry infinite
 #redirect-gateway def1
 route-nopull
 
 nobind
 
 persist-tun
 persist-key
 
 ca ca.crt
 cert roadwarrior.crt
 key roadwarrior.key
 remote-cert-tls server
 
 verb 1
 
 script-security 3
 route-delay 5
 route-up "/etc/openvpn/route-up.sh"
 keepalive 10 60

E' importante la riga route-nopull perchè non deve ereditare la tabella di routing dal server

Nella stessa cartella aggiungere anche il file route-up.sh, dargli le autorizzazioni e inserire all'interno il seguente script:

 #!/bin/sh
 
 # Checks to see if there is an IP routing table named 'vpn', create if missing
 if [ $(cat /etc/iproute2/rt_tables | grep vpn | wc -l) -eq 0 ]; then
         echo "100     vpn" >> /etc/iproute2/rt_tables
 fi
 
 echo "------------------------------------------------------------------"
 ip route show
 echo "------------------------------------------------------------------"
 
 # Remove any previous routes in the 'vpn' routing table
 ip rule | sed -n 's/.*\(from[ \t]*[0-9\.]*\).*vpn/\1/p' | while read RULE
 do
 	echo "remove old rule:  /bin/ip rule del ${RULE}"
 	/bin/ip rule del ${RULE}
 done
 
 #echo ifconfig_remote: ${ifconfig_remote} dev: ${dev}  > /tmp/antani
 
 # Add routes to the vpn routing table
 echo ip rule add from 192.168.251.0/24 lookup vpn prio 1000
 ip rule add from 192.168.251.0/24 lookup vpn prio 1000
 
 # Add the route to direct all traffic using the the vpn routing table to the tunX interface
 echo ip route add default via ${ifconfig_remote} dev ${dev} table vpn
 ip route add default via ${ifconfig_remote} dev ${dev} table vpn
 
 #add a route for the lan itself
 echo ip route add 192.168.251.0/24 dev br-slan table vpn
 ip route add 192.168.251.0/24 dev br-slan table vpn
 
 ip route flush cache
 
 exit 0

In questo modo openvpn parte all'avvio e cerca di connettersi al server, una volta connessa crea una tabella di routing specifica per la slan (source routing)


Creare 2 wlan sulla wifi integrata (radio0) bridgiate con lan e slan. Le ho chiamate rispettivamente unsecure e secure


Teoricamente se tutto è configurato bene quando si è collegati alla lan (o la wifi unsecure) è possibile navigare in internet in maniera non sicura.

Aprendo il sito http://whatismyipaddress.com/ o simili la connessione proviene dal provider dell'hotspot

Quando si è collegati alla slan (quindi la wifi secure) è possibile collegarsi alla lan che ospita la vpn (la lan di casa mia), e l'indirizzo ip che appare è quello della lan remota.


Per fare in modo che il router si colleghi ad una lista di wifi conosciute ho usato queste istruzioni

https://forum.openwrt.org/viewtopic.php?id=43352

Ho modificato il file wifiMgr.sh cambiando i nomi delle interfacce e aggiungendo alcune funzioni come segue:

 #!/bin/sh
 . /etc/wifiMgr/config
 
 
 randMacAddr()
 {
 
 	 macaddr=$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/00:\2:\3:\4:\5:01/')
 	uci set wireless.@wifi-iface[2].macaddr="$macaddr"
 	uci commit wireless
 	/etc/init.d/network restart
 
 }
 
 
 NetStatus()
 {
 	logger WifiMgr: Checking network...
 	net=$(ping 8.8.8.8 -c5 |grep "time=")
 	if [ "$net" ]; then
 		logger WifiMgr: Network OK
                 #got ping response!
                 return
 	else
 		logger WifiMgr: Network failed. Starting network change...
 		NetChange
 	fi
 }
 
 
 
 NetChange()
 {
 	logger WifiMgr: Performing network scan...
 	
 		source /etc/wifiMgr/config
     
 		scanres=
         ifconfig wlan1 down
         iw phy phy0 interface add scan0 type station
         ifconfig scan0 up
 
         while [ "$scanres" = "" ]; do
                 #Sometimes it shows nothing, so better to ensure we did a correct scan
                 scanres=$(iw scan0 scan|grep SSID)
         done
 
         iw dev scan0 del
         ifconfig wlan1 up
         killall -HUP hostapd
 	logger WifiMgr: WifiMgr: Searching available networks...
 	
 	if [ "$1" ]; then
 		ssid=net"$1"_ssid
 		eval ssid=\$$ssid
 		echo Trying to connect to network "$1"":    $ssid"
 		n=$(expr "$1" - "1")
 	else
         	n=0
         fi
         
         while [ "1" ]; do
                 n=$(expr "$n" + "1")
 
                 if [ "$n" = "99" ]; then
                                 #too much counts. Crazy wireless count, breaking loop!
                                 break
                 fi
 
                 ssid=net"$n"_ssid
                 encrypt=net"$n"_encrypt
                 key=net"$n"_key
 
                 eval ssid=\$$ssid
                 eval encrypt=\$$encrypt
                 eval key=\$$key
                 
                 if [ "$ssid" = "" ]; then
                                 #ssid not existing or empty. Assume it's the end of the wlist file
                                 break
                 fi
                 echo SSID: $ssid
                 #echo KEY: $key
                 #echo SEGURIDAD: $encrypt
                 
 
                 active=$(echo $scanres | grep " $ssid ">&1 )
                 if [ "$active" ]; then
                 	if [ "$1" ]; then
                 		echo Network found. Connecting...
                 	fi
 			logger WifiMgr: "$ssid" network found. Applying settings..
                         uci set wireless.@wifi-iface[2].ssid="$ssid"
                         uci set wireless.@wifi-iface[2].encryption="$encrypt"
                         uci set wireless.@wifi-iface[2].key="$key"
                         uci set wireless.@wifi-iface[2].bssid=""
                         uci commit wireless
                         /etc/init.d/network restart
                         
                         #wait some seconds for everything to connect and configure
                         sleep $NewConnCheckTimer
 			logger WifiMgr: Checking connectivity...
 
                         #check for internet connection, 5 ping sends
                         net=$(ping google.es -c5 |grep "time=")
                         if [ "$net" ]; then
 				#got ping response!
 				logger WifiMgr: Internet working! Searching ended
 				if [ "$1" ]; then
 					echo Sucess!
 				fi
                         	break
                         fi
                         if [ "$1" ]; then
                         	echo Connection failed!
                         	break
                         fi
 			logger WifiMgr: Failed! Searching next available network...
                 fi
         done
 }
 
 if [ "$1" = "" ]; then
 	echo "No arguments supplied"
 
 elif [ "$1" = "--force" ]; then
 	NetChange $2
 
 elif [ "$1" = "--daemon" ]; then
 	
 	if [ "$randMac" = "1" ]; then
 		randMacAddr	
 	fi
 	NetChange
 	
 	while [ "1" ]; do
 		sleep $ConnCheckTimer
         	NetStatus
 	done
 
 else
 	echo "Wrong arguments"
 fi

L'avvio con /etc/init.d ha qualche problema, e a volte scollega tutte le wifi ricollegandosi, ma tutto sommato funziona.

Idee e cose da provare

Non ne so molto di reti routing e firewall, arrivare a questo risultato è stato molto faticoso e frutto di notte insonni e continui insuccessi.

Lo so, è fatto male e si poteva fare meglio ma non so come.

Se qualcuno vuole contribuire e migliorare il progetto è benvenuto.


Un problema è che le query DNS escono sempre dalla wan che non è sicura, bisognerebbe farle girare attraverso la vpn


E' possibile accendere e spegnere il wifi con questo script (che avevo fatto partire con il connect della vpn), da testare

 #!/bin/sh
 
 #secure
 uci set wireless.@wifi-iface[1].disabled='0'
 wifi
 #unsecure
 uci set wireless.@wifi-iface[0].disabled='1'
 wifi
 
 exit 0

Sarebbe bello utilizzare la porta ethernet come wan per collegarsi via cavo. Impostando un indirizzo ip statico di management in caso di emergenza


Di solito i router hanno 1-2 led. Farebbe comodo sapere dai led se la wan e la vpn sono collegate (lampeggio o accensione continua)


Si potrebbe fare uno script per cambiare automaticamente il canale della scheda wireless integrata in modo che le due schede non si disturbino