と、言うわけでFAX(まだ動いてないけど、途中経過)。
参考にしたのは、Asterisk fax - voip-info.org
ここに、spandspとか、HylaFaxとか、IAX modemとかいろいろな言葉が出てくる。
とりあえず、最初に出てくるspandspで行ってみようと思う。
AGX Extra Addons for Asteriskを使うと、asterisk 1.4 にpatchをあてずに行けると書いてあるので、インストールしてみることに。
このページに、FreeBSD用のportsが置いてあり、comms/spandspではなく、comms/spandsp-devel を入れろと書いてある。(spandsp-develは、現時点ではspandsp-0.0.4p15)
spandsp-develは、普通にmake一発で入った。
しかし、件のページからダウンロードできるnet/asterisk-agx(asterisk-agx.tar.bz2 を展開するとできる)は、makeするとエラーが出た。
コンパイルエラーを見ると、asterisk.hが発見できていないっぽい。
portsのMakefilesのdo-configureターゲットでは、cmakeに対して -I/usr/local/include とか、-L/usr/local/lib とか渡しているみたいだけど、実際にコンパイルするときのcmakeが見るmakefile(?)には反映されないようだ。
ってゆーかcmakeわからない。
とりあえず、work/agx-ast-addons をつらつらと見ていたら、CMakeFiles/CMakeCCompiler.cmake が怪しかったので、ちょっと修正してみる。
*** CMakeCCompiler.cmake.ORIG   Sun Oct 26 23:42:18 2008
--- CMakeCCompiler.cmake        Sun Oct 26 23:42:38 2008
***************
*** 1,5 ****
  SET(CMAKE_C_COMPILER "/usr/bin/gcc")
! SET(CMAKE_C_COMPILER_ARG1 "")
  SET(CMAKE_C_COMPILER_ID "GNU")
  SET(CMAKE_C_PLATFORM_ID "FreeBSD")
  SET(CMAKE_AR "/usr/bin/ar")
--- 1,5 ----
  SET(CMAKE_C_COMPILER "/usr/bin/gcc")
! SET(CMAKE_C_COMPILER_ARG1 "-I/usr/local/include")
  SET(CMAKE_C_COMPILER_ID "GNU")
  SET(CMAKE_C_PLATFORM_ID "FreeBSD")
  SET(CMAKE_AR "/usr/bin/ar")
これで、コンパイルはできてリンクで止まる。もう、どこをいじっていいのか探すのも面倒だったので、リンクエラーが出るたびにそのときのコマンドラインをコピーして、-L/usr/local/lib/ を追加して実行ファイルを作っていく。
3つくらいやったら最後まで行くので、後は普通にmake install。

これで、/usr/local/lib/asterisk/modulesにいくつかのsoが置かれる。
と、言う所までやって力尽きた。
どこを見たら設定方法が書いてあるんだろうか・・・。(一応、受信したFAXをメールするような設定はAsterisk faxのページに書いてあるけど、まだ試してない)

しっかし、わざわざ通話料払ってこんな面倒なことをするなら、みんなFAXなんか捨ててeメールを使うようにしてくれないものだろうか。
自宅の電話がひかり電話(IP電話)になったので、IP電話についてちょっと調べた。
PC上のソフトフォン(Express Talk)が子機になって、外線電話が使えるようになった。
PC上で電話ができるなら、FAXだってできるんじゃない?と思っていろいろ調べていたら、asteriskと言うPBXソフトにたどり着いた。
とりあえず、参考になるのはAsterisk - VOIP-Info.jp Wiki
まずは、portsから関係しそうなものをインストール。
  • net/asterisk
  • japanese/asterisk-sound
