![画像](https://habrastorage.org/webt/mn/ft/9g/mnft9gsqxl7s_v7qpucjkgeqnvw.png)
警告! この記事の資料とスキームは、問題を解決する方法の一般的な考え方を示すために、初等主義に単純化されています。 特に深まりません。
再帰ルーティングとは何ですか? プロバイダーのゲートウェイの背後にあるインターネットの可用性を監視するため。 結局のところ、プロバイダーのルーターはエコー要求によく応答することがよくありますが、グローバルネットワークへのプロバイダーの[上]リンクは何らかの理由で消えました。
再帰ルーティングを使用すると、選択したプロバイダーを介したインターネットアクセスの可用性を評価し、トラフィックのルーティングを決定できます。
ただし、再帰ルーティングの使用では、作成されたルートのパラメーターの中に
再帰ルーティングの魔法は、パラメーター"scope"および "target-scope"の背後に隠されています。 ルートが再帰的に機能するには、その「ターゲットスコープ」が再帰的に参照する静的ルートの「スコープ」値以上である必要があり、ルートで指定されたゲートウェイがいずれかのインターフェイスを介して直接到達できませんでした。
最も単純なActive / Backupスキームを検討してください。 ルーターはNATを実行し、Ether1-isp1およびEther2-isp2インターフェイスを介して2つのプロバイダーに接続されます。 メインプロバイダー(ISP-1)は、DHCPプロトコルのみを使用してクライアントにIPアドレスを配布します。 2番目のプロバイダーは静的IPアドレスを提供しますが、速度ははるかに遅くなります。
バックアップ(ISP-2)への切り替えは、メインプロバイダーを介したインターネットへのアクセスが不可能になったときに行う必要があります。
![画像](https://habrastorage.org/webt/sp/6x/au/sp6xauunimjxvginbtlch9ehhgs.png)
このようなスキームのプロバイダーのハイライトは、クライアントのIPアドレスだけでなく、デフォルトゲートウェイの定期的な任意の変更です。
バージョン6.39より前は、 sheduler 、 netwatch、および同様のメカニズムのさまざまな組み合わせで非常に洗練された松葉杖を見る必要がありました。
RouterOS開発者は、バージョン6.39からこれらのユーザーに会い、dhcpクライアントがデバイスでトリガーされたときに特別なスクリプトを呼び出す機能を作成しました。
ソリューション自体は2つの部分で構成されています。
- 再帰ルートで使用するために、プロバイダーのIPアドレスとゲートウェイアドレスからdhcpプロトコルを取得する必要があります
- 可能であれば、プロバイダーから受け取ったゲートウェイアドレスを自動使用から除外します。
それでは、最後から始めましょう。
将来のメインの距離よりも大きい距離の値を使用して、ISP-2を経由するバックアップルートを作成します。 この例では、「距離= 2」を使用しました。
ISP-2経由のバックアップ
/ip route add dst-address=0.0.0.0/0 gateway=192.0.2.1 distance=2
さらに、ISP-1プロバイダーからデフォルトルートを受信するが、直接使用しないために、特別な値「distance = 255」があります。 この距離値を持つルートはシステムルーティングテーブルに移動しますが、 アクティブになることはありません 。
コード
/ip dhcp-client add comment="ISP-1 dhcp" default-route-distance=255 dhcp-options=hostname,clientid interface=Ether1-isp1
このようなルートは、プロバイダーから送信されたパラメーターを読み取り、スクリプトを介して再帰的なルートの設定に実装するためにのみ必要です。
受信したパラメーターから、変数$ gateway-addressに最も関心があります。 名前から推測できるように、プロバイダーのネットワーク内のデフォルトゲートウェイのアドレスが含まれています。 これを使用して、再帰的なルートを最新の状態にします。
再帰的なルート自体は、スクリプトから正しく認識される必要があります。 これを行うには、作成の段階で、テーブル内でそれらを見つけるために使用される一意の「コメント」を示します。 再帰的なルートペアを作成するためのコード:
ルートのペアを作成する
/ip route add dst-address=8.8.4.4 gateway=127.0.0.1 scope=30 target-scope=30 comment=" isp1route " disabled=yes
/ip route add dst-address=0.0.0.0/0 gateway=8.8.4.4 check-gateway=ping
最初の行は、プロバイダーがdhcpパラメーターを発行し、dhcp-clientスクリプトを使用して処理された後にのみ、プロバイダーのネットワーク内の実際のゲートウェイを指す必要があります。
簡略化されたスクリプト
/ip route set [find comment=" isp1route "] gateway=($"gateway-address") disabled=no
より高度なオプション
:if ($bound=1) do={ /ip route set [find comment=" isp1route "] gateway=($"gateway-address")disabled=no; :log warning ("New ISP1 gateway: ".($"gateway-address")) }
これで、デフォルトゲートウェイとして使用するためにISP-1プロバイダーからIPアドレスを受信すると、 127.0.0.1ではなくルートペアに含まれます。
0.0.0.0/0へのルートが示されている2行目は、実際にすべての魔法を実行します。 そこでゲートウェイとして指定された8.8.4.4ノードは、オプション「check-gateway = ping」を使用して、ISP-1ネットワークを介して正確に応答がチェックされます。 ノード8.8.4.4が20秒以内にエコー要求に2回応答しない場合、ルーターはこのルート(ISP-1)を介したインターネットへの接続が利用できないと見なします。 この場合の新しい接続は、ISP-2バックアッププロバイダーを介してルーティングされます。
すべてが正しく行われた場合、8.8.4.4までのルートの近くのwinbox / ip-> routesウィンドウで、「resursive via ...」という言葉が表示されます。 これは、ルートが正確に再帰的に構築されたことを意味します。
最後に、例のみ-ウィンドウ画面winbox:
![画像](https://habrastorage.org/webt/cs/qp/yg/csqpygzqinf53ae-ivjaac15pk8.png)