Ich habe dies jederzeit für Kunden getan und ich habe kein entwickeltes System gefunden, um dies zu erreichen, so dass ich jemals mein eigenes gewürfelt habe. Die Schritte, die Manwe Ihnen gegeben hat, sind mehr oder weniger das, was ich tue, wenn ich sie brauche, aber ich werde sie hier einfügen Alle groben Bash-Skripte, die ich verwende (wenn ich Zeit habe, möchte ich dies in Python viel besser machen).
Grundsätzlich überprüfe ich, ob ich Internet habe oder nicht und ob ich das WAN-Backup verwende und nehme die erforderlichen Änderungen vor
#!/bin/bash
PATH="/bin:/sbin:/usr/bin:/usr/sbin"
primary_gw="192.168.1.1" #for example.
check_one="8.8.8.8"
check_two="8.8.4.4"
#first we check internet connection.
if `ping -c 1 -W 1 $check_one |grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null` &&\
`ping -c 1 -W 1 $check_two |grep -E '(unreachable|100\%\ packet\ loss)' &>/dev/null`
then #if we don't have internet
if [ -e /tmp/wan_backup ]
#if we are using backup right now we try to change to primary connection
then ./script_change_to_primary.sh && rm /tmp/wan_backup
#else we change to wan backup.
else ./script_change_to_backup.sh && touch /tmp/wan_backup
fi
fi
#if we are using wan backup right now we check if primary connection works.
if [ -e /tmp/wan_backup ]
then
if `ip route add $check_one via $primary_gw; ip route add $check_two via $primary_gw;\
sleep 2; ping -c 1 -W 1 $check_one | grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null &&\
ping -c 1 -W 1 $check_two | grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null`
then #don't works we clean the routes and stay using backup
ip route del $check_one via $primary_gw
ip route del $check_two via $primary_gw
else #it works so we change active connection
ip route del $check_one via $primary_gw
ip route del $check_two via $primary_gw
./script_change_to_primary.sh
rm /tmp/wan_backup
fi
fi
Da Sie möchten, dass Ihr Server nur 3g verwendet, wenn ADSL ausfällt, würde ich nur Iptables Snat oder Masquerade nur im ADSL iface verwenden und den Zugriff auf Squid in ./script_change_to_secondary.sh blockieren. Ihre Dateien könnten sein:
script_change_to_secondary.sh
#!/bin/bash
pon 3gIsp #this one it is going to change the default route of server anyway
#drop squid connections, you could disable here the boot snat or masquerade for adsl
#but given your adsl is not active i don't see the need anyway
iptables -I INPUT -s LAN_IP_RANGE -d SERVER_IP -p tcp --dport 3128 -j DROP
script_change_to_primary.sh
#!/bin/bash
poff 3gIsp
iptables -D INPUT -s LAN_IP_RANGE -d SERVER_IP -p tcp --dport 3128 -j DROP
/etc/init.d/openvpn restart
Sie sollten auch in /etc/ppp/ip-up.d/ ein Bash-Skript mit "/etc/init.d/openvpn restart" haben. Auf diese Weise wird Ihr openvpn jedes Mal automatisch neu gestartet, wenn Sie eine Verbindung zu einem ppp-Anbieter herstellen.
Nun, wie ich schon sagte, es ist ein bisschen hässlich und grob, aber es funktioniert :) Wenn Sie eine integrierte saubere Lösung dafür finden, lassen Sie es mich bitte wissen :), eine gute Sache von Roll-Your-Own ist, dass Sie eine vollständige Kontrolle haben Dies ist eine übermäßige Vereinfachung dessen, was ich bei Kunden mache, die zwei oder drei Verbindungen gleichzeitig haben und einen Lastausgleich und eine QoS durchführen, die alle in Skripte integriert sind, die Verbindungsprobleme erkennen und die Routen und die QoS ändern.
Wenn Sie eine integrierte Lösung einer eigenen vorziehen , können Sie eine Distribution wie zentyal verwenden . Sie unterstützt das, was Sie verwenden möchten. Es handelt sich jedoch um eine vollständige Distribution, die auf die Erstellung eines SmallBusiness-Servers zugeschnitten ist. Normalerweise bevorzuge ich die Konfiguration meiner Server bei my besitzen, aber dies ist eine gute Distribution, die über das Web verwaltet werden kann.