Ipsec su Openwert 14.07

Ipsec (strongswan 5.2.2 su openwrt 14.07) puo` essere configurato per lavorare in due modi: usando un helper in userspace che effettua le operazioni crittografiche, o facendole fare al kernel. La soluzione con l'helper funziona bene e presenta all'utente una interfaccia ipsec0 attraverso la quale passa il traffico (cosa per me molto comoda) ma consente di lavorare soltanto con ESP incapsulato in UDP (il modo tipico in cui si effettua il NAT traversal in IPSEC). Se l'altro endpoint non gradisce questo comportamento, questo metodo non funzionera` e occorrera` usare quello in kernel space.

Ipsec in user space

Ipsec in kernal space

Questo e` l'esempio piu` bastardo possibile, perche` richiede che noi ci presentiamo al remoto con degli indirizzi (interni al tunnel) che non sono quelli della nostra LAN, e quindi dobbiamo usare alias e NAT per ottenere questo risultato. Se non avessimo bisogno di fare cio`, il nostro lavoro sarebbe leggermente piu` facile.

Limitazioni

Il caso del NAT degli indirizzi della LAN presentato nell' esempio in kernel space potrebbe essere affrontato in modo piu` intelligente se non fosse che openwrt ha delle limitazioni. Ad esempio non riesco a fare funzionare (non capisco perche`) il target "NETMAP" che mi verrebbe molto utile per nattare tutta la mia LAN (ad esempio 10.0.0.0/24) sulla rete che vuole vedere il remoto (ad esempio 172.21.34.0/24). Sarebbe sufficiente inserire due regole di NETMAP, cosi`:

iptables -t nat -A postrouting_wan_rule -j NETMAP -s 10.0.0.0/24      -d 192.168.216.0/24 --to 172.21.34.0/24
iptables -t nat -A pretrouting_wan_rule -j NETMAP -s 192.168.216.0/24 -d 172.21.34.0/24   --to 10.0.0.0/24 

Ma non funziona. iptables si rifiuta di inserire le regole nella catena. Su una macchina Linux Debian "normale" funziona senza problemi.

Se la connessione cade dopo qualche tempo, probabilmente e` dovuto a un bug che fa cadere tutto nel momento in cui dovrebbe avvenire un rekeying. Questo problema puo` essere risolto impostando uno (o tutti e due) di questi parametri in ipsec.conf, nella descrizione della connessione:

dpdaction=restart
closeaction=restart

Il primo dovrebbe riavviare la connessione nel caso in cui scatti il meccanismo di Dead Peer Detection. Il secondo invece dovrebbe riavviare la connessione nel caso in cui per qualsiasi motivo (dipendente dal remoto) la connessione venga chiusa.

Debug e controllo dello stato delle connessioni

Qualche comando utile:

Esempi di configurazione

Ecco un esempio di una connessione lan to lan verso un router remoto proprietario con chiave PSK:

OpenWrt/Ipsec_14_07 (last edited 2015-04-05 17:18:19 by Kurgan)