| 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> |