SIP Phone: FUSION IP-Phone SMARTでSIP電話を導入

固定電話はないんですかと聞かれることがままあるので、固定電話があったらいいと思っていたのですが、ASDLの回線がネット専用回線のためできません。ずい分前からFUSION IP-Phone SMARTというIP電話サービスがあって、そこそこの評判だったので導入してみることしました。FUSION IP-Phone SMARTはスマホのアプリをいれてもいいが、標準のアンドロイドにSIP機能が付いているのでそれを使っても良いのです。実はこのFUSION IP-Phone SMARTというサービスはSIPプロトコルを使っているのでSIP固定電話でも使えます。そこでずい分前に放ってあったというBudgetone -100という機種のSIP電話を使って設定してみることにしました。

セットアップしてみると一見うまくいってるように見えましたが、実は着信に問題があって、繋がったり繋がらなかったりみょうな現象がありました。最初はSTUNのせいかと思っていたのですが、portフォワーディングで直接SIP電話に繋げても改善が見られなかったのでなにか他の原因があるのだろうと考えました。思い当たったのはSIPプロキシの導入で、設定してみたら着信の問題を解決できました。

Firewallの設定はSIPのポート用に5060、rtpはとくに決まってないらしいのでsiproxdに合わせて7070-7080を開けました。BudgetoneではコントロールパネルでFirewallに合わせて7070に設定します。実際は7070からプラスいくらかポートを使うので10くらい幅をみておけばよいはずです。

1.ログを取る

ログを取るにはBudgetoneのWebのコントロールパネルでSyslog Server:でアドレスをSyslog Level:Debugを指定します。ローカルサーバ用のPCでは/etc/rsyslog.confを編集し、

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

とします。/etc/rsyslog.d/90-budgetone.confのようなファイルを作り、例として次のように編集します。

*.* @192.168.1.21:514

192.168.1.21はSIP電話のアドレスです。rsyslogを再起動すれば/var/log/syslogにログが書き込まれるようになります。
この例ではログを見ると、

Dec 30 14:29:43...
...
CSeq: 129 REGISTER Contact: ;expires=240 Expires: 240 Date: Fri, 30 Dec 2016 05:24:56 GMT Content-Length: 0

とあるように4分後に登録情報が期限切れになるように設定してあるのが分かります(デフォルトは1時間)。もうすこしログ見てみると、

Dec 30 14:29:43 192.168.1.21 GS_LOG: [00:xx:xx:xx:xx:xx][000][FFFF][01000821] Received SIP message: 200
Dec 30 14:29:43 192.168.1.21 GS_LOG: [00:xx:xx:xx:xx;xx][000][FFFF][01000821] REGISTERED for 240 seconds;re-REGISTER in 220 seconds

期限が切れたのちすぐに登録を開始しています。特に問題なさそうです。着信問題はSIP会社のフュージョンが相手先が死んでるか生きてるか確認できないためと考えられるので、登録情報の更新時間を調整すると改善するはずです。その更新時間の最適解はいくらなのかは試行錯誤でしかわかりませんが、とりあえず更新間隔を600秒にしてみました。

2.siproxdの設定

siproxdはSIPプロキシのことでOpenWrtのリポからインストールできます。/etc/config/siproxdという設定ファイルを設定すればよいので、OpenWrtのサイトで解説が見当たらず自力で設定してみました。siproxdのサイトでオプションの設定があるのでそれを元に設定しています。

config siproxd general
        option if_inbound               br-lan     [For OpenWrt]
        option if_outbound              pppoe-wan  [For OpenWrt]
        option host_outbound            [オプション:DDNS名]
        option hosts_allow_reg          192.168.*.*/*[自分のプライベートアドレスを記入します]
        option sip_listen_port          5060
        option daemonize                1
        option silence_log              0
#       option registration_file        /var/lib/siproxd/siproxd-general.reg
        option pid_file                 /var/run/siproxd/siproxd.pid
        option autosave_registrations   300
        option rtp_proxy_enable         1
        option rtp_port_low             7070 [自由に設定できます]
        option rtp_port_high            7080 [自由に設定できます]
        option rtp_timeout              300
        option default_expires          600
        #option tcp_timeout             600
        #option tcp_connect_timeout     500
        #option tcp_keepalive           10
        option debug_level              0x000003AE
#       option debug_level              0x00000FFF
        option debug_port               0
        option ua_string                Siproxd-UA
        option use_rport                0

siproxdが動作してるかはcat /var/lib/siproxd/siproxd_registrationsで確認できます。
またログをデバッグモードにしてあればlogread -fで見ることもできます。

FirewallのポートもSIP用の5060とRTP用の7070-7080を忘れずに開けておきます。

Router(OpenWrtの場合)の/etc/firewall.userの設定に追加
例1)

INETIF=pppoe-wan
iptables -I INPUT -m udp -p udp -i $INETIF --dport 5060 -j ACCEPT
iptables -I INPUT -m udp -p udp -i $INETIF --dport 7070:7080 -j ACCEPT
iptables -t mangle -A POSTROUTING -o $INETIF -p udp --dport 5060 -j CLASSIFY --set-class 2:1
iptables -t mangle -A POSTROUTING -o $INETIF -p udp --sport 7070:7080 -j CLASSIFY --set-class 2:1

例2)

WANIF=pppoe-wan                                                                                                             
LANIF=br-lan
# SIP                                                                                                                       
iptables -I INPUT -m udp -p udp -i $WANIF --dport 5060 -j ACCEPT                                                            
iptables -I INPUT -m udp -p udp -i $WANIF --dport 7070:7080 -j ACCEPT
iptables -t mangle -A POSTROUTING -o $WANIF -p udp --dport 5060 -j CLASSIFY --set-class 2:1
iptables -t mangle -A POSTROUTING -o $WANIF -p udp --sport 7070:7080 -j CLASSIFY --set-class 2:1 
iptables -I INPUT -m udp -p udp -i $LANIF --dport 5060 -j ACCEPT
iptables -I INPUT -m udp -p udp -i $LANIF --dport 7070:7080 -j ACCEPT

3.Budgetone -100の設定

ほぼsiproxdサイトの通りの設定です。重要な項目は赤線のBOXで囲みました。


SIP Server: smart.0038.net
Outbound Proxy: [siproxdのIPアドレス]
SIP User ID: [SIPフォンのID]
Authenticate ID: [SIPフォンのID]
Authenticate Password: [SIPフォンのパスワード]
Name: [名称は自由につけられます]
Preferred Vocoder: PCMU [ポピュラーなコーデックの順番を並べます。最悪、音声トラブルになりかねないので慎重に設定します]


Use DNS SRV: No
User ID is phone number: No
SIP Registration: Yes
Unregister On Reboot: No
Register Expiration: 600 [自分の環境に合わせて調整します]
Early Dial: No
local SIP port: 5060 [デフォルトです]
local RTP port: 7070 [自由に設定できます]
NAT Traversal: No


Use NAT IP: [空欄]
SUBSCRIBE for MWI: No
Send DTMF: via RTP
NTP Server: [自由に設定できます]


ログの設定とファームウエアのアップデート関係です。
Override MTU SizeはLAN標準の1500以下にしてあればOKです。


参考: