DHCPオンザフライブロック割り当て


8

DHCPマシンに接続するクライアントが多数あります。それらのいくつかを、より低い優先度でルーティングされる別のIPブロックに割り当てたいと考えています。DHCPリースの更新ごとに、データベースを確認し、顧客を割り当てるIPブロックを決定します。

DHCPサーバーでスクリプトを実行したり、データベースを調べたり、どのアドレスをどのプールに割り当てるかを決定するときに動的コードを実行したりする方法はありますか?各クライアントは、option82、別名「DHCPリレーエージェント情報オプション」によって一意に識別されます。


どのOSのどのDHCPサーバー?
Zypher

これはキャリアタイプのセットアップのように聞こえます...そうですか?オープンツールにこのようなものがすでに存在していたとしたら、私は驚きます。私はおそらく自分で書いてみようと思います。非常に興味深い質問ですが!
MikeyB 2010

@Zypher:Debian OS、通常のdhcpd @MikeyB:はい、キャリア設定
Andomar

回答:


2

理想的には、ホストオブジェクトの「ハードウェア」行に相当するOption82に基づくアドレス割り当てをサポートするようにdhcpdを変更します。isc-dhcpdよりも内部構造が単純なISPで働いていたときに、OpenBSD dhcpdでそれを行いました。

それを行う立場にない場合は、omapi(3)とomshell(1)を確認してください。OMAPIを使用して「クラス」および「プール」オブジェクトを動的に作成し、Zypherの提案を実装します。私はチェックdhcpd.hしたところ、class構造体にはがあるOMAPI_OBJECT_PREAMBLEので、これは可能であるべきです。OMAPIのドキュメンテーションは少々...読みにくいかもしれません。


Zypherが提案したソリューションは、現在私たちが持っているものです。また、システム管理者がdhcpdの編集されたバージョンを高く評価することはないと思います。しかし、OMAPIは良い代替手段のようです、ありがとう!
Andomar

3

したがって、オプション82ではこれを実行しませんでしたが、最善の策はisc dhcpdでクラスを使用することです。

あなたがすることは次のようなクラスを設定することです:

class "userclass1" { 
    match if substring(option agent.circuit-id, 2, 2) = "<your_id1>";
}
class "userclass2" { 
    match if substring(option agent.circuit-id, 2, 2) = "<your_id2>";
}

次に、プールステートメントで:

pool {
  allow members of "userclass1";
  range 10.0.0.11 10.0.0.50;
}
pool {
   allow members of "userclass2";
   range 10.0.0.51 10.0.0.100;
}

リファレンス:dhcpd.conf

これで少なくとも正しい軌道に乗れるはずです。テストするためのプレイサーバーがありませんが、他のオプションを使用して同様のことを行いました。


変更があるたびにdhcpdをリセットする必要はありませんか?スクリプト呼び出しによってプールメンバーシップを動的に決定させることは可能ですか?
Andomar

@Andomar:そうだね。残念ながら私はそうは思いません-しかし私はそこで非常に間違っている可能性があります
Zypher


0

これを行う1つの方法は、それらのクライアントを別のVLANに割り当てることです。そうすると、それらのクライアントが取得するDHCPアドレスは、自動的に別のプールに配置されます。


実際、VLANの切り替えは避けたいものです。VLANスイッチがクライアントのモデムを混乱させ、実行に時間がかかる
Andomar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.