web-dev-qa-db-ja.com

ip route show srcフィールド

私はipのmanページを読みましたが、srcが何であるかまだ理解できず、多くのドキュメントを見つけることができませんでした。

あなたがそれを完全に説明できるか、いくつかのリンクを指すことができるなら、それは良い答えです。

12
coredump

マルチホームホストにルートを追加する場合、このルートを使用して通信を開始するときに、ホストが送信元の送信元IPアドレスを制御する必要がある場合があります。これがsrcの目的です。

短い例:2つのインターフェースとIPアドレス192.168.1.123/24および10.45.22.12/24を持つホストがあります。 10.45.22.1経由で78.22.45.0/24へのルートを追加していて、192.168.1.123アドレスを使用して78.22.45.0/24に送信していないことを確認したい(ネットワーク78.22.45.0/24に戻るルートがないためか) 192.168.1.0/24に、または何らかの理由でトラフィックがこのルートをたどらないようにするため):

ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12

あなたが与えているsrcは、あなたのホストから発信されたトラフィックにのみ影響することに注意してください。外部パケットがルーティングされている場合、明らかに送信元IPアドレスがすでにあるため、変更されずに渡されます(NATを使用している場合を除きますが、これはまったく別の問題です)。また、この設定は、接続を開始するときにデフォルトを使用するのではなく、特定のアドレスにバインドすることを特に選択するプロセスによってオーバーライドされる可能性があります(まれです)。

17
the-wabbit

src属性は、アドレス選択アルゴリズムで使用されるヒントです。これは、ホストに複数のIPアドレスがある場合に重要です。これは、常にではありませんが、通常、複数のインターフェースがある場合です。アドレス選択に影響を与える他のルールがあり、ネットワークアプリケーションはbind()などのシステムコールを使用して選択アルゴリズムをオーバーライドすることもできますが、src属性はルーティングテーブルを使用する方法です「ホストXへの接続を開始したい場合、どのアドレスを使用すればよいですか?」

src属性の使用と効果を説明する例を次に示します。これが厳密にはインターフェースではなくアドレスとルートに関連していることを指摘するために、この例のホストにはネットワークインターフェースが1つしかなく、アドレスが2つあります。さらに、どちらを使用するかを選択する明白な方法が他にないという事実を強調するために、両方のアドレスは同じサブネット上にあります。

$ ip -4 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0
    inet 10.1.0.16/24 scope global secondary eth0
$ ip route list dev eth0
10.1.0.32/27  scope link  src 10.1.0.16
10.1.0.0/24  proto kernel  scope link  src 10.1.0.2

このホストは、どちらのアドレスからもこの/ 24サブネット上の他の252アドレスと通信できますが、デフォルト 10.1.0.32から10.1.0.63への接続を開始するときに10.1.0.16を使用します。残りはすべて10.1.0.2を使用します。

ホストが開始するのではなく応答している場合、要求の宛先アドレスから応答します。たとえば、10.1.0.32にある別のホストが10.1.0.2にあるこのホストに接続すると、戻りルートのsrc属性と一致しなくても、応答は10.1.0.2から送信されます。

9
neirbowj