回答:
マルチホームホストにルートを追加するときは、このルートを使用して通信を開始するときに、ホストが送信する送信元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を使用している場合を除きますが、これはまったく別の問題です)。また、この設定は、接続を開始するときにデフォルトを使用するのではなく、特定のアドレスにバインドすることを特に選択するプロセスによってオーバーライドされる可能性があります(まれに)。
この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から応答が返されます。