Differenze tra le versioni di "RoadWarrior"

Da raspibo.
Jump to navigation Jump to search
(Comincio a scrivere)
Riga 32: Riga 32:
  
  
Info (by itec, da sistemare)
+
=== Info (by itec, da sistemare) ===
  
 
Il "RoadWarrior" è un router portatile che permette di condividere una connessione ad internet wireless, in modo sicuro.
 
Il "RoadWarrior" è un router portatile che permette di condividere una connessione ad internet wireless, in modo sicuro.
Riga 49: Riga 49:
  
  
Howto un po' incasinato:
+
=== Howto un po' incasinato: ===
  
 
- Inserire la parte di installazione di openwrt -  
 
- Inserire la parte di installazione di openwrt -  
Riga 80: Riga 80:
  
 
Configurare la lan con un ip statico (es 192.168.250.1) e dhcp server
 
Configurare la lan con un ip statico (es 192.168.250.1) e dhcp server
 
Creare sull'interfaccia wifi 0 una rete master, e associarla alla lan in bridge.
 
 
Per comodità la chiameremo "Unsecure" in quanto dovrebbe girare il traffico direttamente sulla wan (l'hotspot) senza crittografia
 
  
  
Riga 96: Riga 92:
 
  opkg install openvpn-openssl
 
  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 '''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
 
Vanno aggiunte queste righe su etc/config/network
Riga 161: Riga 157:
 
Il mio è così:
 
Il mio è così:
  
client
+
client
dev tun
+
dev tun
proto tcp
+
proto tcp
 +
 +
remote itec78.no-ip.org 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)
 +
 
  
remote [indirizzo del mio server] 443
 
resolv-retry infinite
 
redirect-gateway def1
 
nobind
 
  
persist-tun
+
Creare 2 wlan sulla wifi integrata (radio0) bridgiate con lan e slan. Le ho chiamate rispettivamente '''unsecure''' e '''secure'''
persist-key
 
  
ca ca.crt
 
cert roadwarrior.crt
 
key roadwarrior.key
 
remote-cert-tls server
 
  
verb 3
+
Teoricamente se tutto è configurato bene quando si è collegati alla lan (o la wifi unsecure) è possibile navigare in internet in maniera non sicura.
  
In questo modo openvpn parte all'avvio e cerca di connettersi al server
+
Aprendo il sito http://whatismyipaddress.com/ o simili la connessione proviene dal provider dell'hotspot
  
Ho creato 2 wlan sulla wifi integrata (radio1) bridgiate con lan e slan. Le ho chiamate secure e unsecure
+
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.
  
 +
=== Idee e cose da provare ===
  
 +
Premetto che questo non è il mio mestiere, 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.
  
Problemi noti:
+
Se qualcuno vuole contribuire è benvenuto.
  
Bisogna gestire il routing differente per le 2 lan.
 
"redirect-gateway def1" permette di aggiungere il routing per cui la slan funziona ma la lan non va + inoltre se si sconnette la vpn non si riconnette +, va fatto ripartire il servizio
 
Ho provato col policy routing, anche scriptando alla connessione della vpn: https://github.com/soehest/openvpn ma non funziona.
 
  
E' possibile accendere e spegnere il wifi con questo script (che avevo fatto partire con il connect della vpn, ma va in conflitto col routing
+
Un problema è che le query DNS escono sempre dalla wan, 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
  
#!/bin/sh
+
exit 0
  
#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

Versione delle 00:04, 28 ott 2015

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

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

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

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.





Info (by itec, da sistemare)

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 -


Collegarsi al router all'indirizzo 192.168.1.1, impostare la password e accedere ad internet andando su Network - Wifi. Cercare una wifi conosciuta facendo scan sulla scheda di rete interna


Collegarsi al router in ssh (per gli utenti windows c'è Putty che funziona molto bene)

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

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)

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

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'

Controllare che il dhcp sia attivo sull'interfaccia slan

Applicare le regole firewall [...]

Inserire 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 itec78.no-ip.org 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.

Idee e cose da provare

Premetto che questo non è il mio mestiere, 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 è benvenuto.


Un problema è che le query DNS escono sempre dalla wan, 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