lunedì 17 febbraio 2014

Configurazioni utili con DD WRT

Accendere e spegnere il wireless in base all'orario
In DD WRT, nei router con chip Athereos non c'è lo scheduler per accendere o spegnere il WiFi in 
automatico.

Ecco i comandi da impostare in Cron per accendere e spegnere il wireless.
In questo caso: acceso dalle 08:30 del mattino e spento alle 23:30 di ogni giorno.

30 23 * * * root /sbin/ifconfig ath0 down
30 8 * * * root /sbin/ifconfig ath0 up; startservice lan



Direzionare il traffico da un IP sorgente verso una VPN
Qui la spiegazione di come applicare delle policy in base alle quali instradare (routing) il traffico di un certo indirizzo IP (o blocco di indirizzi IP) verso una interfaccia diversa dalla default.
Obiettivo: configurare una VPN PPTP, quindi direzione il traffico proveniente solo da un ristretto numero di dispositivi verso la VPN, mentre per i restanti dispositivi, uscire normalmente verso Internet.
Finalità: utilizzare un unico dispositivo (router) evitando l'acquisto di un secondo router; permettere la sicurezza dello scambio di dati solo per un PC o device, mentre evitare tale pratica per gli altri (Wifi devices, altri pc).

Una volta configurata una connessione VPN PPTP, viene creata una nuova interfaccia (generalmente chiamata PPP0) che altri non è che il tunnel VPN PPTP. 

A questo punto, bisogna semplicemente dire al nostro router che tutto il traffico proveniente, ad esempio, dall'IP 192.168.1.10 deve transitare verso l'interfaccia ppp0 invece che verso l'eth0. Come ?

Ecco la mia domanda posta su ServerFault.

Giustamente, chi mi ha risposto, mi ha fatto notare che il routing di rete, non si preoccupa dell'indirizzo ip sorgente, ma si preoccupa solo dell'indirizzo ip di destinazione, ossia "non mi interessa chi sei, ti dico come raggiungere il tuo indirizzo di destinazione". 
Allora, mi ha suggerito questa soluzione: 


  1. Create a new default route on an alternative table ip route add table 55 default via 192.168.120.10 dev ppp0
  2. Mark traffic you want to route iptables -t mangle -I PREROUTING 1 -s 192.168.1.40 -j MARK --set-mark 55
  3. Create a rule so that traffic marked as 55 is routed via table 55 ip rule add fwmark 55 table 55
Prima di tutto però, è necessario cancellare la route di default verso 192.168.120.10 (il gateway pptp), ed inserire il gateway normale della mia Lan, coi comandi


  1. ip route del default via 192.168.120.10 dev ppp0
  2. ip route add default via 192.168.1.254 dev eth0


In pratica, mi suggerisce di (punto 1) creare una tabella di route alternativa (table 55) con impostato come gateway la mia interfaccia ppp0 (pptp vpn), quindi, (punto 2) con iptables (che è il firewall di ubuntu) di premarcare il traffico proveniente dall'indirizzo Ip di mia scelta (192.168.1.40), infine (punto 3) di stabilire una regola di routing, ossia, quando il traffico è marcato come 55 (è un numero scelto a caso), di applicare la tabella di routing 55. 

Per rendere tutto persistente, ho salvato tutti i punti sopra citati nella sezione Amministrazione -> Comandi -> Startup: 

echo "myip=$(ifconfig | grep -A 1 'ppp0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1") >> /tmp/firewallscript.sh


rm /tmp/firewallscript.sh
echo "ip=\$(ifconfig | grep -A 1 'ppp0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)" >> /tmp/firewallscript.sh
echo "ip route del default via \$ip dev ppp0;" >> /tmp/firewallscript.sh
echo "ip route add default via 192.168.1.254 dev eth0;" >> /tmp/firewallscript.sh
echo "ip route add table 55 default via \$ip  dev ppp0;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.40 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.41 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "iptables -t mangle -I PREROUTING 1 -s 192.168.1.42 -j MARK --set-mark 55;" >> /tmp/firewallscript.sh
echo "ip rule add fwmark 55 table 55;" >> /tmp/firewallscript.sh

Quindi, sempre in crontab ho aggiunto il lancio dello script schedulato ogni 5 minuti (lo so, non è bello farlo ripetere, ci vorrebbe un if che controlli se già non esista la regola..ma fa niente)

*/5 * * * * root sh /tmp/firewallscript.sh

Che dire... funziona bene!!
E finalmente ho imparato un pò di quel mondo che è il routing con Linux !

Nessun commento:

Posta un commento