固定電話はないんですかと聞かれることがままあるので、固定電話があったらいいと思っていたのですが、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です。