ミクロティック。 フェイルオーバー。 負荷分散

世界に2つ以上のチャネルがあるフェールオーバーまたは負荷分散の方法を理解する必要があるとき、実際の構成を説明する多くの記事と指示を見つけました。 しかし、ほとんどどこでも、すべてがどのように機能するかの説明、およびさまざまなオプションの違いの説明を見つけることができませんでした。 1つの記事で、この不正を修正し、フェールオーバーと負荷分散の構成を構築するための最も簡単なオプションを収集します。



そのため、ローカルネットワークと2つのチャネルをインターネットに接続するルーター(メインISP1とバックアップISP2)があります。



できることを見てみましょう。



すぐに警告します。この記事ではmikrotikのすべてを説明するという事実にもかかわらず、スクリプトのトピックについては触れません。



フェイルオーバー



画像



メインチャネルに障害が発生した場合にトラフィックを転送できるバックアップチャネルがあります。 しかし、チャンネルが落ちたことをmikrotikに理解させる方法は?



チャンネルの最も簡単な予約



最も単純なフェイルオーバーは、ルートの優先度(mikrotik / ciscoの距離、linux / windowsのメトリック)、およびゲートウェイアクセシビリティチェックメカニズムを使用して構成できます。



以下の構成では、すべてのインターネットトラフィックはデフォルトで10.100.1.254(ISP1)を通過します。 しかし、アドレス10.100.1.254が使用できなくなると(そして、それを通るルートは非アクティブになります)、トラフィックは10.200.1.254(ISP2)を通過します。



構成:最も単純なフェイルオーバー
#   : /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 #    /ip address add address=10.1.1.1/24 interface=LAN #   NAT       /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat ###    ### #  2 default gateway    /ip route add dst-address=0.0.0.0/0 gateway=10.100.1.254 distance=1 check-gateway=ping /ip route add dst-address=0.0.0.0/0 gateway=10.200.1.254 distance=2 check-gateway=ping
      
      







check-gateway = mikrotikのpingは次のように処理されます。
定期的(10秒ごと)に、ゲートウェイはICMPパケット(ping)を送信することによりチェックされます。 10秒以内に返されない場合、パケットは失われたと見なされます。 2つのパケットが失われた後、ゲートウェイは使用不可と見なされます。 ゲートウェイから応答を受信すると、応答が使用可能になり、失われたパケットのカウンターがリセットされます。




より深いチャネル分析でフェイルオーバーを提供する



前の例では、プロバイダーのゲートウェイが表示されて応答しているが、背後にインターネットがない場合を除いて、すべてが正常です。 ゲートウェイ自体ではなく、その背後にあるものにpingを実行することにより、プロバイダーの実行可能性について決定を下すことができれば、非常に役立ちます。



このエンジニアリングの問題を解決するための2つのオプションを知っています。 最初の最も一般的な方法はスクリプトを使用することですが、この記事ではスクリプトに触れないため、2番目の方法について説明します。 scopeパラメーターの使用がまったく正しくないことを意味しますが、ゲートウェイよりも深くプロバイダーのチャネルをプローブするのに役立ちます。

原理は簡単です:

従来のデフォルトゲートウェイ=プロバイダーゲートウェイの代わりに、デフォルトゲートウェイが常に利用可能なノード (8.8.8.8または8.8.4.4など)の1つであり、プロバイダーのゲートウェイを介してアクセス可能であることをルーターに伝えます。



構成:より深いチャネル分析によるフェイルオーバー
 #   : /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 #    /ip address add address=10.1.1.1/24 interface=LAN #   NAT       /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat ### failover c    ### #   scope      8.8.8.8  8.8.4.4 /ip route add dst-address=8.8.8.8 gateway=10.100.1.254 scope=10 /ip route add dst-address=8.8.4.4 gateway=10.200.1.254 scope=10 #  2 default gateway        /ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 distance=1 check-gateway=ping /ip route add dst-address=0.0.0.0/0 gateway=8.8.4.4 distance=2 check-gateway=ping
      
      







次に、何が起こっているかを詳しく見てみましょう。

トリックは、プロバイダーのゲートウェイが8.8.8.8または8.8.4.4がルーターであることを認識せず、通常のパスに沿ってトラフィックを誘導することです。

mikrotikは、デフォルトではすべてのインターネットトラフィックを8.8.8.8に送信する必要があると考えています。8.8.8.8は直接表示されませんが、10.100.1.254が使用可能になった後です。 8.8.8.8のpingが消えると(ISP1からのゲートウェイを介してそのパスが厳密に示されていることを思い出します)、mikrotikはすべてのインターネットトラフィックを8.8.4.4、または再帰的に定義された10.200.1.254(ISP2)に送信し始めます。



