FreePBX 17を試験してみた

久々のエンジニアBlog更新です。
当社ではFreePBXを利用した小規模オフィス向け内線電話を構築しております。
基本はFreePBX 16 + Ubuntu 22.04 LTSといった安定性とメンテナンス性を
重視した構成でご提案していますが社内電話ぐらいは遊びたいということで、
社内のFreePBXを最新のFreePBX 17とAsterisk 20でリプレイスしてみました。

なお、FreePBX 17は公式の説明にもございますが正式リリースではありません。
そのため、重要な電話サービスで導入することはおすすめできません。
(当社はメイン電話回線でやっちゃいましたが・・・)

結果としては今までとほぼ使い勝手は変わりませんってか違いはわからないです。
ただ、インストール時の構成はガラリと変わってます。
まず、PHP8.2に対応したことが一番大きいです。
今までのFreePBXではPHPが5.6とかであったのでセキュリティリスク的にも
問題がありましたがそこが改善されました。
そしてAsterisk 20のサポートです。
DBは今までのものでも利用可能ですが公式のWikiではMariaDB10.11を利用していました。
当社でもそれに沿ってMariaDB 10.11でインストールしています。

公式のインストールガイド?
https://sangomakb.atlassian.net/wiki/spaces/FP/pages/10682545/How+to+Install+FreePBX+17+on+Debian+12+with+Asterisk+20

インストール手順は上記ページでほぼ網羅されているので当Blogでは省略します。

ここではFreePBX 17で気になった点をご紹介したいと思います。

Trunkの設定

見た目は全く同じですがこの「Context」が曲者です。
弊社ではいくつかIP電話サービスを利用しており、ひかり電話も収容しています。
そのため、着信先を把握するためにContextを利用しています。

具体的には以前のBlogにも記載しましたが、着信時のSIPパケットを利用して着信した電話番号や
契約情報をInboundのDIDにセットして着信番号毎にRingGroupやアナウンスを設定しています。
そのため、いつも通りContextを設定すると着信しない!!!
しかもAsteriskがエラーで埋め尽くされたり謎の動きを。。。

どうやらこのContextにいれた文字はConfigに反映されないようです。
ためしに「from-AAAAAAAAA」としましたがgrepで何もヒットしません。。。

じゃ、contextじゃなくて何で設定されてるんだ??ということで調べました。
ファイルとしては、extensions_additional.confで定義されています。
[from-trunk-pjsip-XXXXX] ←XXXXXの部分はTrunkの設定名になってました。

ただ、これって実はFreePBX 16の頃からだったのかな??記憶がないし検証は
面倒なのでやめましたが新規にFreePBX16を導入する際に確認してみたいと思います。

なので、「extensions_custom.conf」に設定する際は上記の名前で設定してみてください。
当社ではそれで期待通り動作しています。

——————————————————————————————————————————–
オフィスの固定電話を従業員のスマホに着信させませんか?
また社員の私用スマホからの通話ではなく私用スマホを利用して会社の電話から発信させませんか?
これらのことが高価なPBXを購入したり特別なサービスを契約することなく安価に利用可能です。
FreePBXを活用したオフィスの固定電話見直しのご相談を受け付けております。
ご興味ございましたら以下のフォームからお気軽にお問い合わせください!
https://www.quick-solutions.jp/contact/

Asteriskでひかり電話と050利用時に着信先を区別したい

久々にAsteriskの設定を変える機会があったのでメモを残したいと思います。
弊社では外出が多いので社内電話システムをクラウドPBXにしており、
ひかり電話の03番号や050の受付回線に着信するとクラウドPBX経由で、
社内に設置のGRANDSTREAMの固定電話数台と社員のスマホに着信する
仕組みを採用しております。

クラウドPBXといっても零細企業の弊社では有料サービスを
借りる程ではないためVPS上にFreePBXをインストールし、
VPNで社内と接続することでオレオレクラウドPBXを運用してます。

で、今回の話題の鳴り分なのですが今までは業務上としては、
03宛に着信しても050に着信しても両方対応できていたのですが、
業務繁忙のため、番号毎に担当を設けることになりました。
そうすると問題になるのが通常のひかり電話だとHGWが着信番号を
通知してこないのでAsterisk側でそのままでは入電経路がわからない!

そこでちょっとAsteriskのConfigを追加してあげることで、
050宛に着信したのか、03宛に着信したのか区別することが可能になります。
あとはInboud roureでそれぞれ目的の内線やRingに向ければ解決です。

