Mikrotik、3プロバイダー、トラフィックの切り替えと共有

この投稿を書くこの質問によって促されたhabrahabr.ru/qa/38801

興味がある人のために、猫をお願いします。



そして、それは与えられます:

1ポート-プロバイダー1

ポート2-プロバイダー2

ポート3-プロバイダー3(スタンバイ)

4ポート-ネットワーク1 192.168.101.0

5ポート-ネットワーク2 192.168.102.0

質問:



ここから、最初のプロバイダーに障害が発生し、4つのポートから2番目のプロバイダーへ、またはすぐに3番目のプロバイダーにトラフィックが流れた場合の対処方法が少しわかりません。

3番目のプロバイダーがトラフィックを考慮しているため、最新のプロバイダーがあると仮定します。

そして、ここに私たちのインターフェースがあります



さらにIPアドレス





最後に、ルーティングテーブル

ここでは説明が必要です。各プロバイダーについて、ルートマーキングのあるデフォルトルートを作成しました。

MikroTik自体を構成するには、最初のルートが必要です。



それだけです。 MikroTikはさらに微調整する準備ができています。



次のステップでは、すべてのプロバイダーのMikroTikの応答性を構成します。



最初に、3つのインターフェースすべてにマスカレードを設定しましょう。


[admin@kirilka] /ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade comment="ISP 1" [admin@kirilka] /ip firewall nat add chain=srcnat out-interface=ether2 action=masquerade comment="ISP 2" [admin@kirilka] /ip firewall nat add chain=srcnat out-interface=ether3 action=masquerade comment="ISP 3"
      
      







今、おそらく最も興味深いマングル


私たちのタスクは、3つすべてのプロバイダーを通じてMikroTikに到達できるようにすることです。

これを行うには、着信接続をキャッチして接続をマークする必要があります。次のルールは、マークされた接続が接続元のプロバイダーに戻ることです。



 [admin@kirilka] /ip firewall mangle> print Flags: X - disabled, I - invalid, D - dynamic 0 chain=input action=mark-connection new-connection-mark=ISP 1 -> Input passthrough=no dst-address=172.25.25.247 in-interface=ether1 1 chain=output action=mark-routing new-routing-mark=ISP 1 passthrough=no connection-mark=ISP 1 -> Input 2 chain=input action=mark-connection new-connection-mark=ISP 2 -> Input passthrough=no dst-address=192.168.99.2 in-interface=ether2 3 chain=output action=mark-routing new-routing-mark=ISP 2 passthrough=no connection-mark=ISP 2 -> Input 4 chain=input action=mark-connection new-connection-mark=ISP 3 -> Input passthrough=no dst-address=192.168.100.2 in-interface=ether3 5 chain=output action=mark-routing new-routing-mark=ISP 3 passthrough=no connection-mark=ISP 3 -> Input
      
      







私は人間的に解読しようとします

ルール0

最初のインターフェイス(ISP 1)に到着するパケットの宛先アドレスにIPアドレス172.25.25.247(ISP 1)が含まれている場合、名前(ISP 1-> Input)で接続をマークします。

ルール1

発信パケットがマーキングのある接続(ISP 1->入力)に属する場合、ISP 1ルートを使用します

したがって、ルーターは、ISP 1プロバイダーからの(pingまたは着信トラフィック)場合、ISP 1プロバイダーを介して応答を返すことを認識しています。



ピン留めする画像。 そして理解。



さて、今ではどのプロバイダーからでもMikroTikにアクセスできます。



各オフィスが4番目のポートからのトラフィックを処理する時間です。 しかし、最初に、事前ルーティングを使用し、ルーティングテーブル内の「ヒット」の前のトラフィックをフィルタリングする必要があるため、慎重に1つの小さな微妙なニュアンスを準備します。

マークしないネットワークでアドレスシートを作成する必要があります。

私は通常LocalNetと呼びますが、今回は同じことをします。



 [admin@kirilka] /ip firewall address-list> print Flags: X - disabled, D - dynamic # LIST ADDRESS 0 LocalNet 192.168.101.0/24 1 LocalNet 192.168.102.0/24
      
      







ローカルネットワークのシートを作成したので、今度はトラフィックのルーティングを進めます。

 6 chain=prerouting action=mark-routing new-routing-mark=office 1 passthrough=no src-address=192.168.101.0/24 dst-address-list=!LocalNet
      
      





パケットがルーターを離れる前:送信者アドレスがネットワーク192.168.101.0/24にあり、宛先アドレスがリストされていない場合 、名前office 1でルートをマークします

簡単に言えば、これはオフィス1に属するすべてのトラフィックであり、他のローカルサブネットには行きません。



