我有一个互联网连接的Ubuntu服务器,通过以太网连接到住宅ADSL线路。 这在大多数情况下都是足够的,但是我不能依赖ADSL链路来达到我想要的那么可靠。 墨菲定律已经规定,当最不方便的时候,就会出现停机时间。
我想使用“即用即用”3G USBencryption狗来提供故障切换。 我缺乏关于适用于其他人的示例configuration的信息,以及我用于最合适(便宜)的硬件的信息。 其目的是当我的ADSL线路断开时,服务器检测到这一点,并拨打3G服务 – 监控ADSL线路,并在连接恢复时无缝切换。
我关心的主要服务是OpenVPN隧道 – 通过UDP到远程服务器。 另一个有用的服务将是鱿鱼 – 所以当ADSL断开连接时,我仍然可以从我的局域网访问networking。
问题:
我们有几个较小的edimax 3g路由器,有1个wlan,1个lan和USB的3G棒。 Lan端口可以configuration成局域网或主WAN端口(3g作为故障切换)。 我不隶属于edimax,我们使用它们的道路上或按照其规模(我们有一个是电池供电)。
话虽如此,我会去在Ubuntu的服务器的设置。
回答:
改为3g – 脚本示例:
pon YourIsp-name route del default gw "your_adls_defaultGW" route add -host "ping_or_other_test_host_for_checking_adsl_route" gw "your_adls_defaultGW" "do_other_stuff_like_restart_openvpn_maybe"
改为adsl – 脚本示例:
poff YourIsp-name route add default gw "your_adls_defaultGW" route del -host "ping_or_other_test_host_for_checking_adsl_route" gw "your_adls_defaultGW" "do_other_stuff_like_restart_openvpn_maybe"
在adsl中使用dhcp将会使用这个简单的例子,你必须修改/etc/resolv.conf,或者使用像google 8.8.8.8这样的开放DNS服务器(或者你自己的parsing器)。 现在..监控是有点困难,但把这样的东西cron(不要,这是一个天真的例子),会给你故障转移到3G和回来。
ping -q -c 2 "ping_or_other_test_host_for_checking_adsl_route" && TARGETUP=1 || TARGETUP=0 ; echo $TARGETUP ; if [ "$TARGETUP" == 1 ] ; then ( rm /tmp/.adsl_down ; [ -e /tmp/.adsl_up ] || ( PATH_TO_YOUR_ADSL_UP_SCRIPT && touch /tmp/.adsl_up ) ); else ( rm /tmp/.adsl_up ; [ -e /tmp/.adsl_down ] || ( PATH_TO_YOUR_3G_UP_SCRIPT && touch /tmp/.adsl_down )) ; fi
三)查看Edimax 3g路由器 ( zeroshell linuxfw分布看起来像zeroshell有故障转移,所以得到一个廉价的pc路由器和使用零。我没有testing它,虽然)
四)testing,坚持和第一次需要故障转移时,它会失败(因为一些愚蠢的…)。
我不确定你需要这个设置的鱿鱼,除非加快与您访问的最常见的页面的本地caching3g连接..
我已经为客户做了这个任何时候,我还没有find一个发达的系统,使我有自己的滚动,Manwe给你的步骤是或多或less我什么时候我需要他们,但我会粘贴在这里任何粗暴的bash脚本我正在使用(当我有时间,我想在python使这更好)。
基本上,我检查如果我有互联网或没有,如果我使用湾备份,并作出所需的更改
#!/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
鉴于你只希望你的服务器使用3g,如果adsl宕机我只会使用iptables snat或伪装只在adsl iface和我会阻止访问鱿鱼在./script_change_to_secondary.sh,您的文件可能是:
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
你也可以在/etc/ppp/ip-up.d/下find一个带有“/etc/init.d/openvpn restart”的bash脚本,每当你连接到一个ppp提供程序时,你的openvpn就会自动重启。
那么就像我说的这是一个有点丑陋和粗糙,但它的工作原理:)如果你find一个完整的清洁解决scheme,这让我知道请:)自己的一个好处是,你有一个完整的控制这是对我在任何有两个或三个连接的客户同时处于活动状态的做法的过于简单化,并且执行负载均衡和QoS,所有与检测连接问题和更改路由和QoS的脚本集成在一起。
如果你喜欢一个集成的解决scheme,你可以使用像zentyal这样的发行版 ,它支持你想使用的,但它是一个完整的发行版,为创build一个SmallBusiness服务器而定制,我通常更喜欢configuration我的服务器在我的自己的,但这是一个很好的分布,可以通过networkingpipe理。
你有没有考虑过基于硬件的解决scheme?
不知道你想花多less钱,但是DrayTek Vigor 2830n可以满足你的需求。 可能有更便宜的替代品,但是这是我在两个不同的地点使用的,并且functionexception良好。
该设备上有3个WAN连接,标准ADSL线路,以太网连接和3Gencryption狗。 您可以使用ADSL和3Gencryption狗并使用路由器本身进行设置。 3Gencryption狗不需要处于“负载均衡模式”,而只需要纯粹的WAN备份模式。
重新阅读原文后,我想补充一点,您甚至可以仅通过3Gencryption狗来限制VPNstream量,以最大限度地降低3Gencryption狗的带宽成本。

1)不是太困难 – 运行一个任务,并检查你的DSL的状态 – 当它失败时,启动3G接口并且故障转移默认路由。 也许你可能需要重新启动你的VPN。
2&3)从来没有检查过预构build包,因为我最喜欢的防火墙默认包含了这个function。 请访问www.astaro.com(软件设备免费供家庭使用,或者您可以使用默认的30天试用版进行testing)
4)从来没有任何广域网故障的重大问题(除了备份线也下降)
TSG
我想你可以使用keepalived来ping每一个远程的互联网地址(谷歌可能)每30秒一些超时。 如果ping超时configurationkeepalivedclosureseth0并调出3G接口,然后重新启动您的VPN。
在configurationkeepalived时,您应该考虑延迟等,以便在不需要时切换接口。 一些testing/实验将需要。 虽然我不能想到恢复到ADSL线路的方式。
如果在ADSL调制解调器和服务器之间有一个路由器,或者调制解调器有一个可以ping通的外部地址,那么可以使用它作为恢复连接的条件。
KeepaliveD网站
希望能让你开始!
你可以使用shorewall(可用的ubuntu包)和一个非常有用的脚本gwping来创build一个自己的解决scheme。