はじめに
この記事ではFreePBXを自宅のサーバで作成して、Twilio SIP trunk のサービスを利用してSIP電話を利用することを目的としています
この記事でわかることと前提条件
- Twilio のSIP電話を利用して、電話を無料で使えます(無料枠制限あり)
- docker とlinux の基礎知識は前提です
- 今回は自宅のubuntu にdocker でfreepbx を入れました。ご自宅のFWの設定が重要になってきます
FreePBX のインストール
下記のdocker compose fileを作成して立ち上げてください。ポート番号を意図的に変更してありますが、基本的にHTTPやHTTPSで自宅外からアクセスすることはお勧めしません。30xx と書いておきましたが、docker でさらすポートは各自決めてください
version: '3.3'
services:
freepbx-app:
image: tiredofit/freepbx
container_name: freepbx-app
ports:
- "30xx:80" # HTTP
- "30xx:443" # HTTPS
- "5060:5060/udp" # SIP
- "5160:5160/udp" # SIP
- "18000-18100:18000-18100/udp" # RTP
environment:
- RTP_START=18000
- RTP_FINISH=18100
- AUTHTYPE=database
- USERNAME=admin
- PASSWORD=admin
- TZ=Asia/Tokyo
volumes:
- ./certs:/certs
- ./data:/data
- ./logs:/var/log
- ./db:/var/lib/mysql
restart: always
privileged: true
docker compose で立ち上げたら、http://freepbx のアドレス/admin/ でセットアップします

パスワードを入力したらログインできるようになるはずです

Twilio の無料トライアルの手順
まずは無料トライアルでSIP Trunk をTwilio で設定します

めんどくさいから Google でログインして無料トライアルします

すぐにログインできるはずです 2400円くらいのトライアルができるのがうれしいです

SIP Trunking を検索

Get Started


Create SIP trunk をクリック

Trunkの名前を作成

各種設定を行います

これでトランクを設定します

US電話番号の購入
USで番号を取得します Add a number をクリック

Buy a Number をクリック

179円で月額買えるというのは素晴らしい、これもクレジットから差し引かれるので、クレジットを使いきるまで実質無料となります

適当な番号を購入します

Termination でSIPトランクの終端名を作成します

上記の Termination SIP URI は Freepbx の設定で利用しますので、メモっておいてください

購入したら、Add an Existing Number でAddします

Add selected で追加

これで番号が追加されました

PBXのアクセスリストとCredential list は必須です

PBXのIPを登録します。私の場合はfreePBX をインストールしているIPからしか接続しないので/32でアドレスを切ります。設定完了したら Create ACL を押して保存

保存します

Credentialの設定
creential list も登録します。後ほどfreepbx で利用します

設定が終わると早速クレジットから差し引かれています

トランクの設定
先ほどのFreePBX でトランクを設定します

Add Trunk をクリック

+ Add SIP(chan_SIP) trunk をクリック

Edit Tunk で先ほどのCredential を入れます
host= 先ほどのURI
username=先ほどのcredential list の設定のユーザネーム
secret= 先ほどのcredential list の設定のパスワード
type=peer (そのまま)

Outbound route の設定
Connectivity からOutbound Routes をクリック

Add outbound route をクリック

pattern は ピリオドを入れるだけで問題ないです。 「すべて適用」という意味です

Extention の設定
Applications >>> Extentions

Add New SIP(legacy) [chan_sip] Extension をクリック

User extention はSIP のユーザ名ですので、これがいわゆるSIP電話から見たユーザ名となります。
Port 5160 UDP とあるので、このポート番号をIPと紐づけて利用します

Extention の設定が終わったら、secret が発行されます(これは後ほどSIP電話の設定で使います)

freePBXトラブルシューティング
以下の手順で FreePBX Framework
モジュールを再ダウンロードして、署名を修正できます。
1. FreePBXコンテナに入る
docker exec -it freepbx bash
コンテナIDの場合は docker ps で調べてください
2. FreePBXモジュールを手動で更新
fwconsole ma downloadinstall framework --force
fwconsole reload
このコマンドは FreePBX Framework
モジュールを再ダウンロードして再インストールします。
3. すべてのモジュールを更新(推奨)
もし他のモジュールも影響を受けている場合は、すべてのモジュールを最新化することを推奨します。
fwconsole ma upgradeall
fwconsole reload
4. モジュール署名を強制的に修正
もし上記の方法でも問題が解決しない場合は、以下のコマンドを試してください。
fwconsole chown
fwconsole reload
5. FreePBXを再起動
fwconsole restart
または、Dockerコンテナを再起動:
docker restart
Zoiper 5の設定
Zoiper5 をダウンロードします 初期設定では 先ほどのextention と freepbxをインストールしてあるパブリックアドレスと先ほどのポートの組み合わせです
secret にはfreepbx で設定した、Extention のcredential を入力します


ホストネーム=freepbx サーバのアドレス コロンに続いて ポート番号です

問題なければSIP UDPで設定を確認できます

これで一通り完了です。さっそく電話してみましょう。Twillio でテストコール用の番号が用意されているのでそこに架電しました

こんな感じになれば成功

上記のようになれば日本にも電話を掛けられるはずです。電話料金には注意しましょう
