web-dev-qa-db-ja.com

デフォルトの送信元IPアドレスを、デフォルトルートに面しているアドレス以外のものに変更するにはどうすればよいですか?

背景情報

  • Linuxシステムを使用して、パブリックIPv4アドレスの小さなブロックのトラフィックをルーティングしています(sysctrl.confでIP転送を有効にすることにより)。
  • ルーターは、PPPoEを使用してeth1経由でISPに接続しています。
  • Pppに使用されるローカルピアアドレスは、ISPによって指定された手動で構成されたIPアドレスです。ローカルピアアドレスは10.0.0.10です。
  • Pppに使用されるリモートピアアドレスも、ISPによって指定された手動で構成されたIPアドレスです。ローカルピアアドレスは10.0.0.9です。
  • ルーターのデフォルトルートは、10.0.0.9経由の10.0.0.10です。

  • ルーターはeth0を介してイーサネットスイッチに接続されています。 eth0は、パブリックアドレスの1つを使用するように構成されています。

  • スイッチは他のすべてのパブリックホストを接続します。接続されている各ホストは、パブリックIPアドレスを使用します。
  10.0.0.9
ISP ----------+
              |   10.0.0.10                       X.X.X.X
              +------------- (eth1) ROUTER (eth0) --------------- SWTICH 
                                                                     |     
                                                                     +-- X.X.X.Y
                                                                     +-- X.X.X.Z
                                                                     ...

私の問題

ルーターで実行されているプログラムを除いて、すべてが期待どおりに機能します。ルーターで実行するアプリケーションはすべて、インターネットへの接続を開始するときに、送信元IPアドレスとして10.0.0.10を使用します。 eth1はインターネットが利用できる場所であるため、これは理解できます。ただし、アドレスはパブリックにルーティングできないため、aptping、およびその他のプログラムは機能しません。それをサポートするアプリケーション(つまり、ping)にソースアドレスを明示的に設定すると、アプリケーションは機能します。

私の質問

新しい接続を開始するときにデフォルトのソースとしてeth1のパブリックIPアドレスを使用しながら、10.0.0.9/eth0を介して不明なパケットをルーティングするようにルーターを構成するにはどうすればよいですか?

1

注:ルーターのLANは192.0.2.0/24であり、eth0上のLANIPは192.0.2.1/24であると見なします。具体的な説明と解決策を提供します。

ISPは、一部のパブリックIPアドレスを節約するために、内部ルーティングの目的でプライベートIPを割り当てました。このIPは外部に表示されることを意図したものではないため、問題ありません(ISPルーターを超えてネットワークに接続された場合、またはそうでない場合は、パスに沿って 厳密なリバースパス転送 によってすぐにドロップされます。 -ルーティング可能、返信はありません)。ただし、これにより構成がより複雑になり、ルーターからISPへの接続以外のすべての場合にこのIPが使用されるのを回避できます。

あなたはおそらくこれに似たものを持っています(それは少し異なるかもしれませんが、問題ではありません):

# ip route
default via 10.0.0.9 dev ppp0 
10.0.0.9 dev ppp0 proto kernel scope link src 10.0.0.10 
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.1 

たとえば、代わりにdefault via 10.0.0.9 dev ppp0 src 10.0.0.10がある場合や、via 10.0.0.9がレイヤー2リンクではなくレイヤー3リンクであるために表示されない場合があり、viaは不要です(しかし、まだ受け入れられています)。それに応じて、以下の設定を調整してください。

現在、カーネルは明らかに最も適したIPを選択します。これは、インターネットに到達するために同じ側に設定されたIPです。それ以外のことは何も指示されないためです(または、不要なIPを使用するように明示的に指示されます)。

# ip route get 8.8.8.8
8.8.8.8 via 10.0.0.9 dev ppp0 src 10.0.0.10 uid 0 
    cache 

カーネルがインターネットに到達する方法をチェックし、特定の優先送信元IPアドレスを指定するときに、ルーティング動作を置き換える必要があります。エラーや予期しない問題が発生した場合、接続が失われる可能性があることに注意してください。可能であれば、代替(コンソール)アクセスを使用します。

# ip route replace default via 10.0.0.9 dev ppp0 src 192.0.2.1
# ip route get 8.8.8.8
8.8.8.8 via 10.0.0.9 dev ppp0 src 192.0.2.1 uid 0 
    cache 

それだけです。ルーターは通常どおりルーティングしますが、ローカルで発信された発信IPを選択する必要がある場合は、特に明記されていない限り、192.0.2.1を選択します(例:ソケットでソースIPを明示的にバインドするプロセス)。

このルートは、リンクがダウンしてからアップするたびに再設定する必要があります。リンクが完全に確立された後、これをいくつかのpppoeスクリプトに統合するのはあなた次第です。

インターフェイス名ppp0ppp1またはその他に変更される可能性があることにも注意してください名前。セットアップスクリプトでこれに対処するのはあなた次第です。


これと同じルート設定を設定する別の方法:

  1. メトリックが最初に設定されるときに、より低いメトリックを追加します

    元のメトリックが設定されている場合(つまり、0ではなかった場合、たとえば100だった場合)、代わりに、前のメトリックを置き換えるのではなく、より低いメトリックで代替のデフォルトルートを追加できます。

    # ip route add default via 10.0.0.9 dev ppp0 src 192.0.2.1 metric 50
    
  2. 専用ルーティングルール

    上記のルートを削除する可能性のあるpppoeに関連するさまざまなツールからの相互作用が懸念される場合は、この設定を代替ルーティングテーブルにインストールし、混乱を防ぐためにメインテーブルの部分的なコピーを使用してルーティングルールで優先することができます。ルートは引き続き表示されないため、切断/再接続のたびにこれをやり直す必要があります。ここで、iif loは特別であり、実際には着信ではなく「ローカルで発信された発信パケット」を意味し、109は任意に選択されたテーブル値です。

    # ip rule add iif lo lookup 109 # needed only once
    # ip route add table 109 10.0.0.9 dev ppp0 proto kernel scope link src 10.0.0.10 # to keep using 10.0.0.10 for local link, just in case
    # ip route add table 109 192.0.2.0/24 dev eth0 src 192.0.2.1 # will disappear if eth0 is brought down
    # ip route add table 109 default via 10.0.0.9 dev ppp0 src 192.0.2.1 # will disappear if ppp0 is brought down
    

    メインテーブルに他のルーティングエントリを追加した場合は、それらも上にコピーする必要がある可能性があります。

    # ip route get 8.8.8.8
    8.8.8.8 via 10.0.0.9 dev ppp0 table 109 src 192.0.2.1 uid 0 
        cache 
    
2
A.B

あなたが言ったように。ルーターをゲートウェイとして使用するスイッチ上の他のクライアントには、パブリックIPアドレスがあります。あなたのルーターはそうではありません。ルーティングされないLANアドレスがあります。あなたのインターネットサービスプロバイダーはあなたにパブリックアドレスを与えなかったので、ルーターは外に出ることができません。

別のパブリックIPがある場合は、eth1に仮想eth構成を作成し、適切にルーティングします。その後、ルーターも外出できます。

1
WGRM