アスタリスク環境でCisco電話を使用している企業の場合、各電話の数十または数百の構成ファイルの保存に問題があります。 30の電話を更新する必要があることをきっかけに(一部はファームウェア、一部は設定によって)、私は構成ファイルの自動生成のための技術を提供することにしました。
これは特定の実装よりもテクノロジーに関するものだということをすぐに言わなければなりません。コードは未加工でデバッグが不十分です。 この記事では、たとえばvoip-info.orgおよび同様のリソースで推奨されているように、すでにCisco電話を設定し、その動作に精通していることを前提としています。
したがって、いくつかのインストールデータ:
ダイヤラーには多くの種類がありますが、ここではCisco Call Manager(CCM)テクノロジーなどを使用した電話について説明しています。 正確な理由は、ユーザー側と管理者側の両方から最も快適に使用できることです。
電源を入れてから電話をダウンロードして操作する通常のプロセスは、次のようになります。
- IPアドレスの取得。
- TFTPサーバーから構成ファイルをダウンロードします(SEP <MAC> .cnf.xmlという形式の名前で;
- 構成に記載されているさまざまなファイルをダウンロードします。 ファームウェア;
- アスタリスクでの登録。
構成ファイルは非常に大きく複雑であり、電話機のほぼすべての側面を定義しているため、関心があります。
TFTPサーバーが独自のソフトウェアであり、設定が返された時点で、TFTPサーバーは設定を知っていればそれを生成できます。 最小バージョンでは、パラメーターのリストは次のとおりです。
- アスタリスクのデバイスのユーザー名/パスワード。
- 電話を持っている従業員の名前。
- 構成が異なる場合、電話ファームウェアファイル名と電話ブランド。
もちろん、ファームウェアを除き、これらはすべてカタログに含まれています。
1. IPアドレスの取得
提供する必要のあるファームウェアの種類を調べるには、ブランドを知る必要もあります。 電話は、DHCP要求フィールド60とSIPを登録するときの2つの場合にブランドを話します。 登録するときはすでに遅れているので、DHCPリクエストからブランドを取得します。
dhcpd.confでは、次のように記述できます。
on commit { set clip = binary-to-ascii(10, 8, ".", leased-address); set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)); execute("/root/bin/dhcpevent.php", "commit", clip, clhw, option vendor-class-identifier); }
これにより、リースが発行されたときにDHCPサーバーに次のようなスクリプトを発行するように指示します。
/root/bin/dhcpevent.php commit 172.20.21.209 0:f:77:12:bc:aa "Cisco Systems, Inc. IP Phone CP-7945G"
ここで、ブランドをどこかに保存する必要があります。これにより、構成を要求するときに、ブランドを信頼できます。 データベース、アスタリスクデータベース、またはテキストファイルのどこにでも保存できます。 他の資格情報とともにLDAPに保存し、このために不要なtelexNumber属性を使用するオプションを選択しました。 電話を人に割り当てるために、ieee802deviceクラスを追加し、macAddress属性を電話のMACアドレスとして属性付けしました。
スクリプトは、dhcpdが報告したMACアドレスを持つユーザーをLDAPで検索し、まだ設定されていない場合は、telexNumberを設定します。
2.設定を取得する
興味深いことに、cisophonesはまずHTTPプロトコルであるポート6970でTFTPサーバーにアクセスしてから、通常どおりに進みます。 会社のTFTPサーバーをHTTP / 6970に置き換えることを強くお勧めします-電話のロードが高速化されます。
重要! サーバーが応答するが、404または500を返す場合、TFTPは要求されず、電話機は起動しません。 6970がまったく応答しない場合、TFTPは正常に機能します。 最悪なのは、ポートがブロックされると、読み込みが大幅に遅くなることです。
VirtualHostの作成*:6970 <VirtualHost *:6970> ServerAdmin webmaster@pbx.labma.ru DocumentRoot "/export/tftp" </VirtualHost> <Directory "/export/tftp/"> Options Indexes FollowSymLinks AllowOverride None Require ip 172.20.21.0/24 </Directory>
および.htaccess:
RewriteEngine On RewriteRule ^(.*)\.xml$ index.php [L]
そして/ export / tftpにindex.php自体を置きます
<?php if (preg_match ("/\SEP(\w+).cnf.xml/", $_SERVER["REQUEST_URI"], $m)) $mac = $m[1]; else { $file = getcwd ().$_SERVER["REQUEST_URI"]; if (!file_exists ($file)) _fail(); header ("Content-type: text/xml"); header ('Content-Length: ' . filesize($file)); readfile ($file); exit (0); } $user = _getUser($mac); if (!$user) _fail(); $tmpl = "template.".$user["cisco"].".xml"; if (!file_exists ($tmpl)) _fail (); $xml = file_get_contents ("template.".$user["cisco"].".xml");
したがって、写真は次のようになります-電話はSEP <MAC>ファイルを要求し、ここからポピーアドレスを削除し、電話のLDAPブランドとその他のパラメーターを要求し、フォームtemplate.7941.xmlのテンプレートを開き、その変数を変更して電話に渡します。 xmlではない場合-Apache自体がファイルを提供しますが、xmlである場合は提供しますが、ポピーアドレスまたはテンプレートが見つからない場合は自分で提供します-404を呼び出します。
関数呼び出し_getLoadAは_getLoadBに置き換えることができ、ファームウェア自体はディレクトリ内で検索されます。最初の場合、その名前は静的にコードに組み込まれます。
以前は、一般的なパーツなどから複雑なテンプレートを作成したかったのですが、今ではそのような必要性は見当たらず、3951を除くすべての携帯電話に1つのテンプレートがあります。
ユーザーのLDAPに電話のMACアドレスを設定するだけで十分です。
3.ハザード- ポート6970が明確に応答する場合-TFTPは要求されません
- SIP 8.xファームウェアを搭載した電話機はポート6970を要求しません
- TCPとUDPの電話は同じアスタリスクで同時に動作することはできません-ファームウェアとtransportLayerタグに注意してください
- DHCPサーバーが無意味なゼロなしでポピーを送信する
- LDAPサーバーは、大文字と小文字を区別しないMACを検索します