しかし、プロバイダのゲートウェイを介してインターネットが機能する状況が数回ありましたが、特定のホストまたはネットワークがありません。 そのような場合、上記の方法はあまり役に立ちません。スムーズな操作を確保するために、スクリプトを使用してノードの可用性を確認する必要がありました。 ところで、スクリプトと動的ルーティングプロトコルを使用せずに、誰かが1つの外部ホストに対するファイラーのソリューションを知っている場合は、レシピを共有してください。



負荷分散



次に、別のスキームを見てみましょう。



画像



その中で、2番目の2番目のチャネルは予約されていませんが、同等です。 両方のチャネルを同時に使用して、スループットを向上させないのはなぜですか?



負荷分散の開始



ロードバランシングの最初のルールは、接続を監視することです。つまり、外部から到着した同じアドレスから到着した接続に応答します。 発信接続の場合-接続が確立されたアドレスを介してのみパケットを送信します。



理解することも重要な2番目のことは 、着信トラフィックと発信トラフィックの概念を分ける必要があるということです。 実際には、発信トラフィックの場合、ルーターはどの方向に進むかを決定でき、着信トラフィックは「シュレーディンガートラフィック」として決定できます。 彼がいなくなっている間、私たちのmikrotikはどのインターフェースを介して彼が来るかを知りません。そして、彼が到着したとき、インターフェースを変更するには遅すぎます。



第三に 、チャネルバランシングは冗長性ではありません。 これらは2つの別個の機能です。



ところで、なぜトラフィックセクションでは、パケットではなく接続で動作するのですか?
TCPプロトコルの仕組みをご覧ください。 要するに、TCPプロトコルのタスクは、受信側でパケットをスローするだけでなく、受信方法を制御することでもあります。 これは、実際にデータパケットがサービス情報とともに送信される接続を確立することによって行われます。 パケットを操作して接続を忘れると、1つのアドレスとの接続を確立したリモートホストが、2番目の「間違った」アドレスからのパケットの一部を単に破棄する場合があります。





シュレーディンガーのトラフィックを受け入れる準備をする



そのため、チャネルバランシングオプションを使用する場合は、最初に着信トラフィックを受け入れる準備をし、mikrotikに送信元と同じチャネルへの着信接続に応答するように指示する必要があります。 接続にマークを付け、次にそれらのルートにマークを付けることにより、基本的に、各外部アドレスに個別の複数のルーティングテーブルを作成します。



2つの外部IPアドレスを使用した負荷分散の初期設定
 #   : /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 #    /ip address add address=10.1.1.1/24 interface=LAN #   NAT       /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #        : /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #      ,   ,   -   . /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no # default gateway      : /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping
      
      







したがって、mikrotikは、対応するルーティングテーブルに従ってマークされた接続の各パケットを実行し、外部アドレス(10.100.1.1、10.200.1.1)は、チャネルとルートを混乱させることなく外部からアクセス可能になります。



発信トラフィックを分割する



発信トラフィックをインターフェイス間で分散するには、接続の適切なルートマークを切るだけです。 困難なのは、ISP1ラベルをハングさせる接続と、ISP2を決定する必要があることです。



化合物をグループに分割するには、いくつかのオプションがあります。



1)発信トラフィックを分割し、ブランドを厳しく引き締めます



トラフィックのバランスをとるルールを書き留めることができます。

たとえば、HTTP(80ポート)、HTTPS(443ポート)、POP(110ポート)、SMTP(25ポート)プロトコルをISP1経由で構成し、残りのトラフィックを2番目のプロバイダーを通過させます。



厳密に規定されたルールに従ってチャネルバランシングを行う設定
 #   : /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 #    /ip add address=10.1.1.1/24 interface=LAN #   NAT       /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #        : /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #      ,   ,   -   . /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no # default gateway      : /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #failover        /ip route add distance=2 gateway=10.200.1.254 routing-mark=rout_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=rout_ISP2 #      80,443,110,25  ISP1 /ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark="lan_out_ISP1" passthrough=no dst-port=80,443,110,25 protocol=tcp #     ISP2: /ip firewall add chain=prerouting action=mark-routing new-routing-mark="lan_out_ISP2" passthrough=no # default gateway      LAN   : /ip route add distance=1 gateway=10.100.1.254 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=lan_out_ISP2 check-gateway=ping #failover        /ip route add distance=2 gateway=10.200.1.254 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=lan_out_ISP2
      
      









2)発信トラフィックを分割し、各H番目の接続を選択します



接続を順番に分割できます。 左から1番目、右から2番目。 すべてがシンプルです。



N番目の接続を介したチャネルバランシングの設定:
 #   : /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 #    /ip address add address=10.1.1.1/24 interface=LAN #   NAT       /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #        : /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #      ,   ,   -   . /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no # default gateway         : /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #         ISP1 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 nth=2,1 #     ISP2 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 nth=2,2 # default gateway      LAN   : /ip route add distance=1 gateway=10.100.1.254 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=lan_out_ISP2 check-gateway=ping #failover        /ip route add distance=2 gateway=10.200.1.254 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=lan_out_ISP2
      
      









