web-dev-qa-db-ja.com

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

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

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

8
Andomar

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

それを行う立場にない場合は、omapi(3)とomshell(1)を見てください。 OMAPIを使用して、「クラス」オブジェクトと「プール」オブジェクトを動的に作成し、Zypherの提案を実装します。 dhcpd.hをチェックしましたが、class構造体にはOMAPI_OBJECT_PREAMBLEがあるので、これは可能です。 OMAPIのドキュメントは少し...露出度が高い可能性があることに注意してください。

2
Phil P

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

あなたがすることは次のようなクラスをセットアップすることです:

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

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

3
Zypher

たぶんあなたはここから始めることができます:

http://blog.nominet.org.uk/tech/2005/12/21/using-omapi-object-management-application-programming-interface/

使用したことはありませんが、少しスクリプトを作成すればうまくいくと思います。

[〜#〜]編集[〜#〜]

man omshell(1)は他のいくつかの例を示します

1
PiL

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

0
Zak