2016年2月2日火曜日

Asterisk11 on ASUSWRT, DD-WRT with chan_dongle

色々な下準備ができること前提
可能な機種 RT-AC68U他ASUSのルータ,NETGEARR6300,R7000
ちょっと面倒だけど可能な機種 DD-WRTをインストールした
WZR-600DHP2,900DHP,1166DHP,1750DHP,DHP2 WXR-1900DHP

ドングルの確保 

確実に使えるもの
標準で 12d1:1001のIDを持つもの
E169 E230(voice enableにする必要あり)など
U2DIAG=0でIDを 12d1:1001に変えられるもの
E1552 など


  • entwareインストール
mkdir -p /jffs/entware.arm
ln -nsf /jffs/entware.arm /tmp/opt
cd /tmp
wget -c -O entware.arm-setup.sh http://goo.gl/Drwhrb
cat entware.arm-setup.sh | sed -e "s/ext2/jffs|ext2/" > entware.a
rm-setup.mod.sh
chmod +x ./entware.arm-setup.mod.sh
./entware.arm-setup.mod.sh

      • インストールが終わったら /jffs/scripts/init-start に追記

ln -nsf /jffs/entware.arm /tmp/opt
/opt/etc/init.d/rc.unslung start

  • パッケージインストール
    • 何がいるのかわかっていれば簡単

opkg update
opkg install ar asterisk11 asterisk11-app-authenticate asterisk11-app-chanisavail asterisk11-app-chanspy asterisk11-app-directed_pickup asterisk11-app-disa asterisk11-app-exec asterisk11-app-mixmonitor asterisk11-app-read asterisk11-app-readexten asterisk11-app-record asterisk11-app-sayunixtime asterisk11-app-senddtmf asterisk11-app-sms asterisk11-app-stack asterisk11-app-system asterisk11-app-verbose asterisk11-app-waituntil asterisk11-app-while asterisk11-chan-dongle asterisk11-chan-iax2 asterisk11-codec-a-mu asterisk11-codec-alaw asterisk11-codec-g729 asterisk11-codec-gsm asterisk11-codec-ilbc asterisk11-codec-resample asterisk11-curl asterisk11-format-g729 asterisk11-format-gsm asterisk11-format-sln asterisk11-format-wav asterisk11-format-wav-gsm asterisk11-func-blacklist asterisk11-func-channel asterisk11-func-cut asterisk11-func-db asterisk11-func-devstate asterisk11-func-extstate asterisk11-func-global asterisk11-func-groupcount asterisk11-func-shell asterisk11-func-uri asterisk11-pbx-dundi asterisk11-pbx-spool asterisk11-res-adsi asterisk11-res-agi asterisk11-res-clioriginate asterisk11-res-fax asterisk11-res-fax-spandsp asterisk11-res-smdi asterisk11-res-srtp asterisk11-res-timing-pthread asterisk11-res-timing-timerfd asterisk11-sounds asterisk11-voicemail bcg729 bzip2 coreutils findutils glibc-opt grep hostip iperf knockd libacl libattr libbfd libbz2 libc libcurl libgcc libiconv-full libjpeg liblzma libncurses libopenssl libpcap libpcre libpopt libpthread librt libsodium libspandsp libsqlite3 libsrtp libstdcpp libtiff libusb-1.0 libuuid libwrap locales msmtp nmap tar tcpdump terminfo usbutils zlib zoneinfo-asia 


いらないものも色々入っているけど気にしないでOK
これだけ入れても40MB程度 圧縮されて22MBとかなので今時のルータなら余裕
ブロードコムが異常なだけだけどね


あとは普通にconf の設定をすればよい。
そこが面倒だという突っ込みはなし!ていうか、
exten => hoge,1,NoOp(${CALLERID})
same =>         n,・・・・・
って感じで書く癖をつけておけば使いまわしが楽になるのに正直に書く人大杉

/opt/etc/asterisk/dongle.conf

[dongle0]
imei=SIMのIMEI
imsi=ドングルのIMSI
;↑どちらか片方
context=dongle0
;exten=s ;ソースでパッチ当ててないと電話番号のextenに入るので意味なし
group=0
resetdongle=yes
u2diag=0
disablesms=no
smsaspdu=yes

/opt/etc/asterisk/extentions.conf

[dongle0]
exten => 携帯番号,1,Noop()
same  =>   n,Dial(SIP/内線1&SIP/内線2&IAX2/IAXの番号,60)
same  =>   n,Hangup()

発信は
exten => _0.,1,Dial(Dongle/dongle0/${EXTEN},60)
same  =>    n,Congestion
same  =>    n,Hangup()

でOK


取れる防護策に限りがあるので外からレジストして使う場合

  • 端末にDDNSクライアントを入れる
  • ルータにDDNSの設定をする
  • ルータで定期的にhostipで端末のIP取得&iptablesで穴をあけるスクリプトをつくる
くらいのことはしておこう。DDNSIPは

DDNSHOSTNAME=DDNSのホスト名
DDNSIP=` hostip $DDNSHOSTNAME | egrep -s "^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$" `
if [ $? -ne 0 ] ; then
return 1
fi

で取得でき、異常だったら終了にできる。

ローカルアドレスかどうかは
addr1=`echo $DDNSIP|cut -d . -f 1`
addr2=`echo $DDNSIP|cut -d . -f 2`
addr3=`echo $DDNSIP|cut -d . -f 3`
addr4=`echo $DDNSIP|cut -d . -f 4`

if [ "$DDNSIP" = "127.0.0.1" ]; then
        return 1
elif [ $addr1 -eq 10 ]; then
        return 1
elif [ $addr1 -eq 172 ] && [ $addr2 -ge 16 ] && [ $addr2 -le 31 ]; then
        return 1
elif [ $addr1 -eq 192 ] && [ $addr2 -eq 168 ]; then
        return 1
fi

こんな感じで判定できるはず。
スクリプト全文だせよって気もするけど、あまりに酷い作りなのでさらし者になりたくない罠

もう一つの方法としてポートノッキングでドアを開けてもらう方法もあるが、これもこれで長くなるので別の機会に。


グローバルなIPアドレスをもらえない場合は・・・・しらん

家に帰ってもクライアントを使いたい場合



/jffs/configs/dnsmasq.conf.add

ファイルを作成するとdnsmasqのオプションを指定できる


expand-hosts
address=/hoge.hoge.jp/hoge.hoge.jp/192.168.1.1(ルータのIP)

とルータに設定しておけば、家でも外でも設定を変えることなくSIPクライアントを使える・・と思う。
ちゃんとローカルのアドレスひけていれば・・・


できること できないこと


△ ひかり電話の子機として収容 ※ダイジェスト認証しないにできる機種限定
× ひかり電話 直接レジスト ※option 120,124,125対応してないの 
○ ブラステル収容
○ 050PLUS収容 ※オレオレ認証なファイルを持ってくる必要あり
○ 3Gドングル収容 ※ E169,E1552,E230など限定
× BT収容
○ IAX2接続 ※1ポートで済むので外からレジストする場合おすすめ
△ FAX受信 ※スクリプトを書けば
▲ FAX送信 ※やるのは面倒なのでおすすめしない

総括

とりあえず、ひかり電話や3Gを外に転送するだけ という用途であればasterisk以外の設定は簡単、RT-AC68UやR7000を持っているならばおすすめ。できるルータが限定されるし値段も張るので一からしたいというならばラズベリーパイやオレンジパイを使うほうが良いだろう。

もちろん、ポートを守るポイントが増やせるというメリットはあるが・・・・

0 件のコメント:

コメントを投稿