次に、オフィストラフィック用に3つのルートを作成する必要があります1

 dst-address=0.0.0.0/0 gateway=172.25.25.1 check-gateway=arp distance=10 routing-mark=office 1 dst-address=0.0.0.0/0 gateway=192.168.99.1 check-gateway=arp distance=11 routing-mark=office 1 dst-address=0.0.0.0/0 gateway=192.168.100.1 check-gateway=arp distance=12 routing-mark=office 1
      
      





少し明確なチェックゲートウェイは、ゲートウェイの可用性を自動的にチェックする手順です。これは、このL2接続があるためです。私の場合、L3(pptpなど)があり、pingを実行する場合、arpはpingよりも優れています。

また、距離に注意を払う必要があります。同じ宛先アドレスを使用して、ルーターが優先ルートとは何かを決定するのは、距離だけです。



さて、今は「マレソンバレエ」の最後の部分です。

check-gatewayはゲートウェイの可用性のみをチェックするため、これは私たちには明確に適合しません。

私たちのタスクは、チャンネルが各プロバイダーを介してインターネット上でライブであり、家畜に応じてルートが有効か無効かを判断することです。

この場合、2つのネットワークがあります

office1 ISP1-> ISP2-> ISP3

office2 ISP2-> ISP1-ISP3

ご覧のとおり、いずれにせよ、最終結果はISP3になります。当然、ISP3チャンネルを確認する必要はありません。

そのため、最初にMikroTikで日付と時刻を設定する必要があります。 あなたが私の助けなしにそれをすることを願っています。



余談:インターネットには多くの異なるスクリプトがありますが、それらのほとんどは、ルートの距離値を変更する特定の期間にスクリプトを実行します。 MikroTikにはNANDメモリがあり、独自の記録制限があるため、このオプションは適していません。 保存します。 もちろん、スクリプトを編集してチェックすることはできましたが、これは私たちの方法ではありません。 )


MikroTik機能を使用します。 ネットウォッチ

2つのルールを作成しましょう。

 [admin@kirilka] /tool netwatch> print detail Flags: X - disabled 0 host=8.8.8.8 timeout=1s interval=1m status=up up-script=ISP1-UP down-script=ISP1-DOWN 1 host=8.8.4.4 timeout=1s interval=1m status=up up-script=ISP2-UP down-script=ISP2-DOWN
      
      







Netwacthはトリガーとして機能します。

状態が変化した場合、現在のトリガー値で指定されたスクリプトが実行されます。

私たちの場合、8.8.8.8へのpingがパスしない場合、ステータスがdownに変わり、値がアップするとすぐにISP1-DOWNスクリプトが実行され、ISP1-UPスクリプトが実行されます



イベント用のスクリプトを作成します。

ISP1-UP

 /ip route enable [find dst-address=0.0.0.0/0 and gateway=172.25.25.1 and distance >= 10];
      
      





私の場合、ルートのコメントで決定する人を探しています。

しかし、これまでのところ、10を超える距離が実際に使用された場所で一度だけ会ったことがあります。

ISP1-DOWN

 /ip route disable [find dst-address=0.0.0.0/0 and gateway=172.25.25.1 and distance >= 10];
      
      







ネットウォッチ全体が完全に機能するには、ISP1を介して8.8.8.8にトラフィックを送信し、ISP2を介して8.8.4.4にトラフィックを送信する2つのルートを追加する必要があります

 [admin@kirilka] > ip route add dst-address=8.8.8.8 gateway=172.25.25.1 [admin@kirilka] > ip route add dst-address=8.8.4.4 gateway=192.168.99.1
      
      







実際にはすべて。

残り物
マングル:

 [admin@kirilka] > ip firewall mangle print Flags: X - disabled, I - invalid, D - dynamic 0 chain=input action=mark-connection new-connection-mark=ISP 1 -> Input passthrough=no dst-address=172.25.25.247 in-interface=ether1 1 chain=output action=mark-routing new-routing-mark=ISP 1 passthrough=no connection-mark=ISP 1 -> Input 2 chain=input action=mark-connection new-connection-mark=ISP 2 -> Input passthrough=no dst-address=192.168.99.2 in-interface=ether2 3 chain=output action=mark-routing new-routing-mark=ISP 2 passthrough=no connection-mark=ISP 2 -> Input 4 chain=input action=mark-connection new-connection-mark=ISP 3 -> Input passthrough=no dst-address=192.168.100.2 in-interface=ether3 5 chain=output action=mark-routing new-routing-mark=ISP 3 passthrough=no connection-mark=ISP 3 -> Input 6 chain=prerouting action=mark-routing new-routing-mark=office 1 passthrough=no src-address=192.168.101.0/24 dst-address-list=!LocalNet 7 chain=prerouting action=mark-routing new-routing-mark=office 2 passthrough=no src-address=192.168.102.0/24 dst-address-list=!LocalNet
      
      







