Linux用DHCPv6プレフィックス委任サーバー?

Linux用DHCPv6プレフィックス委任サーバー?

あるインターフェイスでプレフィックスを要求し、他のすべてのインターフェイスにアドレスを提供するように(または要求に応じて小さなプレフィックス委任を提供するように)、どのようなLinux DHCPv6クライアントを設定できますか?また、ルーティングとルーターの通知を設定する必要があります。

これを行う方法がない場合は、配置場所に関係なく、NAT用のIPv4ルーターをプログラムするIPv6バージョンは何ですか?デフォルトでは、私は顧客がプラグを差し込んで操作できるように、メーカーがIPv6対応ルーターを設定する方法を理解しようとしています。 IPv6の実際のNATについて話すのではなく、受信したプレフィックスを取得して小さなプレフィックスとアドレスに分割し、それぞれに別々のIPアドレスを提供するDHCPv6プレフィックス委任クライアントをルーターに持たせる方法です。ダウンストリームリンクはDHCPv6サーバーです。

チャートを追加しました。

9台のコンピュータの図が含まれています。 #2、#4、#6、#7、#9はDHCPv6クライアントです。 #1 には 2001:db8:1200::/40 が割り当てられ、/48 プレフィックスデリゲートが提供されます。 #3、#5、#8はプレフィックスを要求したときにすべてDHCPv6サーバーとクライアントです。

一度設定してから、場所3、5、または8に置き、代理人のプレフィックスに従って自動的に設定されるようにLinuxで実行できるソフトウェアはありますか?

答え1

私はまだいくつかの問題を解決しているので、これは完全な答えではありませんが、(たとえいくつかの異なる理由がありますが)、ほぼ同じ設定を展開しようとしたときにこれまでに得たものは次のとおりです。

良いニュースは、仕様内でこれを行うことができることです。実際、これらの仕様は、主にネットワーク構造の柔軟性を可能にしながら、複数のNAT層に対する痛みを伴う必要性を防止するために、そのような接頭辞の下位委任を奨励するように明示的に設計されている。

悪いニュースは、アップストリームでプレフィックスを要求し、アドレスとパスをローカルに設定し、サブプレフィックスをダウンストリームネットワークに配布するための「すぐに利用可能な」単一のソフトウェアがないことです。一体、必要な作業を行うために(パッチなしで)既存のソフトウェアをLinuxに接続することさえできません。最も悪いことは、誰もこれに興味を持っていないということです。

これまで私が設定して作業した内容は次のとおりです。

  • 私はWIDE DHCPv6クライアント(dhcp6c)を使用して「アップストリーム」ネットワークにプレフィックスを要求しています。 ISCのDHCPクライアントの代わりにこのクライアントを選択しました。なぜなら、クライアントは受信したアドレスに自動的に含まれる唯一のクライアントだったからです。他のインターフェイスの DHCPv6 クライアントに割り当てられます。それ以来、他のDHCPクライアントが改善されたと思いますが、今はあまりにも怠惰であることを確認することはできません。

    残念ながらいいえデリゲートのプレフィックスの詳細を外部フックスクリプトに公開します。これは、「ダウンストリーム」dhcpd構成を(簡単に)上書きできないことを意味します。

  • ISC DHCPサーバー(v6モード)は、「ダウンストリーム」ネットワークにプレフィックスを割り当てます。私が知っている限り、WIDEのDHCPサーバーはプレフィックスを動的に委任できず、静的にのみ委任できるため、これを選択しました。驚くべきことに、動的プレフィックス委任を実行するようにISC DHCPサーバーを構成するのは比較的簡単です。次の簡単な操作を実行できます。

    subnet6 2001:db8:1234:ffff::/64 {
      prefix6 2001:db8:1234:a000:: 2001:db8:c0f:aff0:: /60;
    }
    

    これはアドレスを持つすべてのインターフェイスを受信し、指定さ2001:db8:1234:ffff::/64れた範囲で/ 60を配布します。dhcp6c上記の設定を強制的に更新できる限り(次の手順!)委任されたスーパープレフィックスが変更された場合は、dhcpd設定を自動的に更新できます。

  • dhcp6c前述のように、scriptDHCPv6応答が受信されたら、実行に設定ファイルのパラメータを使用します。残念ながら、SIPサーバーやDNSリゾルバなどのパラメータのみが公開されますが、効果がある委任された接頭辞などの情報。したがって、これを行うための次のスクリプトがあります。

    #!/bin/sh
    
    (sleep 3;
    
    base_prefix="$(ip -6 ad sh eth0 | grep 'scope global' | cut -d ' ' -f 6 | cut -d : -f 1-4 | sed 's/00$//')"
    
    if [ "$base_prefix" = "" ]; then
      exit 0
    fi
    
    cat <<-EOF >/etc/dhcp/dhcpd6.conf
    default-lease-time 1800;
    max-lease-time 7200;
    
    subnet6 ${base_prefix}00::/64 {
      prefix6 ${base_prefix}a0:: ${base_prefix}f0:: /60;
    }
    EOF
    
    svc -t /etc/service/dhcp6d) &
    
    exit 0
    

    サブシェルでこれをすべて行うことは、sleep 3DHCPクライアントをしばらく待つことができることを意味します。実際にインターフェイスを設定します(インターフェイスを設定する前にスクリプトを実行しているようです)。十分に安定して動作します。私のISPが私に任せた/56ので、受け取ったプレフィックスから最後の2つのゼロだけを削除します。幸運にも全体を得ることができれば、割り当てられた/48パイプラインはbase_prefixはるかに簡単です。

