自宅の Linux ルーターでホーム ネットワーク上の IPv6 もサポートするようにしようとしています。
私は、パブリック インターネットへの GW として機能する NVG599 DSL ルーターと、ホーム ネットワークへの eth0 と DSL ルーターへの eth1 の 2 つのインターフェイスを備えた Linux ルーターを持っています。
ホーム ネットワーク <----eth0-----> LinuxRouter <------eth1------>DSLrouter -->>>>>
DSL ルーターは ISP からの /64 ネットワーク プレフィックス (2001:0:0:1234::/64 と仮定) で構成されており、DSL ルーターの IPv6 グローバル アドレスは 2001:0:0:1234::1 です。radvd を使用して Linux ルーターを設定し、この同じ /64 ネットワーク プレフィックスを eth0 にホーム LAN に向けてアドバタイズしました。実際、LAN 上のホストは IP アドレスを自動構成できることがわかります。アドバタイズには Linux ルーターが ::/0 のデフォルト ルーターとしてリストされており、パケットが DSL ルーターに送信されるように転送が設定されています。
私が抱えている問題は、DSL ルーターがインターネットから着信パケットを受け取ったときに eth1 で近隣要請パケットを送信しており、その近隣要請が Linux ルーターの eth1 -> eth0 に渡されていないことです。DSL ルーターがホーム ネットワークに直接接続されていると認識しているために、この問題が発生するのではないかと考えています (中間に Linux ルーターがない場合、99% のホーム ネットワークでは通常この状態になります)。
2 日間かけて解決しようとしましたが、今のところ答えは見つかりません。radvd を使用してルータ広告を DSL ルータに送信し、/64 プレフィックスのすべてのパケットを Linux ルータ経由でルーティングするように指示する方法があることを期待しています。現在、Linux ルータによって送信されるルータ広告は、/64 プレフィックスが DSL ルータに向けて送信されるように次のように構成されています。
interface eth1
{
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
route 2001:0:0:1234::/64 {
};
};
DSL ルーターがすべてのパケットをネットワークに転送するにはこれで十分だと思いますが、それでも近隣要請が表示されます。
DSL ルーターには「デフォルト サーバー」を設定できる IP パススルー設定がありますが、これは IPv4 にのみ適用されるようです。DSL ルーターが RA を尊重していないと仮定すると、Linux ルーターで「xorb」を使用して IPv6 マルチキャスト転送を設定できると思いますが、他のオプションがあるかどうか疑問に思っています。
答え1
私が抱えている問題は、DSL ルーターがインターネットから着信パケットを受信すると eth1 で近隣要請パケットを送信しており、その近隣要請が Linux ルーターの eth1 -> eth0 に渡されていないことです。
それは正常です。近隣要請はARPクエリと同じように機能します。IPアドレスをMACアドレスに変換するため、同じブロードキャストドメイン内でのみ意味を持ちます。も意味ないルータがそれらを転送できるようにします。
(ただし、状況によってはルータがプロキシ最後に説明したように、それらを実行する必要がありますが、それはプラン C に残しておきます。
これは、DSL ルーターがホーム ネットワークに直接接続されていると認識しているために発生するのではないかと考えています (中間に Linux ルーターがない場合、ホーム ネットワークの 99% では通常この状態になります)。
はい、そしてあなたは決して言ったそれ以外の場合は。
つまり、あなたの現在の状況は同じIP サブネットが 2 つの異なるネットワークで使用されており、Linux ルーターがブリッジとして機能することを期待しています... これは、ルーターのほぼ正反対です。
(混乱している部分が IPv6 である場合は、ルーティングは両方でほぼ同じであり、ND は ARP とほぼ同等であるため、IPv4 の観点で全体の設定について考えてください。したがって、v4 で同じ 192.168.1.0 サブネットを使用しない場合は...)
最善の行動は取得する2番/64,使用してそれLinuxルーターのeth1ネットワーク用です。(DSLルーターがDHCPv6-PD経由でプレフィックスを取得している場合は、2番目のプレフィックスを要求するように仕向けることが可能です。)ただし、違いは、2番目の/64がインターフェース上で直接使用されるのではなく、ルーティングLinux ルーターのアドレスに向かって。
例えば:
- DSL ルーターの WAN インターフェイスには 2001:db8:0:0:a:b:c:d があります。
- DSL ルータは ISP から 2001:db8:10:0::/64 を取得し、LAN インターフェイスで 2001:db8:10:0::1/64 を自己割り当てし、それに対するルータ アドバタイズメントを送信します。
- Linux ルータは、RA に基づいて eth1 上の 2001:db8:10:0:x:y:z:t を自動構成します。
- Linux ルータは ISP から 2001:db8:10:1::/64 を取得し (何らかの方法で)、eth0 インターフェースで 2001:db8:10:1::1/64 を自己割り当てし、radvd はそれに対するルータ広告を送信します。ない最初のサブネット用。
- DSL ルーターには、2 番目のサブネットのすべてのトラフィックが Linux ルーターに転送されるように、「2001:db8:10:1::/64 via 2001:db8:10:0:x:y:z:t」のようなルートが必要です。
(あまり分かりにくい例で申し訳ありません。)
場合によっては、ISP が /60 全体、または /56 全体をあなたに委任し、そのすべてを DSL ルーターにルーティングします。その場合、DHCPV6-PD マジックを使わずに 2 番目のサブネットを設定するだけで済みます。ただし、これは ISP と CPE の両方に依存するため、ここでは適切な「一般的な」回答を提供することはできません。
2 番目の /64 プレフィックスを取得できない場合は、次のオプションが考えられます。
Linux システムをルーティング機能のない純粋なブリッジに変換します。
追加の /64 を取得するには、トンネル プロバイダー (または 6to4) などの他のソースを使用します。既存のトンネル サービスは、以下に説明するハックよりもはるかに信頼性が高く動作します (追加の遅延は除きます)。
DSL ルーターが /64 のみを取得し、LAN 用に設定しないようにします (ルーターの柔軟性によって異なります)。代わりに、Linux システムの eth0 リンク ローカル アドレス経由で /64 のルートを設定し、同様に DSL ルーターの LAN リンク ローカル アドレス経由で Linux システムに ::/0 のルートを設定します。その結果、/64 は 2 番目のサブネットでのみ使用され、1 番目のサブネットにはパブリック プレフィックスがまったくなくなります。
現在の設定を続行しますが、近隣探索プロキシを実行するために「ndppd」をインストールします。(いいえ、ND パケットにはリンクローカル ソース アドレスが含まれることが多いため、マルチキャスト転送は実行できません。) これには注意してください。非常に混乱を招く可能性があります。
2 番目の LAN にプライベート (ULA) アドレスを使用し、Linux ルーターで 1 対多の NAT (マスカレード) を有効にします...このプロセスでは IPv6 の有用性のほとんどが失われます。(はい、正式には IPv6 には NAT は存在しませんが、Linux netfilter/iptables が屈服してそれを実装するのを止めることはできませんでした。)