[Ninux-Wireless] qualcuno conosce gretap?

Pierluigi Checchi p.checchi a ieee.org
Gio 5 Gen 2012 01:41:58 CET


La vedo come possibile alternativa a tinc o openvpn in bridge, quando
non si vogliono/possono usare.
Ho effettuato delle prove, va a velocità spaziale (ordini di grandezza
superiori a tinc, che è in userspace).
L'MTU disponibile al payload ip è 1500-20 (IP) -4 (GRE) -14
(ethernet), anche qui più favorevole che in tinc in modalità switch.
Supportato da openwrt (ma poco o niente documentato), almeno dal
10.03.1 che ho io.
lo svantaggio rispetto a tinc è che non è di tipo mesh plug&play, ma
occorre configurare tutti gli endpoint.
Altro svantaggio è che tutti gli endpoint devono avere ip statici
(mentre in tinc ne basta solo uno statico).
Ovviamente non c'è cifratura, a meno di non utilizzare ipsec (o dentro
o fuori dal tunnel) ma guadagnamo appunto in velocità e latenza,
soprattutto su apparati senza accelerazione di crypt.
Se non si ha cifratura si è inoltre resistenti al NAT (basta girare i
pacchetti sul firewall) e anche molte CPE economiche sono in grado di
far passare il GRE abilitando il passtrough di PPTP.

Esempio, per mettere in bridge le ethernet di due host distanti tra di loro

Sul nodo IP1:
insmod ip_gre
ip link add greth1 type gretap remote IP2 local any nopmtudisc
ip addr add 0.0.0.0 dev greth1
ip link set dev greth1 up
brctl addbr br0
brctl addif br0 greth1
brctl addif br0 eth0
ip link set dev br0 up

Sul nodo IP2:
insmod ip_gre
ip link add greth1 type gretap remote IP1 local any
ip addr add 0.0.0.0 dev greth1
ip link set dev greth1 up
brctl addbr br0
brctl addif br0 greth1
brctl addif br0 eth0
ip link set dev br0 up

Le reti su cui sono attestati i due host a questo punto saranno in
grado di raggiungersi a vicenda e di avere lo stesso indirizzamento
ip.
Un'applicazione tipo potrebbe essere quella di avere due AP attestati
a due ADSL diverse che escono da uno stesso gateway e mantengono lo
stesso indirizzamento, captive portal etc.

Come riferimento, ecco invece i parametri di creazione di un tunnel
gre puro in routing (interoperabile con cisco, bsd, solaris,juniper
etc. e che esiste da anni):
ip tunnel add gre1 type gre remote IP1 local any
ip addr add 0.0.0.0 dev greth1
ip link set dev gre1 up
ip route add xx.xx.xx.xx/yy dev gre1
 (occhio a non utilizzare gre0, che è la catchall del modulo gre e non
può essere modificata.
Qui l'MTU disponibile al payload ip incapsulato è molto favorevole:
1476, con overhead del GRE di solo 4 byte.
PS: attenzione al rp_filter in sysctl.conf, deve essere a 0 per
l'interfaccia gre

Andando oltre, si può fare
ip tunnel add ipip1 type ipip remote IP1 local any
ip addr add 0.0.0.0 dev ipip1
ip link set dev ipip1 up
ip route add xx.xx.xx.xx/yy dev ipip1

L'MTU è ora 1480, ma la mancanza di GRE ci rende incompatibili con
tante belle cose inventate da Cisco ( e non supportato da linux se non
come responder) quali il keepalive, che butta giù l'interfaccia (e
quindi la rotta collegata) se il tunnel va down.



Maggiori informazioni sulla lista Wireless