いいえすでに存在し、ソースコードをパッチする必要があると確信しています。つまり、プレフィックスを委任するときにパスを設定する必要があります。私が知っている限り、DHCPサーバーには自動的にパスを追加する機能が組み込まれていません。 (WIDEを2回確認しましたが、dhcp6s確かにできず、ISC DHCPを「パイピング」してこれを行う方法についてのアドバイスが見つかりませんでした。)。デリゲートプレフィックスとクライアントリンクローカルアドレスを取得するために外部コマンドを実行することもできません(ISC DHCPにはありますが、on commit { execute(...) }クライアントのリンクローカルアドレスを渡すことはできません)。

問題は、この重要な機能がないと、委任ルーターが後でプレフィックスへのトラフィックをどこにルーティングするかを知ることができないことです。これは非常に基本的な制限であり、これまで誰もこの問題に対処していないようだという事実には少し驚きました。本物それについて沈黙してください。

私は評価機能のための追加の「データ表現」を提供するISC DHCP用のパッチを開発しました。これにより、プレフィックスが割り当てられ、パッチが解放/期限切れになったときにパスを追加/削除できます。 ~へhttps://github.com/mpalmer/isc-dhcp/commit/4c8ae763bcf83c9068d57a5d9f570690a581b6d6(ISC DHCP 4.3.1の場合)まだパスのスクリプトを追加していませんが、作成が完了したらcontribそのブランチに追加できます。

付録:パスを再度削除できるようにするには、追加の変更が必要であることがわかりました。これで、これらclient-address-data-expressionをすべてまとめる方法を示す小さなRubyスクリプトでブランチに追加されました。

答え2

プレフィックス委任を実行するプログラムはradvdルータ広告デーモンです。リンクの他のIPv6ホストは、既知のプレフィックスに基づいてグローバルにルーティング可能なアドレスを自動的に設定する必要があります。

インターネットアクセスが必要なホストにはグローバルにルーティング可能なアドレスが必要であるため、IPv6にはNATは必要ありません。インターネットからの侵入を防ぐために、ファイアウォールの規則に注意する必要があります。

ISPは顧客に/ 48または/ 56ネットワークブロックを提供すると予想されます。これを行うには、各ルータが独自のブロックを取得できるようにするために、ISP側の独自性が必要です。 / 64ブロックはIPSネットワークへのアップリンクとして使用できます。これにより、ルーターはブロックの残りの部分で必要な数の/ 64を自由に通知できます。この場合、1つしか使用できません。

IPv6 DHCP 実装もあります。

実行されるクイック設定の1つは、6to4トンネルを使用するようにルータを設定することです。 radvdはこの設定を自動的に構成しますが、パブリックにルーティング可能なIPv4アドレスが必要です。

編集:radvdプレフィックスを子委任することはできませんが、利用可能なルーティング可能なアドレスに基づいて/ 64プレフィックスを自動的に通知できます。また、ルータの6to4プレフィックスを自動的に通知するBase6to4もあります。サブ委任には少しの計画が必要であり、プラグアンドプレイ構成で期待する以上のものです。

EDIT2:IPv4と同様に、IPv6は、eth0インターフェイスに割り当てられたアドレスに基づいて、eth1またはeth2に接続されているネットワークがどのネットワークに属しているかを確認する方法はありません。複数のネットワークセグメントがある場合は、各ネットワークセグメントに割り当てられたアドレス管理を開始する必要があります。良いニュースは、この作業が通常一度に完了することです。

IPv6を使用すると、5と8が/ 48を/ 49に/ 50サブネットを3に簡単に割り当てることができるため、簡単になります。もう1つの方法は、3、5、8を同じ/ 64サブネットのブリッジに設定することです。この構成はスイッチとして機能します。自動サブネットの作成 リスク ルータ 5 と 8 の両方が同じサブネットに委任することを選択します。

家庭用プラグアンドプレイルータは、デフォルトのプライベートアドレスブロックを使用します。図に示すように構成すると、非常に迅速に分解されます。異なるプライマリアドレスブロックを持つルータを混在させることで機能します。それ以外の場合は、各ルーターに異なるアドレスブロックがあることを確認する必要があります。

答え3

RIPngのようなルーティングプロトコルが必要なようです。これらのコンピュータにquaggaをインストールし、ルーティングプロトコルを必要とするインターフェイスを一度設定すると、すべての作業が完了します。

関連情報