VPN zentral: Unterschied zwischen den Versionen

Aus Weimarnetz Wiki
Zur Navigation springen Zur Suche springen
Zeile 122: Zeile 122:
 
#!/bin/sh
 
#!/bin/sh
  
 +
# Funktion um Netzknotennummer einem Ort zuzuweisen,fuer lesbare Konfig
 
get_name() {
 
get_name() {
 
  case $1 in
 
  case $1 in
Zeile 137: Zeile 138:
 
}
 
}
  
 +
# Funktion zum schreiben der OLSR-Konfigdaten
 
write_olsr() {
 
write_olsr() {
 
  echo -e "\n{\nHelloInterval 5.0\nHelloValidityTime 90.0\nTcInterval 3.0\nTcValidityTime 270.0"
 
  echo -e "\n{\nHelloInterval 5.0\nHelloValidityTime 90.0\nTcInterval 3.0\nTcValidityTime 270.0"
Zeile 142: Zeile 144:
 
}
 
}
  
 +
# Variablendefinitionen
 
THIS="$(nvram get wifi_ipaddr|cut -d'.' -f3)"
 
THIS="$(nvram get wifi_ipaddr|cut -d'.' -f3)"
 
OLSR="/etc/local.olsrd.conf"; VTUN="/etc/vtund.conf"
 
OLSR="/etc/local.olsrd.conf"; VTUN="/etc/vtund.conf"
 
VPN="10.63.254"; SRV="214"; CNT="-1"
 
VPN="10.63.254"; SRV="214"; CNT="-1"
 +
# Liste aller teilnehmenden Clients (Netzknotennummern)
 
LST="41 82 42 37 62 54 135 87 1"
 
LST="41 82 42 37 62 54 135 87 1"
  
test -e $OLSR && rm $OLSR
+
# sicherheitshalber evtl. laufende Instanzen und/oder vorhandene Dateien loeschen
test -e $OLSR && rm $CFG
+
test -e $OLSR && rm $OLSR; test -e $OLSR && rm $CFG
killall vtund
+
killall vtund; killall -9 vtund
killall -9 vtund
 
  
 +
# laeuft das skript auf dem Server oder auf einem Client?
 
if [ "$THIS" = "$SRV" ]
 
if [ "$THIS" = "$SRV" ]
 
  then
 
  then
  echo >$VTUN "default { proto udp; type tun; compress no; encrypt no; keepalive yes; multi yes; stat no; }"
+
# ok,skript laeuft auf dem server, also passende Konfigs machen, und fuer jeden client eine extra OLSR-interface-config
 +
  echo   >$VTUN "default { proto udp; type tun; compress no; encrypt no; keepalive yes; multi yes; stat no; }"
 
  for CLIENT in $LST;do let CNT+=1
 
  for CLIENT in $LST;do let CNT+=1
 
 
   echo >>$VTUN "$(get_name $CLIENT) { passwd bla; device tun$CNT;"
 
   echo >>$VTUN "$(get_name $CLIENT) { passwd bla; device tun$CNT;"
 
   echo >>$VTUN " up { program \"ip addr add $VPN.$THIS peer $VPN.$CLIENT dev %%; ip link set %% mtu 1450 up\"; }; }"
 
   echo >>$VTUN " up { program \"ip addr add $VPN.$THIS peer $VPN.$CLIENT dev %%; ip link set %% mtu 1450 up\"; }; }"
 
+
   echo >>$OLSR -e "Interface \"tun$CNT\"$(write_olsr)\nIp4Broadcast $VPN.$CLIENT\n}"
   echo >>$OLSR "Interface \"tun$CNT\"$(write_olsr)"
 
  echo >>$OLSR -e "\nIp4Broadcast $VPN.$CLIENT\n}"
 
 
 
 
   iptables -I POSTROUTING -t nat -o tun$CNT -j MASQUERADE
 
   iptables -I POSTROUTING -t nat -o tun$CNT -j MASQUERADE
 
  done
 
  done
 
  vtund -s
 
  vtund -s
 
else
 
else
 +
# ok,skript laeuft auf einem Client, also passende Konfigs erzeugen
 
  CNT=0;for IP in $LST;do if [ "$IP" = "$THIS" ];then NUMMER=$CNT;fi;let CNT+=1;done
 
  CNT=0;for IP in $LST;do if [ "$IP" = "$THIS" ];then NUMMER=$CNT;fi;let CNT+=1;done
 
 
  echo  >$VTUN "$(get_name $THIS) { passwd bla; type tun; persist yes;"
 
  echo  >$VTUN "$(get_name $THIS) { passwd bla; type tun; persist yes;"
 
  echo >>$VTUN " up { program \"ip addr add dev %% $VPN.$THIS peer $VPN.$SRV; ip link set %% mtu 1450 up\"; }; }"
 
  echo >>$VTUN " up { program \"ip addr add dev %% $VPN.$THIS peer $VPN.$SRV; ip link set %% mtu 1450 up\"; }; }"
 
