どのポリシールーティングテーブルがIPv6ルーター広告で学習されたデフォルトルートを受信する必要があるかをカーネルに通知する方法はありますか?
私のホームネットワークには、Spectrumの基本的なIPv6サービスとHurricane Electricのトンネリングがありますが、他の理由でまだ必要です。ルータのリダイレクトを実行しないため、ポリシー ルーティングを使用して各ソース アドレス セットに対して別々のルーティング テーブルを維持します。
私のポリシールールリストは最初に「デフォルト」ルーティングテーブルを検索します。このルーティングテーブルは、ソースアドレスセットを使用して到達可能なローカルターゲットプレフィックスに制限されます。私はカーネルにdhcpcdにこのテーブルにデフォルトパスを入れないように指示し、一致するパスがない場合は次のルールに進むように指示しました。
次のルールは、HEソースアドレスに対してのみHE固有のテーブルを呼び出します。このテーブルにはHEへのデフォルトパスのみが含まれています。
最後のルールは、Spectrumソースアドレスに対してのみSpectrum固有のテーブルを呼び出します。これには、Spectrumへのデフォルトパスのみが含まれます。
これは静的スクリプトではうまく機能しますが、私のスクリプトにアドレスを直接接続することはそれほどエレガントに見えません。 SpectrumがIPv6ルーターアドレスを変更した場合はどうなりますか?
Spectrumへのデフォルトパスを自動的に維持したいのですが、Linuxカーネルには2つのオプションしかありません。 Spectrumのルーター通知を選択し、それを「デフォルト」テーブルのデフォルトパスに入れます。または("accept_ra_def_rtr = 0"に設定した場合)何もしないでください。 DHCP6 は DHCP4 とは異なり IPv6 ゲートウェイを割り当てないため、dhcpcd は IPv6 ゲートウェイアドレスを通知しません。この機能は、ルーター広告メッセージを受信するとカーネルによって実行されます。
私できるカーネルが「デフォルト」テーブルにSpectrumのデフォルトパスをインストールし、ソースアドレスがSpectrumに属している場合にのみ、そのテーブルを呼び出してHEテーブルに移動します。ただし、HEテーブルのすべてのローカルパスをコピーする必要があるため、再び汚れます。
私に簡単で明確な答えが浮かんだ。私カーネルに教えてくださいどのIPv6ルーター通知で学習されたゲートウェイへのデフォルトルートのルーティングテーブル。ポリシールールリストの最後に自動的に配置される「デフォルト」という特別なテーブルもあります。ただし、カーネルにこれを行うように指示する方法が見つかりません。 「メイン」テーブルでも何もありません。同様に、私は「基本」テーブルをdhcpcdによって(部分的に)管理されているローカルエントリ(Spectrumによって委任されたプレフィックスなど)に制限したいと思います。
他の人がこの問題を経験したことがありますか?解決策はありますか?
答え1
これを使う鎮圧器存在するip rule
:
プレフィックス長 NUMBER 抑制 プレフィックス長がNUMBER以下のルーティング決定を拒否します。
以下を使用して、デフォルトのパスを無視しながら、最初の(低い優先順位の値)ルールで変更されていないベーステーブルを使用できます。
ip -6 rule add priority 32000 from all lookup main suppress_prefixlength 0
このルールは、「デフォルト」のデフォルトパスであるデフォルトのルーティングテーブルのすべての/ 0プレフィックスを無視します。
以前に他の一致がない場合(たとえば、HEソースのルールが中間ルールで一致しない場合)、ベーステーブルは後でデフォルトパス(優先順位が32766の一般ルールで)を介して再利用できます。