デフォルトソースIPアドレスをデフォルトパス以外のアドレスに変更するにはどうすればよいですか?

デフォルトソースIPアドレスをデフォルトパス以外のアドレスに変更するにはどうすればよいですか?

背景情報

  • 私はLinuxシステムを使用して小さなパブリックIPv4アドレスセットへのトラフィックをルーティングしています(でIP転送を有効にすることによってsysctrl.conf)。

  • ルータはeth1PPPoEを使用してISPに接続します。

  • pppによって使用されるローカルピアアドレスは、ISPによって割り当てられた手動で設定されたIPアドレスです。ローカルピアアドレスはです10.0.0.10

  • pppに使用されるリモートピアアドレスも、ISPによって割り当てられた手動で設定されたIPアドレスです。リモートピアアドレスはです10.0.0.9

  • ルーターのデフォルトパスは、10.0.0.9経由することです10.0.0.10

  • ルーターはイーサネットスイッチに接続されていますeth0eth0パブリックアドレスの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
                                                                     ...

私の質問

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

私の質問

新しい接続を開始するときにパブリックIPアドレスをプライマリソースとして使用しながら、不明なパケットをeth1転送/ルーティングするようにルータを設定するにはどうすればよいですか?10.0.0.9eth0

ベストアンサー1

注:ルータのLANは192.0.2.0/24で、LAN IPは192.0.2.0/24であると仮定します。イーサネット0192.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 

たとえば、レイヤ 3 リンクであり、レイヤ 2 リンクではないため、必要がないため、存在する場合もdefault via 10.0.0.9 dev ppp0 src 10.0.0.10 表示されない場合もあります (ただし、まだ許可されています)。以下の設定を適切に調整してください。via 10.0.0.9via

現在のカーネルは、インターネットにアクセスするために同じ側に設定された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スクリプトに統合できます。

また、インターフェース名をメモしておいてください。ポイントツーポイント0に変更されることがあります。ポイントツーポイント1または別の名前。設定スクリプトでこれを処理するのはユーザーの役割です。


同じパス設定を指定する別の方法:

  1. 指標を初めて設定するときは、子指標を追加してください。

    元のメトリックが設定されている場合(つまり、ゼロではなく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 
    
  3. ルーティングを簡素化するルーティングルール

    基本テーブルにパスを保持し、ルール内のプレフィックスベースのインプレッサを使用してデフォルトパスをオーバーライドできます。これは重複を防ぎます。みんなパス:デフォルトパスをコピーして変更します。

    2.を(デフォルト設定値を指定し、指定しない場合に発生するのと同じように降順でソート)に置き換えます。

    # ip rule add pref 32765 iif lo lookup 109 # needed only once
    # ip rule add pref 32764 iif lo lookup main suppress_prefixlength 0 # needed only once
    
    # ip rule
    0:      from all lookup local
    32764:  from all iif lo lookup main suppress_prefixlength 0
    32765:  from all iif lo lookup 109
    32766:  from all lookup main
    32767:  from all lookup default
    
    # 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
    

    デフォルトルートテーブルは、デフォルトルートにならないすべてのエントリに対して最初に使用され、ローカルで開始された発信トラフィックの場合、デフォルトルートはルートテーブル109に提供される。他の操作は続行され、以下に示すように、通常はベーステーブルのデフォルトパスを再検索します。

    2に比べて利点は、テーブルから(デフォルトではない)パスをコピーする必要がないことです。基本もはやテーブル109に入ることができない。下表基本方法2とは対照的に、デフォルト以外のパスの結果を提供します。

    # 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 
    # ip route get 192.0.2.2
    192.0.2.2 dev eth0 src 192.0.2.1 uid 0 
        cache 
    

おすすめ記事