ルート:

 [admin@kirilka] > ip route print detail Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit 0 AS dst-address=0.0.0.0/0 gateway=172.25.25.1 gateway-status=172.25.25.1 reachable via ether1 distance=1 scope=30 target-scope=10 routing-mark=ISP 1 1 AS dst-address=0.0.0.0/0 gateway=192.168.99.1 gateway-status=192.168.99.1 reachable via ether2 distance=1 scope=30 target-scope=10 routing-mark=ISP 2 2 AS dst-address=0.0.0.0/0 gateway=192.168.100.1 gateway-status=192.168.100.1 reachable via ether3 distance=1 scope=3> target-scope=10 routing-mark=ISP 3 3 AS dst-address=0.0.0.0/0 gateway=172.25.25.1 gateway-status=172.25.25.1 reachable via ether1 check-gateway=arp distance=10 scope=30 target-scope=10 routing-mark=office 1 4 S dst-address=0.0.0.0/0 gateway=192.168.99.1 gateway-status=192.168.99.1 reachable via ether2 check-gateway=arp distance=11 scope=30 target-scope=10 routing-mark=office 1 5 S dst-address=0.0.0.0/0 gateway=192.168.100.1 gateway-status=192.168.100.1 reachable via ether3 check-gateway=arp distance=12 scope=30 target-scope=10 routing-mark=office 1 6 AS dst-address=0.0.0.0/0 gateway=192.168.99.1 gateway-status=192.168.99.1 reachable via ether2 check-gateway=arp distance=10 scope=30 target-scope=10 routing-mark=office 2 7 S dst-address=0.0.0.0/0 gateway=172.25.25.1 gateway-status=172.25.25.1 reachable via ether1 check-gateway=arp distance=11 scope=30 target-scope=10 routing-mark=office 2 8 S dst-address=0.0.0.0/0 gateway=192.168.100.1 gateway-status=192.168.100.1 reachable via ether3 check-gateway=arp distance=12 scope=30 target-scope=10 routing-mark=office 2 9 AS dst-address=0.0.0.0/0 gateway=172.25.25.1 gateway-status=172.25.25.1 reachable via ether1 distance=1 scope=30 target-scope=10 10 AS ;;; Netwatch ->ISP2 dst-address=8.8.4.4/32 gateway=192.168.99.1 gateway-status=192.168.99.1 reachable via ether2 distance=1 scope=30 target-scope=10 11 AS ;;; Netwatch ->ISP1 dst-address=8.8.8.8/32 gateway=172.25.25.1 gateway-status=172.25.25.1 reachable via ether1 distance=1 scope=30 target-scope=10 12 ADC dst-address=172.25.25.0/24 pref-src=172.25.25.247 gateway=ether1 gateway-status=ether1 reachable distance=0 scope=10 13 ADC dst-address=192.168.99.0/24 pref-src=192.168.99.2 gateway=ether2 gateway-status=ether2 reachable distance=0 scope=10 14 ADC dst-address=192.168.100.0/24 pref-src=192.168.100.2 gateway=ether3 gateway-status=ether3 reachable distance=0 scope=10 15 ADC dst-address=192.168.101.0/24 pref-src=192.168.101.1 gateway=ether4 gateway-status=ether4 reachable distance=0 scope=10 16 ADC dst-address=192.168.102.0/24 pref-src=192.168.102.1 gateway=ether5 gateway-status=ether5 reachable distance=0 scope=10
      
      





スクリプト:

 [admin@kirilka] /system script> print Flags: I - invalid 0 name="ISP1-UP" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api last-started=jul/11/2013 05:07:34 run-count=9 source=/ip route enable [find dst-address=0.0.0.0/0 and gateway=172.25.25.1 and distance >= 10]; 1 name="ISP1-DOWN" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api last-started=jul/11/2013 04:47:03 run-count=2 source=/ip route disable [find dst-address=0.0.0.0/0 and gateway=172.25.25.1 and distance >= 10]; 2 name="ISP2-UP" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api last-started=jul/11/2013 05:08:01 run-count=1 source=/ip route enable [find dst-address=0.0.0.0/0 and gateway=192.168.99.1 and distance >= 10]; 3 name="ISP2-DOWN" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api last-started=jul/11/2013 05:07:36 run-count=1 source=/ip route disable [find dst-address=0.0.0.0/0 and gateway=192.168.99.1 and distance >= 10];
      
      








All Articles