Ich möchte den Raspberry Pi als VPN-Gateway verwenden. Das RPi stellt über wlan0, and
jedes angeschlossene Gerät eth0
eine Verbindung zu meinem Heimnetzwerk und dem Internet her und erhält eine VPN-Verbindung. Ich verwende pptp-linux
, um die VPN-Verbindung herzustellen, und während meiner Prototyping-Phase hat alles einwandfrei funktioniert. Um das Projekt abzuschließen, habe ich die VPN-Verbindung in das /etc/rc.local
Skript eingefügt, damit sie beim Booten startet. Jetzt schlägt es 50% der Zeit fehl. Ich vermute, dass versucht wird, die VPN-Verbindung herzustellen, bevor ich ordnungsgemäß über das Internet verbunden bin wlan0
. Wenn dies das Problem ist, benötige ich zu Beginn einen Test für eine gültige Internetverbindung, rc.local
bevor ich mit dem Rest des Skripts fortfahre. Irgendwelche Ideen, wie ich das machen könnte?
8
sleep 20
vor Ihrem Skript hinzufügen . Oder besser, setzen Sie Ihr Skript ein/etc/network/if-up.d
. Auf diese Weise wird das Skript ausgeführt, sobald die Netzwerkschnittstelle hochgefahren ist.Antworten:
Aus dieser StackOverflow-Antwort ;
quelle
direkt auf meinem Kopf:
Pingen Sie Ihren Router
ping google.com
grep-
ifconfig
Ausgabe für gültiges Gateway und / oder gültige IP-Adressequelle
grep
die Pings für eine gültige Antwort. In einer while-Schleife, bis alle Bedingungen erfüllt sind. Nur Ping macht nicht viel. Jivings zitierte eine gute Codezeile.grep
, Ping verwendet Exit-Codes, um Sie über die Ergebnisse zuping -qc 1 192.168.1.1 && echo ok || echo error
Basierend auf Jivings Beispielcode und einigen meiner eigenen Logik.
Der richtige Weg wäre, eine Funktion zu erstellen, die einen Booleschen Wert für den while-Komparator zurückgibt. Aber so sollte die Shell-Logik aussehen.
quelle
Debian verwendet jetzt Upstart. Dies ist wahrscheinlich eine viel einfachere Methode als init.d-Skripte.
Möglicherweise müssen Sie einige verschiedene Dienste ausprobieren, um darauf zu warten, aber
networking
(falls vorhanden) odernetwork-manager
es sollten gute sein, die Sie zuerst ausprobieren sollten.Dies ist für Ubuntu, aber Sie sollten nicht zu viele Unterschiede finden http://upstart.ubuntu.com/cookbook/
quelle