会議(Meet-Me)をやるには、ZAPTELを有効にしろと書いてあったけど、良くわからなかったのでパス。(やっぱり入れておけば良かったか)
japanese/asterisk-soundは単にmake installでは駄目で、そのときに出てくるpkg-messageに従ってasteriskをコンパイルしなおす必要がある。
そもそもasteriskの思想が良くわかっていなかったので、まともに内線の体系も計画せずにへろへろ設定して、一喜一憂する。
結局、VOIP-info.jp Wikiのサンプルコンフィグを貰ってきて、それをベースにする。
  • まず、外部との窓口となるひかり電話のルータは、外線の番号を持ち、アナログ電話が内線1と2で、内線3~7がIP電話を設定できる。(内線番号は変更可能だけど、そのまま行く)
  • asteriskは、ひかり電話のルータに内線7として登録する。
  • asteriskに登録するIP電話は、内線201~204を割り当てる。
  • で、設定ファイルは以下のような感じ(関係しそうなところを抜粋)
    asterisk.conf
    [options]
    languageprefix=yes
    
    sip.conf
    [general]
    register => 7:password:0007@192.168.0.1/200
    
    [192.168.0.1]
    type=friend
    secret=password
    Port=5060
    username=0007
    fromuser=7
    host=192.168.0.1
    context=default
    insecure=very
    dtmfmode=inband
    disallow=all
    allow=ulaw
    
    [201]
    type=friend
    username=ext1
    secret=password
    canreinvite=no
    host=dynamic
    
    [202]
    type=friend
    username=ext2
    secret=password
    canreinvite=no
    host=dynamic
    
    [203]
    type=friend
    username=ext3
    secret=password
    canreinvite=no
    host=dynamic
    
    [204]
    type=friend
    username=ext4
    secret=password
    canreinvite=no
    host=dynamic
    
    extension.conf
    [globals]
    SPEAKINGCLOCK=317
    ECHOTEST=333
    MYNUMBER=045xxxxxxx
    [default]
    ; Ring 201-204 phones
    exten => 200,1,Dial(SIP/201&SIP/202&SIP/203&SIP/204)
    exten => 200,n,Hangup
    
    ; Local SIP/IAX phones 201-209
    exten => _20Z,1,GotoIf($["${USEVOICEMAIL}"="YES"]?use-vm)
    exten => _20Z,n,Dial(SIP/${EXTEN}&IAX2/${EXTEN},,tT)
    exten => _20Z,n,Hangup
    exten => _20Z,n(use-vm),Dial(SIP/${EXTEN}&IAX2/${EXTEN},60,tT)
    exten => _20Z,n,NoOp(${DIALSTATUS})
    exten => _20Z,n,GotoIf($["${DIALSTATUS}"="BUSY"]?vm-rec)
    exten => _20Z,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?vm-rec)
    exten => _20Z,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?vm-rec)
    exten => _20Z,n,Hangup
    exten => _20Z,n(vm-rec),Answer()
    exten => _20Z,n,Wait(1)
    exten => _20Z,n,Voicemail(${EXTEN})
    exten => _20Z,n,Hangup
    
    ; For Voicemail Recording
    exten => _20Z*1,1,Answer()
    exten => _20Z*1,n,Wait(1)
    exten => _20Z*1,n,Voicemail(${EXTEN:0:3})
    exten => _20Z*1,n,Hangup
    
    ; For Voicemail Playback
    exten => 298,1,Answer()
    exten => 298,n,Wait(1)
    exten => 298,n,VoicemailMain()
    exten => 298,n,Hangup
    
    exten => 299,1,Answer()
    exten => 299,n,Wait(1)
    exten => 299,n,VoicemailMain(${CALLERID(num)},s)
    exten => 299,n,Hangup
    
    ; Speaking Clock
    exten => ${SPEAKINGCLOCK},1,Answer()
    exten => ${SPEAKINGCLOCK},n,Wait(1)
    exten => ${SPEAKINGCLOCK},n,Set(FutureTime=$[${EPOCH} + 5])
    exten => ${SPEAKINGCLOCK},n,SayUnixTime(${FutureTime},Japan,YbdAPHM)
    exten => ${SPEAKINGCLOCK},n,Playback(jp-desu)
    exten => ${SPEAKINGCLOCK},n,playback(beep)
    exten => ${SPEAKINGCLOCK},n,Hangup
    
    ; Echo Test
    exten => ${ECHOTEST},1,Answer
    exten => ${ECHOTEST},n,Wait(1)
    exten => ${ECHOTEST},n,Playback(demo-echotest)
    exten => ${ECHOTEST},n,Playback(beep)
    exten => ${ECHOTEST},n,Echo
    exten => ${ECHOTEST},n,Playback(demo-echodone)
    exten => ${ECHOTEST},n,Playback(vm-goodbye)
    
    exten => _0.,1,Set(CALLERID(num)=${MYNUMBER})
    exten => _0.,n,Set(CALLERID(name)=${MYNUMBER})
    exten => _0.,n,Dial(SIP/${EXTEN}@192.168.0.1,120,T)
    
    exten => _Z,1,Dial(SIP/${EXTEN}@192.168.0.1,120,T)
    
    この設定で、以下の動作をする。(Voicemail絡みはテストしてないので良くわからない)
    • 外線着信すると、ひかり電話の内線とasteriskの内線(201~204)が全て鳴る。
    • ひかり電話の内線から、7をcallするとasteriskの内線(201~204)が全て鳴る。
    • asteriskの内線から、201~204をcallするとasteriskの内線が鳴る。
    • asteriskの内線から、0で始まる番号をcallすると外線をかける。
    • asteriskの内線から、1~6をcallするとひかり電話の内線が鳴る。
    • 317で時報、333でecho test。
    やりたいけどできないこと。
    • ひかり電話の内線から、asteriskの内線の呼び分け(201だけを呼ぶ、とか)
    • 外線から、内線の呼び分け(これは、不可能か?ISDNのTAとかだとできたんだけどな)
    RT-S300SEだとうまく行かなかったX-Liteも、asteriskだと普通に内線登録できた。
    iPhoneのfringだと、asteriskでも駄目だった。無線LANを使う場合でも、一度外に出たりするのかな?

    さて、次回はasteriskでFAXに挑戦しようと思います。(今の所、spandspとasterisk-agxのコンパイルまではできてるんだけど、使い方がわからない状態)

