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スクリプトでブランチに追加されました。

おすすめ記事