明示的なゲートウェイ選択を含むTraceroute

明示的なゲートウェイ選択を含むTraceroute

ルーティングにはBGPを使用して2つのISPに接続されているルーター(Linuxを実行)がありますが、各接続を個別にping /追跡したいと思います。

標準のTracerouteコマンドはこれを行うことができるように見えますが(発信インターフェイス、送信元IPの選択を許可する)、ゲートウェイの選択は許可されません。コマンドラインオプション(-g)がありますが、ここで行うことは単にパケットを送信するのではなく、IPルーティングオプションを設定するだけです。

私が望むものは次のとおりです。私のルーターには、10.0.0.1(最初のISPで提供)、10.1.0.1(2番目のISPで提供)という2つのIPがあるとします。最初のISPのデフォルトゲートウェイ(次のホップ)は10.0.0.254、2番目のISPのデフォルトゲートウェイは10.1.0.254です。そのうちの1つが現在デフォルトゲートウェイ(BGP経由)として選択されていますが、他のゲートウェイでもトレース/ピングを使用できるようにしたいと思います。ルーティングテーブルを変更することはできません(特に他のISPに問題がある場合は切断されません)。

Traceroute_oth --nexthop 10.0.0.254 8.8.8.8 は以下を提供する必要があります。

1 10.0.0.254
2 some-iother-ip.first-isp.com
...
x 8.8.8.8

Traceroute_oth --nexthop 10.1.0.254 8.8.8.8 は以下を提供しなければなりません。

1 10.1.0.254
2 some-ip.second-isp.com
...
x 8.8.8.8

編集:ルーターが他のゲートウェイについて知らないため、「traceroute -i」は機能しません。デフォルトでは、ルーティングテーブルは次のとおりです(単純化)。

0.0.0.0/0 gw 10.0.0.254 eth0

明示的に指定しないと、プログラムは他のISPに接続されているeth1のデフォルトゲートウェイが何であるかを知りません。

答え1

マニュアルページを読みましたか?

   -i interface, --interface=interface
          Specifies  the  interface  through  which traceroute should send
          packets. By default, the interface is selected according to  the
          routing table.

答え2

もし私のような問題がある方がいらっしゃるかと思います。

Ubuntuでは、inetutils-tracerouteパッケージはソースインターフェイスの設定を許可しませんが、パッケージはtracerouteそれを許可します。あなたはほぼ確実に後者が欲しい。

答え3

私も同じ問題がありましたが、幸い解決しました。

マルチホームシステムでは、インターフェイスの数に関係なく、デフォルトゲートウェイは1つだけ定義できます。フラグで指定されたインターフェイスと同じサブネット上にないホストへのパス追跡を試みると、ゲートウェイの欠落-iによりパス追跡が失敗します(デフォルトが定義されている単一のインターフェイスを使用するほど運が悪いと仮定します)。ゲートウェイ)。

解決策は、マシンの各「追加」インターフェイス用の追加のルーティングテーブルを定義することです。

詳しくはこのリンクをご覧ください。

要約すると、次のような特性を持つ2つのインターフェースがあります。

Interface A: IP: 10.0.0.10    subnet: 255.255.255.0 Gateway 10.0.0.1
Interface B: IP: 192.168.0.10 subnet: 255.255.255.0 Gateway 192.168.0.1

Aのデフォルトゲートウェイのみがルーティングテーブルに表示されるため、Bのゲートウェイを含めるには、次の手順を実行する必要があります。

  1. /etc/iproute2/rt_tables次の行の終わりに移動

    1 routingTableB
    
  2. ルートとして次のコマンドを実行します。

    ip route add 192.168.0.0/24 dev <Interface B> src 192.168.0.10 table routingTableB
    ip route add default via 192.168.0.1 dev <Interface B> table routingTableB
    ip rule add from 192.168.0.10/32 table routingTableB
    ip rule add to 192.168.0.10/32 table routingTableB
    

-iその後、問題なくインターフェイスBでこのフラグを使用できます。

再起動後、この設定は失われます。永久に作成する方法については、上記のリンクをご覧ください。

ちなみに、フラグは-gインターフェイスがパケットを送信するIPを示しません。中間ノードにパケットをルーティングする方法を指示するためにプローブに含まれるパラメータ。

答え4

まあ...ここでは概念だけが説明されています。 - ポリシールーティング:

  1. Linuxに新しいRTテーブルを追加する

    echo 200 test >> /etc/iproute2/rt_tables

  2. 一致するポリシールールを追加してください。

    ip rule add oif <iface_to_second_ISP> table test

  3. 新しく作成されたテーブルへのデフォルトパスの追加

    ip route add 0.0.0.0/0 via <second_ISP_next_hop> dev <iface_to_second_ISP> table test

  4. キャッシュの更新とテスト

    ip route flush cache

    ping -I <IP_on_second_ISP_iface> google.com

関連情報