FON

| | コメント(0) | トラックバック(0)| Edit
実家がBフレッツとひかり電話とフレッツTVに加入して、今日が工事だと言うので、昨日amazonのお急ぎ便でFON La Fonera (ラ・フォネラ) FON機能搭載 無線LANルータを注文した。
今日の夕方に届いたので、さっそくセッティングしに実家へ。
前準備として、FONに会員登録しておく。(FONのサイトが、やたらと重いんだが・・)
実家につくと、うちのとはタイプが違って光終端装置内蔵のルータが入っていて、テレビと電話は既に使えるようになっていたが、PPPoEの設定はしていかなかったらしい。
さっそくルータのLANポートにLa Foneraを繋いで電源ON。
マニュアルには、My PlaceとFON_FREE_INTERNETの二つのアクセスポイントが見えると書いてあったけど、My Placeのみ見える。
My Placeに繋いで見たけど、外が見えない。ルータを見に行ったらPPPランプがついていないので、本当に工事の人はIPの設定はしていってくれなかったらしい。
しょうがないので、La Foneraの設定をデフォルトのDHCPからPPPoEに変えて、プロバイダの情報を入力する。
すると、外が見えるようになったんだけど、何度か無線LANが切れた。どうも、La Foneraのファームウェアをバージョンアップして、再起動していたらしい。
再起動したら、FON_FREE_INTERNETのAPも見えるようになったので、そちらにアクセスするとログイン画面が出て、ログインするとFONアクセスポイントの登録モード(?)になる。
これって、FONを買ってきて繋いでそのまま放置しておくと、誰か知らない人に登録されてしまってLinusになられてしまうと言うことだよね。セキュリティ的にどうなんだろうか。
La FoneraはDHCP(プライベートアドレスにルーティングする)か、PPPoEを選べるようだけど、ブリッジモードが選べないようで、かつPPPoEのマルチセッションには対応していないようなので、微妙な使い勝手だ。
まあ、実家の人がフレッツスクエアを使うこともないだろうから、このままPPPoEモードで行けば良いだろう。
RT-S300SEには、アナログ電話を繋ぐポートが二つあるので、一つを今まで使用していた電話に繋いで、もう一つをデスクトップのFAXモデムに繋いだ。
で、設定画面を見ると内線設定のページにIP Phoneとか言うのが5つ登録できるようになっている。
IP 電話って言うのがなんだか良くわからなかったけど、ひょっとしてSIPクライアントが繋がるんじゃないかと思って調べてみた。
まずは、X-Liteと言うのを試してみた。
適当に設定したら、Readyとか出て、RT-S300SEの画面にも、「登録済み」って出てきたんだけど、ダイアルしてみたら「Call failed: Bad Request」と出てうまく行かない。
次に、Express Talkと言うのをダウンロードしてきた。
最初設定がわからなかったんだけど、Options->Linesで以下のように設定したら通話までできるようになった。
  • Server: RT-S300SEのIPアドレス
  • SIP Number: 3(内線番号)
  • Password: RT-S300SEの設定画面で設定するパスワード
