インターネットに接続されたUbuntuサーバーがあり、イーサネットで住宅用ADSL回線に接続されています。ほとんどの場合、これで十分ですが、ADSLリンクが希望するほど信頼できるとは言えません。マーフィーの法則は、ダウンタイムは最も都合が悪いときに来ることをすでに定めています。
「従量制」の3G USBドングルを使用してフェイルオーバーを提供したいのですが。他の人のために機能するサンプル構成に関する情報と、私の目的に最も適した(安価な)ハードウェアに関する情報が不足しています。目的は、ADSL回線が切断されると、サーバーがこれを検出して3Gサービスにダイヤルアップすることです。ADSL回線を監視し、接続が復元されたときにシームレスに切り替えます。
私が気にかけている主要なサービスは、OpenVPNトンネルです-UDPを介してリモートサーバーに接続します。その他の便利なサービスはSquidです。ADSLが切断されているときでも、LANからWebにアクセスできます。
質問:
3Gスティック用に1つの無線LAN、1つの無線LAN、USBを備えた小さなedimax 3Gルーターがいくつかあります。 LANポートは、LANの一部として、またはプライマリWANポートポートとして構成できます(3gはフェイルオーバーとして機能します)。私はedimaxとは関係ありません。私たちは、それらを道路やコンベンションでそのサイズに合わせて使用します(私たちが持っているものの1つは電池式です)。
とは言っても、私は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サーバーを使用する必要があります。さて、監視はもう少し難しいですが、このようなものを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
Three)See Edimax 3g routers ( zeroshell linuxfw-distribution zeroshellにはフェイルオーバーがあるようです、ルーター用の安価なPCを入手し、zeroshellを使用します。テストはしていませんが)
4)テスト、持続、およびフェイルオーバーが初めて必要になると、失敗します(何かおかしいので...)。
アクセスする最も一般的なページのローカルキャッシュとの3g接続を高速化しない限り、このセットアップにsquidが必要かどうかはわかりません。
私は顧客のためにいつでもこれを行いましたが、これを作成するための開発されたシステムが見つからなかったので、自分でロールしたことがあります。Manweが提供した手順は、多かれ少なかれ必要なときに行うものですが、ここに貼り付けます私が使用している粗雑なbashスクリプト(時間があれば、Pythonでこれをはるかに改善したい)。
基本的に、インターネットがあるかどうか、WANバックアップを使用しているかどうかを確認し、必要な変更を加えます
#!/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
Adslがダウンした場合にのみサーバーで3gを使用するようにすると、adslifaceでのみiptablessnatまたはmasqueradeを使用し、。/ script_change_to_secondary.shでsquidへのアクセスをブロックします。ファイルは次のようになります。
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/にも、「/ etc/init.d/openvpnrestart」を含むbashスクリプトが必要です。これにより、pppプロバイダーに接続するたびに、openvpnが自動的に再起動します。
私が言ったように、それは少し醜くて粗雑ですが、それは機能します:)これのための統合されたクリーンなソリューションを見つけたら私に知らせてください:)、あなた自身のロールの良いことの1つはあなたが完全なコントロールを持っているということですこれは、2つまたは3つの接続が同時に稼働していて、接続の問題を検出し、ルートとQoSを変更するスクリプトとすべて統合された負荷分散とQoSを実行する顧客で行うことを単純化しすぎています。
ロール・ユア・オウンよりも統合ソリューションを好む場合は、 zentyal のようなディストリビューションを使用できます。これは、使用したいものをサポートしますが、SmallBusinessサーバーを作成するために調整された完全なディストリビューションです。サーバーを自分で構成することを好みますが、これはWeb経由で管理できる優れたディストリビューションです。
ソフトウェアソリューションを使用してほとんどのポスターを見ることができるので、ハードウェアベースのソリューションを検討しましたか?
どれだけの費用をかけたいかはわかりませんが、DrayTek Vigor2830nがニーズに対応します。より安価な代替案があるかもしれませんが、これは私が2つの異なるサイトで使用したものであり、非常によく機能しています。
このデバイスには3つのWAN接続、標準ADSL回線、イーサネット接続、3Gドングルがあります。これは、ADSLと3Gドングルを使用し、ルーター自体を使用するだけで設定できます。3Gドングル「ロードバランスモード」である必要はありませんが、純粋なWANバックアップモードのみです。
元の投稿をもう一度読んで、3GドングルでのみVPNトラフィックを制限して、3Gドングルの帯域幅コストを最小限に抑えることもできます。
キープアライブを使用して、30秒ごとにリモートインターネットアドレス(おそらくGoogle)にpingを実行できますが、タイムアウトが発生します。 pingがタイムアウトした場合は、キープアライブを構成してeth0をシャットダウンし、3Gインターフェイスを起動してから、VPNを再起動します。
Keepalivedを構成するときは、遅延などを考慮して、不要なときにインターフェースを切り替えないようにする必要があります。いくつかのテスト/実験が必要になります。 ADSL回線が復活したときに、ADSL回線に戻す方法は考えられません。
ADSLモデムとサーバーの間にルーターがある場合、またはモデムにpingできる外部アドレスがある場合は、接続を元に戻すための基準としてそれを使用できます。
それがあなたを始めることができることを願っています!
Shorewall(ubuntuパッケージが利用可能)とgwpingという名前の非常に便利なスクリプトを使用して、独自のソリューションを作成できます。
1)それほど難しくない-タスクを実行してDSLのステータスを確認する-失敗した場合は、3Gインターフェースを起動してデフォルトルートをフェイルオーバーします。 VPNも再起動する必要があるかもしれません。
2&3)私のお気に入りのファイアウォールにはデフォルトでその機能が含まれているため、自分でプリビルドパッケージをチェックしたことはありません。 www.astaro.comを確認してください(ソフトウェアアプライアンスは家庭での使用は無料です。または、デフォルトの30日間の試用版をテストに使用できます)
4)WANフェイルオーバー(バックアップラインのビーイングもダウンしていることを除く)で重大な問題が発生したことはありません)
tsg