V6プラスでIP電話の導入

はじめに

2017年12月18日、めでたく結婚しました。 それから約1年がたってWimaxの更新タイミングが来たので、 賃貸ながら光ファイバーを引いてみました。 せっかくなのでIPv6にチャレンジ + IP電話も導入しました。

システム構成

システム構成図

画像をクリックすると高解像度の図が開きます。 黄色のデバイスは携帯電話なので、自宅外から4Gとか他のwifiに接続する場合があります。 私の私物携帯のAEON Mobileの4GはなぜかDual Stackでした。 しかし、嫁の携帯auの4G、嫁の実家のwifi、私の会社携帯のauの4G等はIPv4のみのサポートとなります。 このため、自宅外からAsteriskサーバへの接続をしたいなら、MAP-Eのポート開放が必要です。 しかし、WN-AX1167GR2が思いのほか低機能で、V6プラスでの接続時にはポート開放が出来なくなってしまいます。 Raspbianをルータにするというのも不安があるので、結局、IPv4空間から直接Asteriskサーバに接続することはできません。 あと、プロバイダはenひかりを使っているのですが、電話で問い合わせしたところ、V6プラスとPPPoEの併用は500円/月のオプション契約になるそうです。 500円/月あったらVPS借りれちゃうんで、これもない選択肢です。

以上をまとめると、

  1. 自宅内のAsteriskサーバへのIPv4空間からの接続は不可能
  2. 携帯電話は自宅外からはIPv4のみ
  3. 携帯電話で自宅外からIP電話を発着信したい

という一見すると不可能な話になっています。これを実現する方法について説明します。

着信はLinphone SIP Serverに転送

inbound

この図のように、携帯電話はLinphoneのFree SIP Serverのアカウントを取得し、常時接続しておきます。 また、Asteriskサーバ用にもLinphoneのFree SIP Serverのアカウントを取得します。 IP電話に外線の着信があった場合は、携帯電話はLinphoneのFree SIP Serverのアカウントに対して転送することで、 IPv4空間でも着信が受けられます。 区別のため、内線番号200番台を自宅ネットワーク内からのAsterisk直結用、内線番号300番台をLinphoneのFree SIP Server経由用としています。

発信は 050 Free 直結

outbound

発信の方は単純に、050 Freeに直結してしまいます。 といっても、つなぎっぱなしだとAsteriskサーバの着信が不安定になるので、 携帯電話のLinphone Clientの設定で、050 Freeの接続設定を「プッシュ通知 オフ」にしておきます。 また、発信の際には050 Freeを選択するため、Linphone Clientの設定で、050 Freeの接続設定を「既定のアカウント オン」にしておきます。

Asteriskの設定

Asteriskの sip.conf extensions.conf の具体例を示します。 量が多いのでTXTファイルにリンクしました。

Linphone Clientの設定

各携帯電話のLinphone Clientは以下のように設定しました。

brastel 050 free への接続

設定項目 設定値
More options オン
アカウントを有効にする オン
既定のアカウント オン
プッシュ通知 オフ
ユーザ名 (UserName)
表示名 空欄
ユーザID 空欄
パスワード (Password)
ドメイン softphone.spc.brastel.ne.jp
Proxy 空欄
Transport UDP
Stunサーバ stun.linphone.org
ICE オフ
Outbound Proxy オン
AVPF オフ
Expire 3600
Country code prefix 81
Substitute + in phone numbers オフ

Linphone の Free SIP Server への接続

設定項目 設定値
More options オン
アカウントを有効にする オン
既定のアカウント オフ
プッシュ通知 オン
ユーザ名 (UserName)
表示名 空欄
ユーザID 空欄
パスワード (Password)
ドメイン sip.linphone.org
Proxy 空欄
Transport TLS
Stunサーバ stun.linphone.org
ICE オン
Outbound Proxy オフ
AVPF オン
Expire 31536000
Country code prefix 空欄
Substitute + in phone numbers オフ

オーディオ

設定項目 設定値
CODECS GSMのみオン
Codec bitrate limit 36 kbits/s
Enable Voice Processing オン
Enable Bass Boost オフ

おわりに

意外なことに、このような転送をしても発信元の電話番号はちゃんとLinphone Client上に表示されました。 また、iPhoneでLinphone Clientを使ってAsteriskサーバに直結していた際は、バックグラウンドでの着信が出来ませんでした。 しかし、LinphoneのFree SIP Serverにつないでいる場合は、バックグラウンドでの着信が可能です。

実のところ、設定については私もわかっていないところが多くあります。 必ずしも最適設定にはなっていないと思うので、「本当はこう設定する方が正しいんだよ」というのがありましたら、 ぜひ教えていただきたいです。