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