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