Auto-Reconnect für DD-WRT

Aus irgendeinem, mir noch nicht ganz nachvollziehbaren Grund, erkennt der pppd manchmal nicht, dass das ppp-Interface down ist und keine Verbindung mehr besteht. Um das zu beheben muss man normalerweise das WebInterface aufrufen und „reconnect“ drücken. Das kann man auch automatisieren.

Als erstes erstellt man eine Datei unter /tmp/connection_tracker.sh

#!/bin/sh

if [ $(ping -c 1 $(nvram get wan_ipaddr)|grep -c from) -lt 1 ]; then 
  logger -t connectiontracker nvram get wan_ipaddr unreachable
  killall redial; 
  killall pppd; 
  sleep 5 
  pppd file /tmp/ppp/options.pppoe >/dev/null; 
  logger -t connectiontracker reconnect wan nvram get wan_ipaddr successfully 
fi

Was macht das Script? Es versucht die IP des WAN-Interfaces zu pingen. Ist das Down gibt es keinen Treffer. „grep“ wertet die Rückgabe des ping Befehls aus und zählt die Zeilen. Gibt es weniger als einen Treffer (also Null) wird der redial und pppd gestoppt und neu gestartet.

Anschließend fügt man eine NVRAM-Variable hinzu. Gibt es die Variable wird sie überschieben, Ansonsten wird sie angelegt.

nvram set rc_custom="$(cat /tmp/connection_tracker.sh)"
nvram commit

Über den Startup-Script/Command muss diese Datei nun immer angelegt werden.

nvram get rc_custom>/tmp/connection_tracker.sh

Über einen zusätzlichen Cron-Job die Überprüfung alle 15-Minuten durchführen.

*/15 * * * * root /tmp/connection_tracker.sh