3)PCCを使用して送信トラフィックを分割する(接続分類子ごと)



PCCは、トラフィック共有をもう少し複雑にします。 TCPヘッダーデータ(src-address、dst-address、src-port、dst-port)に基づいてトラフィックをグループに分割します。



PPCバランスチャネル構成:
 #   : /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 #    /ip address add address=10.1.1.1/24 interface=LAN #   NAT       /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #        : /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #      ,   ,   -   . /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no # default gateway      : /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #failover        /ip route add distance=2 gateway=10.200.1.254 routing-mark=rout_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=rout_ISP2 # PPC       .    /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 per-connection-classifier=src-address-and-port:2/0 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 per-connection-classifier=src-address-and-port:2/1 # default gateway      LAN   : /ip route add distance=1 gateway=10.100.1.254 routing-mark=lan_out_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=lan_out_ISP2 check-gateway=ping #failover        /ip route add distance=2 gateway=10.200.1.254 routing-mark=lan_out_ISP1 /ip route add distance=2 gateway=10.100.1.254 routing-mark=lan_out_ISP2
      
      









ECMP(等コストマルチパスルーティング)を使用して発信トラフィックを分割する



私の意見では、トラフィック分離の最も簡単で最もおいしいバリアント:



ECMPチャネルバランス構成
 #   : /ip address add address=10.100.1.1/24 interface=ISP1 /ip address add address=10.200.1.1/24 interface=ISP2 #    /ip address add address=10.1.1.1/24 interface=LAN #   NAT       /ip firewall nat add src-address=10.1.1.0/24 action=masquerade chain=srcnat #        : /ip firewall mangle add action=mark-connection chain=input in-interface=ISP1 new-connection-mark=cin_ISP1 /ip firewall mangle add action=mark-connection chain=input in-interface=ISP2 new-connection-mark=cin_ISP2 #      ,   ,   -   . /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP1 new-routing-mark=rout_ISP1 passthrough=no /ip firewall mangle add action=mark-routing chain=output connection-mark=cin_ISP2 new-routing-mark=rout_ISP2 passthrough=no # default gateway      : /ip route add distance=1 gateway=10.100.1.254 routing-mark=rout_ISP1 check-gateway=ping /ip route add distance=1 gateway=10.200.1.254 routing-mark=rout_ISP2 check-gateway=ping #      /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=mixed # ECMP       /ip route add dst-address=0.0.0.0/0 gateway=10.100.1.254,10.200.1.254 routing-mark=mixed
      
      







Mikrotik自体は、ラウンドロビンアルゴリズムを使用して、トラフィックをゲートウェイで分割します。



ちなみに、バージョン6.Xでは、RouterOS mikrotikはECMPのチェックゲートウェイを壊したので、デザインを使用します

/ ip route add gateway = 10.100.1.254,10.200.1.254 check-gateway = pingは可能かつ論理的ですが、まったく役に立ちません。

ECMPで非生きているルートをマークするには、各ゲートウェイが個別に使用する追加のルートを作成する必要があります。 もちろん、チェックゲートウェイを有効にした状態で。 ルートを非アクティブとしてマークすることにより、mikrotikはすべてのユーザーに対してこれを行います。



そして、チャンネルの速度に関する最後の重要な発言



100 Mbpsと50 Mbpsなど、2つの異なるチャネルを使用してみましょう。 Nth、PCC、またはECMPでバランスを取ります。 総帯域幅はいくらですか?



実際、約100 Mbpsのどこか(最も弱いチャネルのX倍)。

これは、mikrotikがチャネルの帯域幅を把握していないため、測定しないためです。 単にトラフィックを比較的均等なグループに分割します。



チャネルの帯域幅を考慮して、発信トラフィックのグループを正しく設計することにより、このニュアンスを克服できます。



例えば
ECMPでは、これは、より高速なゲートウェイを数回指定することで実行でき、それにより、使用頻度が増加します。

 /ip route add dst-address=0.0.0.0/0 gateway=10.100.1.254,10.100.1.254,10.200.1.254
      
      







PCCでは、等しくないグループを作成することもできます。



 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 per-connection-classifier=src-address-and-port:3/0 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP1 per-connection-classifier=src-address-and-port:3/1 /ip firewall mangle add src-address=10.1.1.0/24 action=mark-routing chain=prerouting new-routing-mark=lan_out_ISP2 per-connection-classifier=src-address-and-port:3/2
      
      









ご清聴ありがとうございました。



トラブルのないルーティングシステムのセットアップに幸運を。



All Articles