Zeile 124: |
Zeile 124: |
| <pre> | | <pre> |
| #!/bin/sh | | #!/bin/sh |
− | # /etc/init.d/S52.weimarnetz.vpn $VER 0.1 - 2006okt1 - Bastian Bittorf | + | # /etc/init.d/S52.weimarnetz.vpn $VER 0.2 - 2006okt1 - Bastian Bittorf |
| | | |
| # Verbinden von funkmaessig getrennten Wireless-Mesh-Wolken ueber ein VPN: | | # Verbinden von funkmaessig getrennten Wireless-Mesh-Wolken ueber ein VPN: |
Zeile 137: |
Zeile 137: |
| 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"; SRVPUBLIC="141.54.160.25" | + | VPN="10.63.254"; SRV="214"; CNT="-1"; SRVPUBLIC="141.54.160.25"; BC="10.255.255.255"; MTU=1500 |
| # Liste aller teilnehmenden Clients (Netzknotennummern) | | # 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" |
| | | |
| # Funktion um Netzknotennummer einem Ort zuzuweisen,fuer lesbare Konfig | | # Funktion um Netzknotennummer einem Ort zuzuweisen,fuer lesbare Konfig |
− | get_name() { | + | get_name() { case $1 in |
− | case $1 in
| + | 135) echo "m18---schwansee69";; |
− | 135) echo "m18---schwansee69";;
| + | 42) echo "m18---frauentor3";; |
− | 42) echo "m18---frauentor3";;
| + | 41) echo "m18---rembrandtweg";; |
− | 41) echo "m18---rembrandtweg";;
| + | 82) echo "m18---jakob2a";; |
− | 82) echo "m18---jakob2a";;
| + | 37) echo "m18---wbode13";; |
− | 37) echo "m18---wbode13";;
| + | 62) echo "m18---trierer65";; |
− | 62) echo "m18---trierer65";;
| + | 54) echo "m18---kunstturm";; |
− | 54) echo "m18---kunstturm";;
| + | 87) echo "m18---weimarwest";; |
− | 87) echo "m18---weimarwest";;
| + | 1) echo "m18---liszt18a";; esac } |
− | 1) echo "m18---liszt18a";;
| |
− | *) echo "m18---unbekannt";;
| |
− | esac
| |
− | } | |
| | | |
| # Funktion zum schreiben der OLSR-Konfigdaten | | # 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" | + | echo -e "MidInterval 15.0\nMidValidityTime 270.0\nHnaInterval 15.0\nHnaValidityTime 90.0"; } |
− | echo -e "MidInterval 15.0\nMidValidityTime 270.0\nHnaInterval 15.0\nHnaValidityTime 90.0"
| |
− | } | |
| | | |
| # sicherheitshalber evtl. laufende Instanzen und/oder vorhandene Dateien loeschen | | # sicherheitshalber evtl. laufende Instanzen und/oder vorhandene Dateien loeschen |
Zeile 170: |
Zeile 164: |
| if [ "$THIS" = "$SRV" ] | | if [ "$THIS" = "$SRV" ] |
| then | | then |
− | # ok,skript laeuft auf dem server, also passende Konfigs machen, und fuer jeden client eine extra OLSR-interface-config
| + | echo >$VTUN "default { proto tcp; type ether; compress no; encrypt no; keepalive no; multi yes; stat no; }" |
− | echo >$VTUN "default { proto tcp; type tun; compress no; encrypt no; keepalive yes; multi yes; stat no; }" | + | for CLIENT in $LST;do let CNT+=1;OKTETT=$(( 254 - CNT )) |
− | for CLIENT in $LST;do let CNT+=1 | + | echo >>$VTUN "$(get_name $CLIENT) { passwd bla; device tap$CNT; speed 80;" |
− | echo >>$VTUN "$(get_name $CLIENT) { passwd bla; device tun$CNT;" | + | echo >>$VTUN " up { program \"ip addr add dev %% $VPN.$OKTETT/16 brd $BC; ip link set %% mtu $MTU up\"; }; }" |
− | echo >>$VTUN " up { program \"ip addr add $VPN.$THIS peer $VPN.$CLIENT dev %%; ip link set %% mtu 1450 up\"; }; }" | + | IFLIST=$IFLIST" \"tap$CNT\"" |
− | echo >>$OLSR -e "Interface \"tun$CNT\"$(write_olsr)\n\nIp4Broadcast $VPN.$CLIENT\n}" | |
− | # gleich noch ein NAT, damit man ohne Probleme auf beide Tunnelseiten kommt.
| |
− | iptables -I POSTROUTING -t nat -o tun$CNT -j MASQUERADE
| |
| done | | done |
− | # Server starten | + | echo >>$OLSR -e "Interface$IFLIST$(write_olsr)\n\nIp4Broadcast $BC\n#LinkQualityMult default 0.1\n}" |
| vtund -s | | vtund -s |
| else | | else |
| # ok,skript laeuft auf einem Client, also passende Konfigs erzeugen | | # 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 ether; 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/16 brd $BC; ip link set %% mtu $MTU up\"; }; }" |
− | echo >>$OLSR -e "Interface \"tun0\"$(write_olsr)\n\nIp4Broadcast $VPN.$SRV\nLinkQualityMult $VPN.$SRV 0.1\n}" | + | echo >>$OLSR -e "Interface \"tap0\"$(write_olsr)\n\nIp4Broadcast $BC\n}" |
− | # Client starten
| |
| vtund $(get_name $THIS) $SRVPUBLIC | | vtund $(get_name $THIS) $SRVPUBLIC |
| fi | | fi |
| </pre> | | </pre> |