そして、Advanced Line Settingsの画面で「Use a different username just for authentication」にチェックし、Auth ID: に0003(RT-S300SEの設定画面の「ユーザID」)を入れた。
あと、Networkタブでは、「Use uPNP to find external IP Address」にチェックが入っていない状態にする。(ログに、「Unable to auto-detect public IP. Using private IP」って定期的に出てくるんだけど、これを消すオプションがどれだかわからない)
これで、PCから外部に電話をかけたり、外部からの電話を取ったり、アナログ電話と内線通話ができるようになったりした。

ついでに、iPhoneのfringにもSIPクライアントが入っているので、iPhoneの方も設定してみた。
設定項目はUser ID, Password, Proxyの3つだけなので、RT-S300SEの方で内線番号とユーザIDを同じにしてみたりしたけど、「User ID or password is incorrect」と出てうまくいかなかった。
昨日物理インターフェイスとbridge0の両方にIPアドレスを割り当ててひどい目にあったので、bridge0だけにIPアドレスを割り当てるように修正。
/etc/rc.conf
network_interfaces="rl0 lo0 tap0"
ifconfig_rl0="up"
ifconfig_tap0="up"
cloned_interfaces="bridge0"
autobridge_interfaces="bridge0"        # List of bridges to check
autobridge_bridge0="rl0 tap0"        # Interface glob to automatically add to the bridge
ifconfig_bridge0="inet 192.168.0.2 netmask 0xffffff00"
defaultrouter="192.168.0.1"
openvpn_enable="YES"
もともと、rl0にはaliasで192.168.0.3も割り当ててあって、jailで使っていたのだけれど、どうせ使っていないのでjailの設定は外してしまった。この場合、192.168.0.3もbridge0に割り当てるのが良いのだろうか?
で、ipf.rulesのインターフェイスをrl0からbridge0に変更して、openvpn.confのserver-bridgeの行を元通り192.168.0.2に戻したら、綺麗に動くようになった。
普段はopenvpnは使わないのに、常にインターフェイスが promiscuous モードになっているのはどうなんだろうと思うけど、まあ実害はないだろう。
2008年10月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
[New] [Admin]
あわせて読みたい

最近のコメント

fastladderインストール(1) by sumikawa: レポートありがとうご
fastladderインストール(1) by false: パッチをあてて、po
fastladderインストール(1) by sumikawa: ports/grap
Plaggerでニコニコ動画 by false: うわ、こんなところで
Plaggerでニコニコ動画 by sumikawa: > これは、p5-F

Photos

  • false.jpg

アーカイブ

広告

Powered by Movable Type 4.21-ja