弊社はAsterisk 20でやってますが19とかでも同じだと思います。

1、ひかり電話のTrunkの設定でContextを設定する。
弊社では[from-NTThikari]と付けましたがなんでも構いません。

2、”extensions_custom.conf”に以下のように設定する
[from-NTThikari] ←ここは”1”で設定したContextと同じになるようにすること!
exten => _.,1,Goto(from-pstn,${CUT(CUT(PJSIP_HEADER(read,To),@,1),:,2)},1)

3、Inbound RoutesのDIDにそのまま03XXXXXXXXのようにご自身の番号をセット

これで03宛に着信がくるとHGWから送られてくるSIP HeaderのTOにセットされている
電話番号を利用して鳴り分に利用することが可能です。

具体的にどこ参照してんのか?ということで弊社で取ったTcpdumpを
参考までに掲載しておきます。

——–
02:34:48.018975 tap_voip Out IP sipedemo.local.sip > 192.168.X.X.sip: SIP: SIP/2.0 200 OK
E`.y”.@.@…… ………e..SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.X.X:5060;rport=5060;received=192.168.X.X;branch=z9hG4bK291358527
Call-ID: 468619045@192.168.X.X
From: <sip:anonymous@anonymous.invalid>;tag=368508610
To: “03XXXXXXXX” <sip:03XXXXXXXX@192.168.X.X>;tag=9e43156e-5043-4f0d-80a0-8407da769d25
CSeq: 2 BYE
Server: FPBX-16.0.40.7(20.4.0)
Content-Length: 0
——–

なお、参考までに以下のようなHeaderの050番号の場合は、
”exten => _.,1,Goto(from-pstn,${CUT(CUT(PJSIP_HEADER(read,To),@,2))},1)”とすることで
電話番号ではないですがアカウント名?的なユニークな情報をToとして取得することができるので、
電話番号ではないですがDIDにセットすることが可能です。

03:02:24.095581 eth0 In IP XXXXXXX > sip.domain.tld.sip: SIP: BYE sip:XXX.XXX.XXX.X:5060 SIP/2.0
E…Z…4.ENw….,……….BYE sip:XXX.XXX.XXX.X:5060 SIP/2.0
Via: SIP/2.0/UDP XXX.XXX.XXX.X:5060;branch=z9hG4bK69eb980a;rport
Max-Forwards: 70
From: “08012345678” <sip:08012345678@XXX.XXX.XXX.X:5060>;tag=as38f9f65c
To: <sip:99991230001@XXX.XXX.XXX.X:506>;tag=5bb93ac5-caa4-472f-834f-92e0349ca7fc

→”99991230001”が取り出せますね!

外出の多い中小企業の皆様や個人事業主の皆様
超安価なVPSベースのクラウドPBX利用してみませんか?
リモートワーク等で固定電話に出られない方にもおすすめです。
弊社ではメールベースでしたら無料でご相談をお受けしております。
構築もオープンソースを積極的に活用するため非常に低額で
ご利用頂けるかと思いますのでご検討ください!

snap install coreでエラーが出るとき

たまにはエンジニアとしての記事を。
仕事がら毎日Linuxサーバを構築したり、設定を変えたりしているのでその時に起きた問題を
メモがてら更新したいと思います。

記念すべき1回目はマイナーな問題です。

Let’s Encryptを設定するために、最近推奨されている”snap”をインストールして、
coreをインストールするときにしばしばこんなエラーが出ます。

# snap install core
error: too early for operation, device not yet seeded or device model not acknowledged

これはタイミング的にコピペ作業とかしていると発生しますが、
回避方法はとても簡単で少し(1分ぐらい)待ってから再度実行すると解決します。

少し待ってから再実行すると以下のように実行されます。

# snap install core
2021-10-02T00:33:52+09:00 INFO Waiting for automatic snapd restart…
Warning: /var/lib/snapd/snap/bin was not found in your $PATH. If you’ve not
restarted your session since you installed snapd, try doing that.
Please see https://forum.snapcraft.io/t/9469 for more details.

まだWarningが出てるんじゃないか?と思われるかもしれませんが、
これは単にsnapへのPATHが設定されていないことを警告しているだけなので、
このままでも特に問題はありません。
気になる方は.bashrcなどに指定されたPATHを設定してあげればよいかと思います。