着信トラフィックを考慮に入れた2つのWANインターフェイス間のMikrotikでのトラフィックのバランス

最近、複数のWAN間で単純なトラフィックバランシングを実装しようとすることにしました。 なぜ単純なのですか? 私は大量の情報を知りすぎており、私だけではないのではないかと疑っています。 ですから、他の人の成果を使うだけでは十分ではないので、何をして何をしているのかを知る必要があるので、初心者でも理解できるようなスキームを開発することにしました。



すぐに警告します-システムには多くの欠点があります。たとえば、異なるIPから同じリソースへのアクセスが可能であり、承認の再結集につながる可能性があります。 そのため、たとえば同じトレントなど、送信元アドレスの影響を受けない接続に最適です。



それでも、Mikrotikの構成を最初から説明することはしません。IPアドレスが既に設定されている2つのWANを持つルーターが既にあり、ローカルポートも構成されていることを前提としています。 そして、ユーザーは、少なくともどこで、どのメニュー項目が配置されているかを知っているレベルで、Mikrotikに多かれ少なかれ指向しています。



完全に新規参入者やネットワークに精通していない人(ある人はマスターになり、別の人は初心者になることもありますが、これには異常はありません)ネタバレをいくつか投稿しました

だから。 条件付きで以下を仮定します。

-ローカルアドレスは192.168.0.0/16の範囲にあり、Localcaブリッジに接続されています

-Provider1は、10.0.0.1ゲートウェイを備えたWAN1インターフェイス上にあります

-Provider2は、ゲートウェイ172.16.25.1を使用してWAN2インターフェイス上にあります



それでは始めましょう。



まず、新しいルートを作成します。



/ip route add disabled=no distance=1 dst-address=192.168.0.0/16 gateway=Localca routing-mark=isp2 scope=30 target-scope=10 add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=172.16.25.1 routing-mark=isp2 scope=30 target-scope=10 add disabled=no distance=1 dst-address=192.168.0.0/16 gateway=Localca routing-mark=isp1 scope=30 target-scope=10 add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.0.0.1 routing-mark=isp1 scope=30 target-scope=10
      
      





ルートとは、ルートです
ルートは、目的のサブネットを検索するポートまたはIPアドレスのルーターへの指示です。 これがないと、ルーターはパケットの送信先を認識できません。 そのため、インターネットゲートウェイだけでなく、ローカルアドレスが配置されているポートも示しています。



既存のダイナミック(または作成したルート)を複製しても心配する必要はありません。 ルーティングブランドのすべてのソルト。 ルーティングマークのあるすべてのルートは個別のルーティングテーブルであり、それを通過するパケットは他のテーブルを使用できないため、ローカルアドレスへのパスも登録する必要があります。 理論的には、目的のテーブルにアドレスがない場合、パケットはデフォルトの(マークされていない)ルーティングテーブルを見ることができます。 しかし、私はこの原則がうまくいかない場合がありましたので、安全にプレイする方が良いです



すべての新しい接続を目的のゲートウェイに送信するマングルを作成しましょう。



 /ip firewall mangle add action=mark-connection chain=prerouting connection-mark=no-mark disabled=no dst-address=!192.168.0.0/16 new-connection-mark=inet_con passthrough=yes add action=mark-routing chain=prerouting comment=multiwan connection-mark=inet_con disabled=no new-routing-mark=isp2 passthrough=no
      
      







最初のルールは、LANに接続せず、したがってWANインターフェイスを通過するすべてのマークされていない(したがって新しい)接続をキャッチし、必要なラベルを付けます。 いくつかのVANインターフェイスがあるため、このアプローチを選択しました。それぞれに対して、必要なOutを持つ個別のルールを作成する必要があります。 インターフェイス。したがって、1つのルールに限定しました。 必要なラベルを持つ接続の2番目のルールは、ルーティングマークを割り当てます。 コメントは、スクリプトでこのルールを見つけることができるように役立ちます。

マークルーティング
ルーティングマークは、選択したパケット/接続のルーティングテーブルを示すために使用されます。 それらは、対応するルーティングマークを運ぶルートのみを使用します。 このようにして、必要な条件に応じて、異なるトラフィックを異なるゲートウェイ/ポートに送信できます。 マングル(およびフィルターとNAT)の[アクション]タブの左側のすべてがフィルターです。 したがって、指定する基準が少ないほど、このルールに該当するトラフィックのカバレッジが広がります。 したがって、異なる条件を組み合わせることで、必要なトラフィックを非常に正確に分離できます。





次の項目では、システムスクリプトに移動し、次の内容の新しいスクリプトを作成します。



 :global rx1 "0" :global rx2 "0" /interface monitor WAN1 once do={ :global rx1 $("rx-bits-per-second"); } /interface monitor WAN2 once do={ :global rx2 $("rx-bits-per-second"); } :local one 20000000 :local two 8000000 :global wan1 ($one / $rx1) :global wan2 ($two / $rx2) if ($wan1>$wan2) do={/ip firewall mangle set [find comment=multiwan] new-routing-mark=isp1} else={/ip firewall mangle set [find comment=multiwan] new-routing-mark=isp2}
      
      







まず、変数をリセットしてから、インターフェイスの負荷に関するデータを取得します(具体的には、rx-bits-per-secondパラメーターが担当する1秒あたりの受信ビット数)。 次に、各インターネットチャネルの幅をビットで変数1と2に入力し、 反対を取得します(Mikrotikは頻繁に小数を表示しないため、ビット数を幅で除算すると0になります)相対的な負荷(幅をビットで負荷で除算します)。 そして、それらを比較し、最初のVANの数が多い場合は、マングル(ここでコメントが役立ちました。目的のマングルに切り替えました)でVAN1のルートマークを入力し、そうでない場合はVAN2に入力します。

スクリプトの実行頻度を設定するのはあなた次第です。 System-Shedulerに移動し、on Eventフィールドに目的の実行間隔で新しいタスクを追加します。



 /system script run erazel_balancing
      
      







ここで、 erazel_balancingはマングルを変更するスクリプトの名前です。 スクリプトの名前を変更することを忘れないでください。

これで、 相対的なワークロードに応じて、外部インターフェイス用の完全に自動化された負荷分散システムができました。



さて、さまざまな外部アドレスからサーバーにアクセスする問題が残っています。 したがって、急流やその他の重要でないアプリケーションにこのアプローチを使用することをお勧めします。 最初のマングル(接続を示す)で、プロトコルとポートに別の条件を作成し、異なるプロトコル/ポートに複製します。 例:



 add action=mark-connection chain=prerouting connection-mark=no-mark disabled=yes dst-address=!192.168.0.0/16 new-connection-mark=inet_con passthrough=yes protocol=tcp src-port=45000
      
      






All Articles