+
  echo >>$OLSR -e "Interface \"tun0\"$(write_olsr)\nIp4Broadcast $VPN.$SRV\nLinkQualityMult $VPN.$SRV 0.1\n}"
  echo >>$OLSR "Interface \"tun0\"$(write_olsr)"
+
# und starten
echo >>$OLSR -e "\nIp4Broadcast $VPN.$SRV"
 
echo >>$OLSR -e "LinkQualityMult $VPN.$SRV 0.1\n}"
 
 
 
 
  vtund $(get_name $THIS) 141.54.160.25
 
  vtund $(get_name $THIS) 141.54.160.25
 
fi
 
fi
<pre>
+
</pre>

Version vom 30. September 2006, 20:43 Uhr

Warum

  • Damit alle DSLer einen zusaetzlichen (virtuellen Funk-)Nachbarn bekommen, wird
  • ein VPN Router im Internet (=M18) aufgestellt.
  • Strecken ueber viele Hops werden dann durch den Tunnel geleitet.
  • der Ausdruck VPN - Virtuelles Privates Netzwerk - ist natuerlich etwas irrefuerend, weil der Tunnel nur ein bisschen "Privat" ist - ist schliesslich ein offenes Netzwerk

Wie

  • die Software der Wahl ist vtun
  • unten beschriebene Funktion wird in die Firmware eingebaut und kann per "Mausklick" angeschaltet werden

Authenifizierung, Verschluesselung, Kompression

  • es wird ein unauthentifizierter, unverschluesselter und unkomprimierter Tunnel gegraben
  • Argumente pro offener Tunnel:
    • das Netz ist sowieso unverschluesselt - wozu also Teilstrecken verschluesseln?
    • wer am Netz teilnehmen moechte, kann das ohne aufwendigen Schluessel/Zertifikats-Austausch
    • Prozessor-Kraft und Speichersparen. vtun braucht nur 60kb Platz.
    • echte Daten werden sowieso innerhalb des eingesetzten Protokolls Ende-zu-Ende verschluesselt, wozu also doppelt verschluesseln?
    • keine falsche Sicherheit vortaeuschen, sicher ist nur Ende-zu-Ende Verschluesselung
  • Argumente contra offener Tunnel:
    • wenn die technik das hergibt, tut es nicht weh das zu benutzen - keine faulheit
    • datenpackete im internet werden von div. stellen geloggt, also sollen die verschlüsselte sachen loggen
    • das netz ist nicht mehr für sich genommen, man kann dran beteiligt sein (inet) ohne daran beteiligt zu sein
    • argument, dass das netz ja frei sei, und deshalb auf verschlüsselung verzichtet werden kann, ist irreführend. imo ist es etwas anderes, ob der "Abhöhrer" sich in die nähe des WLANs gebegen muss, oder einfach beim provider loggen kann.

Teilnehmer

  • ca. 10 Teilnehmer
  • Linksys in der M18 als Server und alle DSLer (ausser die Liszt18a) als Clients

Datenverkehr

  • alle Teilnehmer sprechen OLSR ueber den Tunnel
  • Datenmenge wird beobachtet. fries43 16:41, 30. Sep 2006 (CEST)

Installation

  • Installation mit: ipkg update; ipkg install vtund
  • KonfigDatei ist dann /etc/vtund.conf

Konfiguration (Server)

  • Server steht in der M18 und ist ein normaler Linksys mit oeffentlicher IP-Adresse
  • Freifunk-IP ist die 10.63.254.214 auf dem VPN-Interface
  • die Clients sind dann jeweils die 254.41 und 254.82
  • Aufruf mit: vtund -s
  • Konfigdatei /etc/vtund.conf
default {
 proto udp;
 type tun;
 compress no;
 encrypt no;
 keepalive yes;
 multi yes;
 stat no;
}
client0 {
 passwd bla;
 device tun0;
 up {
  program "ip addr add 10.63.254.214 peer 10.63.254.41 dev %%; ip link set %% mtu 1450 up";
 };
}
client1 {
 passwd bla;
 device tun1;
 up {
  program "ip addr add 10.63.254.214 peer 10.63.254.82 dev %%; ip link set %% mtu 1450 up";
 };
}
  • Konfigdatei /etc/local.olsrd.conf fuer das Interface tun0, die anderen werden entsprechend angehangen
