2014年8月6日水曜日

OpenVPN を通じてソフトフォン(Ekiga Phone)を使う

自宅サーバへインストールした OpenVPN ですが、だんだんと実用的になってきました。

先日からソフトフォン(Ekiga Phone)を外部で使用するパソコンへインストールして家庭内の Asterisk サーバへ接続してみました。

意外とあっさりとダイヤルや通話ができてしまって驚いてしまいました。

しかし気になる点がいくつか発生していました。
  • 第一点目は、通話終了後に電話を切ってももう片方の電話機が通話中のままだったのでした。
  • 第二点目は、ソフトフォンの Ekiga Phone の通話中に表示される通話先の電話番号にグローバル・アドレスが表示されていることでした。

これらの二点から、どうもダイヤルを行なっている最中の SIP プロトコルは OpenVPN の中を経由して通信を行なっているようですが、通話が開始されて RTP プロトコルへ移行した段階で OpenVPN 経由ではなく、単純にインターネット環境の通信へ移行してしまっているようです。このため一般のインターネット環境を経由した状態では通話後の BYE 信号(Hangup)がルータなどのパケットフィルタで遮断されてしまって通話が持続し続ける現象が発生している模様です。さらにこの仮定を裏付けるものとして、一時的にルータのパケットフィルタ( UDP : 5060 )を 開放するとちゃんと通話が正常終了するのです。

そこでこの OpenVPN を通じて通話パケットが流れて行かない原因と対策を行なってみました。

基本的な原因は Asterisk サーバにありました。そこで Asterisk サーバの設定の見直しを行いました。

それは Asterisk サーバが家庭内 LAN だと認識するネットワーク領域(サブネット: Subnet )に家庭内の LAN のサブネット( 192.168.24.0/24 )しか登録していませんでした。そのため、OpenVPN 経由で到達するパケット( 192.168.66.0/24 )は家庭内 LAN からのものではなく、外部からのものだと認識していました。OpenVPN によって家庭内 LAN に接続している 192.168.66.0/24 のサブネットも同様に家庭内の LAN だと認識するように設定を見直しました。

設定は sip.conf で行います。localnet= の項目がそれで、ここに現在の 192.168.24.0/24 の他に OpenVPN で使用する仮想 LAN の 192.168.66.0/24 のサブネットも追加します。これで OpenVPN 経由で届いてきたパケットは家庭内 LAN のものだと認識して、自分自身の IP アドレスとしてグローバル・アドレスを通知するのではなく、家庭内 LAN の IP アドレスを通知するようになります。

localnet=192.168.24.0/24
localnet=192.168.66.0/24  <単純に追加するだけです

設定が終了したところで Asterisk サーバを再起動させて OpenVPN 経由で通話テストを行なってみました。今回行った私の環境ではこれだけで通話ができるようになりました。

[問題発生時のヒント?]

もしダイヤル開始から通話、終話まで正常終了しない場合には、ソフトフォン(Ekiga Phone)の次の点を見直してみてください。

ソフトフォンの Ekiga Phone の設定ですが、ここも外部で使用しているノートパソコンの IP アドレス(どこかの LAN の IP か、グローバル・アドレス)が、そのままソフトフォンの IP アドレスになっています。

Ekiga Phone の場合、外部のプロキシサーバを登録することができるようになっています。ここへ OpenVPN の Asterisk サーバ側の出口の IP アドレス(我が家の場合 192.168.66.1 )を指定すると、Ekiga Phone からのパケットが OpenVPN を経由して Asterisk サーバと行き来するようです。
メニュー > [編集] > [設定] > [プロトコル] > [SIP の設定] の中の [外部のプロキシ] の欄です。
これは、たまたま検証途中で発見したものです。上記の Asterisk サーバの設定見直しだけで上手く動作しないときには試してみてください。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。