Interface "tun0"
{
HelloInterval           5.0
HelloValidityTime       90.0
TcInterval              3.0
TcValidityTime          270.0
MidInterval             15.0
MidValidityTime         270.0
HnaInterval             15.0
HnaValidityTime         90.0

Ip4Broadcast 10.63.254.41
}

Konfiguration (Client)

  • Client ist jeder Internetuebergabepunkt (z.b. ein DSLer)
  • Aufruf mit: vtund vpn 141.54.160.25
client0 {
 passwd bla;
 device tun0;
 persist yes;
 up {
  program "ip addr add dev %% 10.63.254.41 peer 10.63.254.214; ip link set %% mtu 1450 up";
 };
}
  • Konfigdatei /etc/local.olsrd.conf
Interface "tun0"
{
HelloInterval           5.0
HelloValidityTime       90.0
TcInterval              3.0
TcValidityTime          270.0
MidInterval             15.0
MidValidityTime         270.0
HnaInterval             15.0
HnaValidityTime         90.0

Ip4Broadcast 10.63.254.214
LinkQualityMult 10.63.254.214 0.1
}

Skript bzw. fertiges Programm

  • nach /etc/init.d/S52.weimarnetz.vpn_starten kopieren...
#!/bin/sh

# Funktion um Netzknotennummer einem Ort zuzuweisen,fuer lesbare Konfig
get_name() {
 case $1 in
        135) echo "m18---schwansee69";;
         42) echo "m18---frauentor3";;
         41) echo "m18---rembrandtweg";;
         82) echo "m18---jakob2a";;
         37) echo "m18---wbode13";;
         62) echo "m18---trierer65";;
         54) echo "m18---kunstturm";;
         87) echo "m18---weimarwest";;
          1) echo "m18---liszt18a";;
          *) echo "m18---unbekannt";;
 esac
}

# Funktion zum schreiben der OLSR-Konfigdaten
write_olsr() {
 echo -e "\n{\nHelloInterval 5.0\nHelloValidityTime 90.0\nTcInterval 3.0\nTcValidityTime 270.0"
 echo -e "MidInterval 15.0\nMidValidityTime 270.0\nHnaInterval 15.0\nHnaValidityTime 90.0"
}

# Variablendefinitionen
THIS="$(nvram get wifi_ipaddr|cut -d'.' -f3)"
OLSR="/etc/local.olsrd.conf"; VTUN="/etc/vtund.conf"
VPN="10.63.254"; SRV="214"; CNT="-1"
# Liste aller teilnehmenden Clients (Netzknotennummern)
LST="41 82 42 37 62 54 135 87 1"

# sicherheitshalber evtl. laufende Instanzen und/oder vorhandene Dateien loeschen
test -e $OLSR && rm $OLSR; test -e $OLSR && rm $CFG
killall vtund; killall -9 vtund

# laeuft das skript auf dem Server oder auf einem Client?
if [ "$THIS" = "$SRV" ]
 then
 # ok,skript laeuft auf dem server, also passende Konfigs machen, und fuer jeden client eine extra OLSR-interface-config
 echo   >$VTUN "default { proto udp; type tun; compress no; encrypt no; keepalive yes; multi yes; stat no; }"
 for CLIENT in $LST;do let CNT+=1
  echo >>$VTUN "$(get_name $CLIENT) { passwd bla; device tun$CNT;"
  echo >>$VTUN " up { program \"ip addr add $VPN.$THIS peer $VPN.$CLIENT dev %%; ip link set %% mtu 1450 up\"; }; }"
  echo >>$OLSR -e "Interface \"tun$CNT\"$(write_olsr)\nIp4Broadcast $VPN.$CLIENT\n}"
  iptables -I POSTROUTING -t nat -o tun$CNT -j MASQUERADE
 done
 vtund -s
else
 # ok,skript laeuft auf einem Client, also passende Konfigs erzeugen
 CNT=0;for IP in $LST;do if [ "$IP" = "$THIS" ];then NUMMER=$CNT;fi;let CNT+=1;done
 echo  >$VTUN "$(get_name $THIS) { passwd bla; type tun; persist yes;"
 echo >>$VTUN " up { program \"ip addr add dev %% $VPN.$THIS peer $VPN.$SRV; ip link set %% mtu 1450 up\"; }; }"
 echo >>$OLSR -e "Interface \"tun0\"$(write_olsr)\nIp4Broadcast $VPN.$SRV\nLinkQualityMult $VPN.$SRV 0.1\n}"
 # und starten
 vtund $(get_name $THIS) 141.54.160.25
fi