Was this page helpful?

IP PBX In ASUS WL-520GU DD-WRT

 原作:Alang

本頁瀏覽人數:20558

本文參考
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=43787

硬體介紹

asus_wl-520gu.jpg- Vendor:ASUS WL-520GU
- CPU:BCM5354 240 MHz
- RAM:16MB SDR 16bit
- FLASH:4MB
- USB:2.0 x1
- Official Firmware: 3.0.0.8

- 超迷你 USB Flash Drive 4GB 一個
4gb_USB_Drive.jpg

 

ASUS 官方介紹
數位天堂-ASUS WL系列規格比較表

討論

軟體介紹

軔體版本:DD-WRT V24-sp2 (10/10/09) mini-usb-ftp
IP PBX:    Asterisk v1.4 and v1.6
GUI         Asterisk-GUI 2.0 (svn-44045)

 

安裝 DD-WRT

>安裝前準備

下載官方 www.dd-wrt.com 的 Firmware
下載路徑:Path: Downloads > stable > dd-wrt.v24 SP1 > Consumer > Asus > WL520GU > dd-wrt.v24_mini_asus.trx

下載 tft2.exe 工具
http://www.dd-wrt.com/dd-wrtv2/downl...TFTP/tftp2.exe

下載 ASUS 舊版本 2.0.0.8 firmware
http://support.asus.com/download/dow...Language=zh-tw

>Downgrade firmware

注意!

由於這次使用的機器是比較後期買的,原廠的 firmware 版本也較新,版號是 3.0.0.8,然而在這版本一直無法刷 DD-WRT 的 firmware,所以必須先將機器上的 ASUS firmware 從 3.0.0.8 降到 2.0.0.8,之後才能刷 third-party firmware。

變更原廠 firmware 直接使用 Web UI 的軔體更新即可。

>Upload DD-WRT firmware

確認 firmware 版本降至 2.0.0.8 後,繼續以下步驟。

1. 使機器進入 Firmware Restoration Mode
機器拔掉電源 > 按住背後的 reset 鈕 > 接上電源 > 約 3 秒鐘,電源燈號出現慢-閃狀態,放掉 reset 鈕 > 電源燈號持續出現慢-閃

2. 使用一部電腦,並將有線網路接上機器的任一個 LAN port,設定網卡 IP 位址為 192.168.1.10,網路遮罩 255.255.255.0
注意!

不要使用無線網路連接機器作以下的操作。

3. 執行 tftp2.exe,Server 輸入 192.168.1.1,Password 空白,File 選擇 dd-wrt.v24_mini_asus.trx 檔案位置,按下 Upgrade
若一切順利,約幾秒鐘後就完成軔體更新,

4. 機器的電源重開,電腦的網卡 IP 改為 DHCP,若一切順利,IP 會是 192.168.1.xx,開啟瀏覽器輸入 http://192.168.1.1,預設登入帳號 root; 密碼 admin
注意!

若機器電源重開後,系統完全無法運作,且電源指示燈出現慢-閃狀態,請重複刷軔體的步驟。

DD-WRT_Status.png

 

參考連結:
ASUS WL-520GU Successful flash!
DD-WRT with USB on the WL-520gU
Asus WL-520GU

>DD-WRT 初始設定
  1. 第一次登入 Web 管理頁面 > 變更管理帳號及密碼
  2. Services > Secure Shell > SSHd <Enable>
  3. Administration > JFFS2 Support <Enable>, Clean JFFS2 <Disable>
>使 DD-WRT 支援 USB drive

1. DD-WRT stable 版本並不支援 USB,所以為了要能掛上 USB drive,必須作軔體升級。

官方下載可支援 USB 的升級軔體
下載路徑:downloads > others > eko > BrainSlayer-V24-preSP2 > 10-10-09-r13064 (選擇最新版) > broadcom > dd-wrt.v24_usb_generic.bin

升級方式很簡單,登入管理網頁,Administration > Firmware Upgrade > 選擇檔案 dd-wrt.v24_usb_generic.bin > Upgrade
注意!

升級軔體後,原來所作的設定及管理帳號密碼都會保留。

2. 在機器重新開機後,開啟 USB 支援功能
登入管理網頁 > Services > USB >

Core USB Support      <Enable>
USB 2.0 Support        <Enable>
USB Storage Support  <Enable>
ext2/ext3 File System Support <Enable>

儲存並套用設定。

3. 格式化 USB drive
由於 DD-WRT 預設是不支援格式化指令 fdisk,所以必須用另一部 Linux 電腦來對 USB drive 作格式化。如果你沒有現成的 Linux 系統可用,可以下載 Ubuntu, Knoppix 等 Linux Live-CD 來用。

USB drive(4GB) 磁區規劃:

  1. 磁區一 /dev/sd1 - 格式 ext3, 掛載點 /opt, 2048MB
  2. 磁區二 /dev/sd2 - 格式 SWAP,無 , 128 MB
  3. 磁區三 /dev/sd3 - 格式 ext3, 掛載點 /jffs/usb-disk, 512MB
  4. 磁區四 /dev/sd4 - 格式 ext3, 掛載點 /mnt, 剩餘的空間

格式化指令用法:

#>mke2fs -j -m 1 -L Optware /dev/sd1
#>mke2fs -j -m 1 -L Shared /dev/sd3
#>mke2fs -j -m 1 -L Data /dev/sd4
#>mkswap /dev/sd2

格式化都完成後,就可以將 USB drive 從電腦上拔出,然後接在 ASUS 的機器後面的 USB port,接著繼續下面步驟。

4. 設定 DD-WRT 自動掛載 USB drive
再一次確認機器上得 USB Support 功能有開啟(第 2 項),當 USB drive 接入後,系統應該會自動偵測到,但不會自動掛載那些磁區。

如何檢查機器是否有偵測到 USB drive,登入機器的 SSH,然後執行指令
#>dmesg

...
...
ip_nat_pptp version 1.5 loaded
hub.c: new USB device 00:03.1-1, assigned address 3
  Vendor: Ut165     Model: USB2FlashStorage  Rev: 0.00
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 7897088 512-byte hdwr sectors (4043 MB)
sda: Write Protect is off
/dev/scsi/host0/bus0/target0/lun0: p1 p2 p3 p4
USB device connected to the SCSI subsystem
WARNING: USB Mass Storage data integrity not assured USB Mass Storage device found at 3 ip_nat_pptp version 1.5 unloaded ip_conntrack_pptp version 1.9 unloaded ip_conntrack_pptp version 1.9 loaded ip_nat_pptp version 1.5 loaded

註:黃底文字就是 USB drive 硬體訊息。

再一次確認 DD-WRT 的 USB drive 的各磁區

root@DD-WRT:~# ls -l /dev/scsi/host0/bus0/target0/lun0
brw-------    1 root     root       8,   0 Jan  1  1970 disc
brw-------    1 root     root       8,   1 Jan  1  1970 part1
brw-------    1 root     root       8,   2 Jan  1  1970 part2
brw-------    1 root     root       8,   3 Jan  1  1970 part3
brw-------    1 root     root       8,   4 Jan  1  1970 part4

註:part 1-4 就是對應 USB drive 的 4 個磁區。

手動掛載 USB drive 的磁區 1,3,4,第二個 SWAP 磁區暫不用掛載,後續會有啟用程序,執行

# mkdir /jffs/usb-disk
# mount /dev/scsi/host0/bus0/target0/lun0/part1 /opt
# mount /dev/scsi/host0/bus0/target0/lun0/part3 /jffs/usb-disk
# mount /dev/scsi/host0/bus0/target0/lun0/part4 /mnt/
# mount
rootfs on / type rootfs (rw) /dev/root on / type squashfs (ro) none on /dev type devfs (rw) proc on /proc type proc (rw) ramfs on /tmp type ramfs (rw) devpts on /proc/bus/usb type usbfs (rw) /dev/mtdblock/4 on /jffs type jffs2 (rw) /dev/scsi/host0/bus0/target0/lun0/part1 on /opt type ext3 (rw) /dev/scsi/host0/bus0/target0/lun0/part3 on /jffs/usb-disk type ext3 (rw) /dev/scsi/host0/bus0/target0/lun0/part4 on /mnt type ext3 (rw)

設定以上磁區在機器重開機後會自動掛載,步驟是
登入管理網頁 > Administration > Commands,在文字框填入以下內容

sleep 10 && mount /dev/scsi/host0/bus0/target0/lun0/part1 /opt
sleep 10 && mount /dev/scsi/host0/bus0/target0/lun0/part3 /jffs/usb-disk
sleep 10 && mount /dev/scsi/host0/bus0/target0/lun0/part4 /mnt

Save Startup 儲存設定檔,然後重開機器,在以 SSH 登入,以 mount 指令檢查自動掛載 USB drive 是否正常。

# mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
none on /dev type devfs (rw)
proc on /proc type proc (rw)
ramfs on /tmp type ramfs (rw)
devpts on /proc/bus/usb type usbfs (rw)
/dev/mtdblock/4 on /jffs type jffs2 (rw)
/dev/scsi/host0/bus0/target0/lun0/part1 on /opt type ext3 (rw)
/dev/scsi/host0/bus0/target0/lun0/part3 on /jffs/usb-disk type ext3 (rw)
/dev/scsi/host0/bus0/target0/lun0/part4 on /mnt type ext3 (rw)

DD-WRT_SSH.png 

 

>安裝 Optware 在 DD-WRT

這裡是線上安裝一些必要的指令集和函式庫
關於 Optware 更多資訊,參考 http://www.dd-wrt.com/wiki/index.php/Optware

1. 更新 ipkg 的套件庫資訊

#> ipkg update
Downloading http://downloads.openwrt.org/whiterussian/packages/Packages ...
Connecting to downloads.openwrt.org (78.24.191.177:80)
Packages             100% |*********************************************************|   143k 00:00:00 ETA
Done.
Updated list of available packages in /jffs/usr/lib/ipkg/lists/whiterussian
Downloading http://downloads.openwrt.org/whiterussian/packages/non-free/Packages ...
Connecting to downloads.openwrt.org (78.24.191.177:80)
Packages             100% |*********************************************************|   568  --:--:-- ETA
Done.
Updated list of available packages in /jffs/usr/lib/ipkg/lists/non-free
Downloading http://downloads.openwrt.org/backports/rc5/Packages ...
Connecting to downloads.openwrt.org (78.24.191.177:80)
Packages             100% |*********************************************************| 98390  00:00:00 ETA
Done.
Updated list of available packages in /jffs/usr/lib/ipkg/lists/backports

2. 安裝 optware

# cd /tmp 
# wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O - | tr -d '\r' > /tmp/optware-install.sh
# sh optware-install.sh
Checking system config ... Using 10.1.1.254 as default gateway. Using the following nameserver(s): nameserver 192.168.1.1 Installing package uclibc-opt_0.9.28-13_mipsel.ipk ... Some newer versions of DD-WRT does not show download progress bar, so just be patient - or check STATUS -> BANDWIDTH tab for download activity in your routers Web-GUI, and then still wait a minute or two. Connecting to ipkg.nslu2-linux.org (140.211.169.169:80) uclibc-opt_0.9.28-13 100% |*********************************************************| 832k 00:00:00 ETA Updating /opt/etc/ld.so.cache Installing package ipkg-opt_0.99.163-10_mipsel.ipk ... ...

註:完成後,可以檢查 /opt 目錄多了一些目錄和指令集。

3. 安裝 busybox

# /opt/bin/ipkg-opt install busybox-base 
# /opt/bin/ipkg-opt install busybox
# /opt/bin/ipkg-opt install busybox-links
>啟用 SWAP 磁區

確認 SWAP 磁區已經格式化正確格式,如果不確定,可以用這指令再做一次

# /opt/bin/busybox mkswap /dev/scsi/host0/bus0/target0/lun0/part2

啟用 SWAP 磁區,並用指令 free 檢查

# /opt/bin/busybox swapon /dev/scsi/host0/bus0/target0/lun0/part2 
# free
total used free shared buffers Mem: 13004 12560 444 0 3548 Swap: 127864 0 127864 Total: 140868 12560 128308

設定 DD-WRT 重開機後會自動啟用 SWAP,步驟
登入管理網頁 > Administration > Commands > Startup 編輯,接著內容的下方填入

sleep 10 && /opt/bin/busybox swapon /dev/scsi/host0/bus0/target0/lun0/part2

Save Startup 儲存,機器會自動重新開機,然後在以 SSH 登入,執行指令 free 驗證是否自動啟用了 SWAP。

Notes: 到這裡 DD-WRT 的系統環境算是已經完成了所有初始化的設定,接著以下步驟才是本篇的重點章節 - 安裝 Asterisk,看倌們!繼續再看下去。 

參考連結:
USB Storage - DD-WRT
Partition the Disk

Install Asterisk

安裝 Asterisk 主程式 1.4

# /opt/bin/ipkg-opt --tmp-dir /tmp install asterisk14 

安裝 ulaw 語音檔

# /opt/bin/ipkg-opt --tmp-dir /tmp install asterisk14-moh-freeplay-ulaw
# /opt/bin/ipkg-opt --tmp-dir /tmp install asterisk14-core-sounds-en-ulaw
# /opt/bin/ipkg-opt --tmp-dir /tmp install asterisk14-extra-sounds-en-ulaw

注意!

在安裝 asterisk14-extra-sounds-en-ulaw 時,因為這個檔案比較大(約12.8MB),系統的暫存區 /tmp 可能不夠用,因此一直無法成功安裝,並且在 /tmp 被填滿後還會使機器自動重開機,這時可以將安裝的暫存目錄改到 USB drive 目錄可以用 /jffs/usb-disk/tmp。

# mkdir /jffs/usb-disk/tmp
# /opt/bin/ipkg-opt --tmp-dir /jffs/usb-disk/tmp install asterisk14-extra-sounds-en-ulaw

安裝完成。

註:若要安裝 Asterisk 1.6,請參考以下說明,否則跳過此。

// 若已經安裝 Asterisk-GUI,請先行移除
# /opt/bin/ipkg-opt remove asterisk-gui

// 若已經安裝 Asterisk 1.4,請先執行移除
# /opt/etc/init.d/S50asterisk stop
# /opt/bin/ipkg-opt remove -recursive asterisk14-extra-sounds-en-ulaw
# /opt/bin/ipkg-opt remove -recursive asterisk14-core-sounds-en-ulaw
# /opt/bin/ipkg-opt remove -recursive asterisk14-moh-freeplay-ulaw
# /opt/bin/ipkg-opt remove -recursive asterisk14
# cd /opt/etc
# rm -rf asterisk
# cd /opt/var/lib
# rm -rf asterisk
# cd /opt/var/log
# rm -rf asterisk
# cd ~
# /opt/bin/ipkg-opt install asterisk16
# /opt/bin/ipkg-opt install asterisk-addons
 

 

>初始化設定/調校 Asterisk

由於 Asterisk 可以用哪些功能取決於載入的模組,預設環境會啟用所有模組,然而,機器的硬體資源有限,必須載入部份的基礎模組,而其餘都將它們關閉。
啟動或關閉模組,只要編輯 modules.conf 設定檔即可。

# vi /opt/etc/asterisk/modules.conf

;
; Asterisk configuration file
;
; Module Loader configuration file By Leif Madsen of www.leifmadsen.com
; Descriptions and some modules added by Bill Weidman

[modules]
autoload=no

; Resources —
;load => res_adsi.so ; ADSI Resource
;load => res_agi.so ; Asterisk Gateway Interface (AGI)
;load => res_config_mysql.so ; MySQL Configuration
;load => res_config_odbc.so ; ODBC Configuration
;load => res_crypto.so ; Cryptographic Digital Signatures
load => res_features.so ; Call Parking Resource
;load => res_indications.so ; Indications Configuration
;load => res_monitor.so ; Call Monitoring Resource
load => res_musiconhold.so ; Music On Hold Resource
;load => res_odbc.so ; ODBC Resource

; PBX —
;load => pbx_ael.so ; Asterisk Extension Language Compiler - Requires ?
load => pbx_config.so ; Text Extension Configuration Requires N/A
;load => pbx_dundi.so ; Do a DUNDi lookup of a phone number. - Requires res_crypto.so
;load => pbx_functions.so ; Builtin dialplan functions - Requires N/A
;load => pbx_loopback.so ; Loopback Dialplan Switch - Requires N/A
;load => pbx_realtime.so ; Realtime Dialplan Switch - Requires N/A
;load => pbx_spool.so ; Outgoing Spool Support Requires - N/A

; Functions —
load => func_callerid.so ; Gets or sets Caller*ID data on the channel. - Requires ?
;load => func_enum.s ; ENUMLOOKUP and TXTCIDNAME functions - Requres ?
;load => func_uri.so ; URI encode/decode functions - Requires ?
load => func_logic.so ; Logical dialplan functions

; Database Call Detail Records —
;load => cdr_addon_mysql.so ; Mysql CDR Backend - Requires ?
;load => cdr_csv.so ; Comma Separated Values CDR Backend - Requires N/A
;load => cdr_custom.so ; Customizable Comma Separated Values CDR Backend - Requires N/A
;load => cdr_manager.so ; Asterisk Call Manager CDR Backend - Requires N/A
;load => cdr_odbc.so ; ODBC CDR Backend - Requires N/A
;load => cdr_pgsql.so ; PostgreSQL CDR Backend - Requires N/A
;load => cdr_sqlite.so ; SQLite CDR Backend - Requires N/A

; Channels —
;load => chan_agent.so ; Agent Proxy Channel - Requires res_features.so, res_monitor.so, res_musiconhold.so
;load => chan_features.so ; Provides summary information on feature channels- Requires N/A
load => chan_iax2.so ; Inter Asterisk eXchange (Ver 2) - Requires res_crypto.so, res_features.so
;load => chan_local.so ; Show status of local channels- Requires N/A
;load => chan_mgcp.so ; Media Gateway Control Protocol (MGCP) - Requires res_features.so
;load => chan_modem.so ; Generic Voice Modem Driver - Requires N/A
;load => chan_modem_aopen.so ; A/Open (Rockwell Chipset) ITU-2 VoiceMod- Requires chan_modem.so
;load => chan_modem_bestdata.so ; BestData (Conexant V.90 Chipset) VoiceModem - Requires chan_modem.so
;load => chan_modem_i4l.so ; ISDN4Linux Emulated Modem Driver - Requires chan_modem.so
;load => chan_oss.so ; OSS Console Channel Driver - Requires N/A
;load => chan_phone.so ; Linux Telephony API Support - Requires N/A
load => chan_sip.so ; Session Initiation Protocol (SIP) - Requires res_features.so
;load => chan_skinny.so ; Skinny Client Control Protocol (Skinny) - Requires res_features.so
;load => chan_zap.so ; Zapata Telephony w/PRI - Requires ?

; Codecs —
;load => codec_adpcm.so ; Adaptive Differential PCM Coder/Decoder - Requires N/A
load => codec_alaw.so ; A-law Coder/Decoder - Requires N/A
;load => codec_a_mu.so ; A-law and Mulaw direct Coder/Decoder - Requires N/A
;load => codec_g723.so ; G.723 Codect Translator - Requires N/A
;load => codec_g726.so ; ITU G.726-32kbps G726 Transcoder - Requires N/A
;load => codec_g729.so ; G729/PCM16 (signed linear) Codec Translator - Requires N/A
;load => codec_gsm.so ; GSM/PCM16 (signed linear) Codec Translat - Requires N/A
;load => codec_ilbc.so ; iLBC/PCM16 (signed linear) Codec Translat - Requires N/A
;load => codec_lpc10.so ; LPC10 2.4kbps (signed linear) Voice Codec Translat - Requires N/A
;load => codec_speex.so ; Speex/PCM16 (signed linear) Codec Translat - Requires N/A
;load => codec_ulaw.so ; Mu-law Coder/Decoder - Requires N/A

; Formats —
;load => format_au.so ; Sun Microsystems AU format (signed linear) - Requires N/A
;load => format_g723.so ; Raw G.723 data - Requires N/A
;load => format_g726.so ; Raw G.726 (16/24/32/40kbps) data - Requires N/A
;load => format_g729.so ; Raw G729 data - Requires N/A
;load => format_gsm.so ; Raw GSM data - Requires N/A
;load => format_h263.so ; Raw h263 data - Requires N/A
;load => format_ilbc.so ; Raw iLBC data - Requires N/A
;load => format_jpeg.so ; JPEG (Joint Picture Experts Group) Image - Requires N/A
;load => format_mp3.so ; MP3 - Requires N/A
;load => format_pcm_alaw.so ; Raw aLaw 8khz PCM Audio support - Requires N/A
load => format_pcm.so ; Raw uLaw 8khz Audio support (PCM) - Requires N/A
;load => format_sln.so ; Raw Signed Linear Audio support (SLN) - Requires N/A
;load => format_vox.so ; Dialogic VOX (ADPCM) File Format - Requires N/A
;load => format_wav_gsm.so ; Microsoft WAV format (Proprietary GSM) - Requires N/A
load => format_wav.so ; Microsoft WAV format (8000hz Signed Linear) - Requires N/A

; Applications —
;load => app_addon_sql_mysql.so ; Do several mySQLy things - Requires ?
;load => app_adsiprog.so ; Asterisk ADSI Programming Application - Requires res_adsi.so
;load => app_alarmreceiver.so ; Alarm Receiver for Asterisk - Requires N/A
;load => app_authenticate.so ; Authentication Application - Requires N/A
;load => app_cdr.so ; Tell Asterisk to not maintain a CDR for the current call - Requires N/A
;load => app_chanisavail.so ; Check if channel is available - Requires N/A
;load => app_chanspy.so ; Listen to the audio of an active channel - Requires N/A
;load => app_controlplayback.so ; Play a file with fast forward and rewind - Requires N/A
;load => app_curl.so ; ? - Requires N/A
;load => app_cut.so ; The application Cut is deprecated. - Requires N/A
;load => app_db.so ; Database access functions for Asterisk - Requires N/A
load => app_dial.so ; Dialing Application - Requires res_features.so, res_musiconhold.so
;load => app_dictate.so ; Virtual Dictation Machine - Requires N/A
;load => app_directed_pickup.so ; Directed Call Pickup Application - Requres ?
;load => app_directory.so ; Provide directory of voicemail extensions - Requires N/A
;load => app_disa.so ; Allows someone from outside an "internal" system dialtone - Requires N/A
;load => app_dumpchan.so ; Dump Info About The Calling Channel - Requires N/A
load => app_echo.so ; Echo audio read from channel back to the channel - Requires N/A
;load => app_enumlookup.so ; EnumLookup is deprecated. Use ENUMLOOKUP() function - Requires N/A
;load => app_eval.so ; Reevaluates strings - Requires N/A
;load => app_exec.so ; Allows an arbitrary application to be invoked even when not hardcoded into the dialplan. - Requires N/A
;load => app_externalivr.so ; External IVR Interface Application - Requires ?
;load => app_festival.so ; Simple Festival Interface - Requires N/A
;load => app_flash.so ; Flashes a Zap Trunk - Requires ?
;load => app_forkcdr.so ; Fork The CDR into 2 separate entities. - Requires N/A
;load => app_getcpeid.so ; Obtains and displays ADSI CPE ID and other info in order to properly setup zapata.conf for on-hook operations.
;load => app_groupcount.so ; Deprecated, please use the function GroupCount - Requires N/A
;load => app_hasnewvoicemail.so ; Indicator whether a voice mailbox has messages in a given folder. - Requires N/A
;load => app_ices.so ; Encode and Stream via icecast and ices - Requires N/A
;load => app_image.so ; Sends an image on a channel. - Requires N/A
;load => app_intercom.so ; Obsolete - does not load
;load => app_lookupblacklist.so ; Look up Caller*ID name/number from blacklist database - Requires N/A
;load => app_lookupcidname.so ; Look up CallerID Name from local database - Requires N/A
load => app_macro.so ; Macro Handling Application - Requires N/A
;load => app_math.so ; Basic Math Functions - Requires N/A
;load => app_md5.so ; MD5 checksum applications - Requires N/A
;load => app_meetme.so ; MeetMe conference bridge - Requires ?
;load => app_milliwatt.so ; Generate a Constant 1000Hz tone at 0dbm (mu-law) - Requires N/A
load => app_mixmonitor.so ; Records the audio on the current channel to the specified file. - Requires ?
;load => app_mp3.so ; Play an MP3 file or stream - Requires N/A
;load => app_nbscat.so ; Play an NBS local stream - Requires N/A
;load => app_page.so ; Places outbound calls and dumps them into a conference bridge, muted - Requires ?
;load => app_parkandannounce.so ; Call Parking and Announce Application - Requires res_features.so
load => app_playback.so ; Sound File Playback Application - Requires N/A
;load => app_privacy.so ; Require phone number to be entered, if no CallerID sent - Requires N/A
;load => app_queue.so ; Queue handling applications - Requires res_features.so, res_monitor.so, res_musiconhold.so
;load => app_random.so ; Conditionally branches, based upon a probability - Requires N/A
;load => app_read.so ; Reads a #-terminated string of digits - Requires N/A
;load => app_readfile.so ; Stores output of file into a variable - Requires N/A
;load => app_realtime.so ; Use RealTime config handler to read data into channel variables. - Requires N/A
;load => app_record.so ; Record to a file - Requires N/A
;load => app_rxfax.so ; Receive a FAX to a file - Requires ?
;load => app_saycountpl.so ; Polish counting grammar - Requires ?
;load => app_sayunixtime.so ; Says a specified time in a custom format - Requires N/A
;load => app_senddtmf.so ; Sends arbitrary DTMF digits - Requires N/A
;load => app_sendtext.so ; Sends text to current channel (callee). - Requires N/A
load => app_setcallerid.so ; Set Caller*ID on a call to a new value. - Requires N/A
;load => app_setcdruserfield.so ; Append to the CDR user field - Requires N/A
;load => app_setcidname.so ; SetCIDName deprecated in favor of the function CALLERID(name) - Requires N/A
;load => app_setcidnum.so ; SetCIDNum deprecated in favor of the function CALLERID(number) - Requires N/A
;load => app_setrdnis.so ; SetRDNIS deprecated in favor of the function CALLERID(rdnis) - Requires N/A
;load => app_settransfercapability.so ; Set ISDN Transfer Capability - Requires N/A
;load => app_sms.so ; SMS/PSTN handler - Requires N/A
;load => app_softhangup.so ; Hangs up the requested channel - Requires N/A
;load => app_stack.so ; Stack routines - Requires ?
;load => app_striplsd.so ; Deprecated - Requires N/A
;load => app_substring.so ; Deprecated - Requires N/A
;load => app_system.so ; Execute a system command - Requires N/A
;load => app_talkdetect.so ; Playback with Talk Detection - Requires N/A
;load => app_test.so ; Interface Test Application - Requires N/A
;load => app_transfer.so ; Transfer caller to remote extension - Requires N/A
;load => app_txfax.so ; Trivial FAX Transmit Application - Requires ?
;load => app_txtcidname.so ; The TXTCIDName deprecated in favor of the TXTCIDNAME dialplan function - Requires N/A
;load => app_url.so ; Send URL Applications - Requires N/A
;load => app_userevent.so ; Send an arbitrary event to the manager interface - Requires N/A
;load => app_verbose.so ; Send arbitrary text to verbose output - Requires N/A
;load => app_voicemail.so ; Comedian Mail (Voicemail System) - Requires res_adsi.so
;load => app_waitforring.so ; Waits until first ring after specified time - Requires N/A
;load => app_waitforsilence.so ; Waits for silence of specified time - Requires N/A
;load => app_while.so ; While Loops and Conditional Execution - Requires N/A
;load => app_zapateller.so ; Block Telemarketers with Special Information Tone - Requires N/A
;load => app_zapbarge.so ; Barges in on a specified zap channel - Requires ?
;load => app_zapras.so ; Executes a RAS server using pppd on the given channel - Requires ?
;load => app_zapscan.so ; Scan Zap channels to monitor calls - Requires ?

[global]
chan_modem.so=yes

 註:autoload 必須是 no,要關閉模組項,就在前方加上 ; 分號。

啟動 Asterisk

# asterisk 背景執行
# asterisk -vvvc 前景執行,且自動進入 CLI 模式

檢查載入的模組

CLI>module show
Module                         Description                              Use Count
res_features.so                Call Features Resource                   0
res_musiconhold.so             Music On Hold Resource                   0
pbx_config.so                  Text Extension Configuration             0
func_callerid.so               Caller ID related dialplan function      0
func_logic.so                  Logical dialplan functions               0
chan_iax2.so                   Inter Asterisk eXchange (Ver 2)          0
chan_sip.so                    Session Initiation Protocol (SIP)        0
codec_alaw.so                  A-law Coder/Decoder                      0
format_pcm.so                  Raw/Sun uLaw/ALaw 8KHz (PCM,PCMA,AU), G. 0
format_wav.so                  Microsoft WAV format (8000Hz Signed Line 0
app_dial.so                    Dialing Application                      0
app_echo.so                    Simple Echo Application                  0
app_macro.so                   Extension Macros                         0
app_mixmonitor.so              Mixed Audio Monitoring Application       0
app_playback.so                Sound File Playback Application          0
app_setcallerid.so             Set CallerID Application                 0
16 modules loaded 

檢查機器的記憶體使用狀況

# free
              total         used         free       shared      buffers
  Mem:        13004        12240          764            0         1128
 Swap:       127864            0       127864
Total:       140868        12240       128628
 

雖然已經停用了許多模組,看來這款機器內建的 16MB RAM 在運行 Asterisk 後會很吃力。
另外,眼尖的朋友應該會看到 total 好像少了幾 MB 的記憶體,這是因為 DD-WRT 會利用些許記憶體用在 ramdisk,系統在運行中所需要的暫存檔都會使用這個 ramdisk。

設定自動啟動 Asterisk 程序
# mkdir /opt/etc/init.d
# vi /opt/etc/init.d/S50asterisk

#!/bin/sh

case $1 in

  start)
    if [ -f /opt/var/lib/asterisk/astdb ]; then
        cp /opt/var/lib/asterisk/astdb /opt/var/lib/asterisk/astdata
    fi

    if [ ! -f /var/lib/asterisk/astdb ]; then
        mkdir -p /var/lib/asterisk/
        if [ -f /opt/var/lib/asterisk/astdata ]; then
              cp /opt/var/lib/asterisk/astdata /var/lib/asterisk/astdb
        else
              touch /var/lib/asterisk/astdb
        fi
    fi

    if [ -f /opt/var/lib/asterisk/astdb ]; then
        rm /opt/var/lib/asterisk/astdb
        ln -s /var/lib/asterisk/astdb /opt/var/lib/asterisk/astdb
    fi

    /opt/sbin/asterisk -q

    if [ -f /var/lib/asterisk/astdb ]; then
         chmod 755 /var/lib/
         chmod 755 /var/lib/asterisk/
    fi
    ;;

  stop)
    if [ -n "`pidof asterisk`" ]; then
         /opt/sbin/asterisk -r -x 'stop now'
    fi

    if [ -f /var/lib/asterisk/astdb ]; then
         cp /var/lib/asterisk/astdb /opt/var/lib/asterisk/astdata
    fi
    ;;

   *)
    echo "usage: $0 (start|stop)"
    exit 1
esac

exit 0

# chmod 755 /opt/etc/init.d/S50asterisk
# vi /opt/etc/optware.startup

#!/bin/sh
#
(
export PATH=/opt/bin:/opt/sbin:$PATH

# Insert whatever it takes to mount the USB drive here
#
# Start all init scripts in /opt/etc/init.d
# executing them in numerical order.
#
for i in /opt/etc/init.d/S??* ; do
     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
        *.sh)
            # Source shell script for speed.
            (
              trap - INT QUIT TSTP
              set start
              . $i
            )
            ;;
        *)
            # No sh extension, so fork subprocess.
            $i start
            ;;
     esac
done

) > /tmp/optware_startup.log 2>&1

#chmod 755 /opt/etc/optware.startup

設定 DD-WRT 重開機後會自動啟動 Asterisk,步驟
登入管理網頁 > Administration > Commands > Startup 編輯,接著內容的下方填入

/opt/etc/config/optware.startup

設定 Asterisk 自動關閉程序
# cp /opt/etc/init.d/S50asterisk /opt/etc/init.d/K50asterisk
# vi /opt/etc/config/optware.shutdown

#!/bin/sh

#
# Insert whatever it takes to mount the USB drive here
#

# Start all init scripts in /opt/etc/init.d
# executing them in numerical order.
#
for i in /opt/etc/init.d/K??* ; do
     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
        *.sh)
            # Source shell script for speed.
            (
              trap - INT QUIT TSTP
              set stop
              . $i
            )
            ;;
        *)
            # No sh extension, so fork subprocess.
            $i stop
            ;;
     esac
done

#chmod 755 /opt/etc/optware.shutdown

設定 DD-WRT 在執行關機程序時會自動停止 Asterisk,步驟
登入管理網頁 > Administration > Commands ,接著內容的下方填入

/opt/etc/config/optware.shutdown

Save Shutdown 存檔,重啟機器。

>新增分機

# vi /opt/etc/asterisk/sip.conf

[general]
context=default                 ; Default context for incoming calls
;allowguest=no                  ; Allow or reject guest calls (default is yes)
allowoverlap=no                 ; Disable overlap dialing support. (Default is yes)
;allowtransfer=no               ; Disable all transfers (unless enabled in peers or users)
                                ; Default is enabled
;realm=mydomain.tld             ; Realm for digest authentication
                                ; defaults to "asterisk". If you set a system name in
                                ; asterisk.conf, it defaults to that system name
                                ; Realms MUST be globally unique according to RFC 3261
                                ; Set this to your host name or domain name
bindport=5060                   ; UDP Port to bind to (SIP standard port is 5060)
                                ; bindport is the local UDP port that Asterisk will listen on
bindaddr=0.0.0.0                ; IP address to bind to (0.0.0.0 binds to all)
srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                                ; Note: Asterisk only uses the first host
                                ; in SRV records
                                ; Disabling DNS SRV lookups disables the
                                ; ability to place SIP calls based on domain
                                ; names to some other SIP users on the Internet

#include "/opt/etc/asterisk/sip_custom.conf" 
;pedantic=yes                   ; Enable checking of tags in headers,

# vi /opt/etc/asterisk/sip_custom.conf

; SIP accounts

[1000]
type=friend
context=internal
callerid="Softphone" <1000>
qualify=yes
secret=1111
nat=yes
canreinvite=no
dtmfmode=rfc2833
host=dynamic
call-limit=2
disallow=all
allow=alaw

[1001]
type=friend
context=internal
callerid="Home" <1001>
qualify=yes
secret=1111
nat=yes
canreinvite=no
dtmfmode=rfc2833
host=dynamic
call-limit=2
disallow=all
allow=alaw

# vi /opt/etc/asterisk/extensions.conf

;priorityjumping=yes
;
; User context is where entries from users.conf are registered.  The
; default value is 'default'
;
;userscontext=default
;
; You can include other config files, use the #include command
; (without the ';'). Note that this is different from the "include" command
; that includes contexts within other contexts. The #include command works
; in all asterisk configuration files.
;#include "filename.conf"
#include "/opt/etc/asterisk/extensions_custom.conf"

; The "Globals" category contains global variables that can be referenced
; in the dialplan with the GLOBAL dialplan function:
; ${GLOBAL(VARIABLE)}
; ${${GLOBAL(VARIABLE)}} or ${text${GLOBAL(VARIABLE)}} or any hybrid
; Unix/Linux environmental variables can be reached with the ENV dialplan
; function: ${ENV(VARIABLE)}
;
[globals]

# vi /opt/etc/asterisk/extensions_custom.conf

[globals]

;;; apps context

[apps]
exten => 444,1,Answer()
exten => 444,n,Wait(1)
exten => 444,n,Echo

;;; incoming calls context

[incoming]
;exten => 3221234567,1,Dial(SIP/1001,30)
;exten => 3221234567,n,Dial(SIP/1002,30)
;exten => 3221234567,n,Dial(SIP/1000,30)

;;; outgoing calls context

; local calls only
[local]
include => apps

exten => _1XXX,1,Dial(SIP/${EXTEN})
exten => _1XXX,n,NoOp(===== DIAL STATUS --> ${DIALSTATUS} =====)
exten => _1XXX,n,Hangup()

; national (Belgium, code 32) calls only
[national]
include => local
include => apps

;exten => _0N.,1,Dial(SIP/0032${EXTEN:1}@itsp_ipness)
;exten => _0N.,n,NoOp(===== DIAL STATUS --> ${DIALSTATUS} =====)
;exten => _0N.,n,Hangup()

; international calls
[international]
;include => national
;include => local
;include => apps

;exten => _00.,1,Dial(SIP/${EXTEN}@itsp_ipness)
;exten => _00.,n,NoOp(===== DIAL STATUS --> ${DIALSTATUS} =====)
;exten => _00.,n,Hangup()
 

存檔後,重啟 Asterisk 服務

# /opt/etc/init.d/S50asterisk stop
# /opt/etc/init.d/S50asterisk start

參考連結:
Install Asterisk on an Asus WL-520GU router
Googlevoice + Asterisk pbx (PiAF) + Free DID from SipGate = Free incoming/outgoing USA VOIP service
Slimming Asterisk for the NSLU2 under Debian

>在 LAN 網路作通話測試

使用 SJphone 註冊分機 1000,撥 444 Echo Test -> OK
使用 PAP2 註冊分機 1001,撥分機 1000 -> OK

在保持兩個 Channels 持續通話,系統的資源使用狀態:
DD-WRT 網頁的資訊

DD-WRT_2_Channels_cpu_mem.png

使用 top 指令觀察 CPU 使用

DD-WRT_2_Channels_top.png

使用 free 指令觀察記憶體使用

DD-WRT_2_Channels_free.png

CPU 資訊

wl520gu-cpu.png

Memory 資訊

wl520gu-mem.png

 

>在 WAN 網路作通話測試

如果分機是在外部網路的 Internet 上,在DD-WRT預設的環境下外部分機是無法向 Asterisk 註冊的,解決方法也很簡單,只要在防火牆規則開啟需要的通訊埠即可。
執行步驟如下:
登入管理網頁 > Administration > Commands 文字框填入

iptables -I INPUT 1 -p udp --dport 5060 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 10000:20000 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 4569 -j ACCEPT

或者,改成比較安全的規則如下(僅適用外部分機使用固定IP時):

iptables -I INPUT 1 -p udp --dport 5060 -s outbound_ip_of_outside_extension -j ACCEPT
iptables -I INPUT 1 -p udp --dport 10000:20000 -s outbound_ip_of_outside_extension -j ACCEPT
iptables -I INPUT 1 -p udp --dport 4569 -s outbound_ip_of_outside_extension -j ACCEPT

Save Firewall 存檔,重啟機器。

提示!

  1. 第二行的 port 範圍,必須與 Asterisk 的 rtp.conf 的設定相同。
  2. 如果沒有分機使用外部網路,這個防火牆變更可以不用執行,此時的網路相對也會比較安全。
  3. outbound_ip_of_outside_extension 以外部分機的真實 IP 位址代替。

重點總結

DD-WRT 會用到的各種指令

登入管理頁 > Administration > Commands
Startup (開機指令)

sleep 10 && mount /dev/scsi/host0/bus0/target0/lun0/part1 /opt
sleep 10 && mount /dev/scsi/host0/bus0/target0/lun0/part3 /jffs/usb-disk
sleep 10 && mount /dev/scsi/host0/bus0/target0/lun0/part4 /mnt
sleep 10 && /opt/bin/busybox swapon /dev/scsi/host0/bus0/target0/lun0/part2
/opt/etc/config/optware.startup

Shutdown (關機指令)

/opt/etc/config/optware.shutdown

Firewall (防火牆指令)

iptables -I INPUT 1 -p udp --dport 5060 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 10000:20000 -j ACCEPT
iptables -I INPUT 1 -p udp --dport 4569 -j ACCEPT
重建 Profile (選用)

#> vi /opt/etc/profile

#
export PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin
export PS1='\u@\h:\w\$ '

[ -x /opt/bin/less ] || alias less=more
[ -x /opt/bin/vim ] || alias vim=vi

arp() { cat /proc/net/arp; }
ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }

reboot() {
  echo "$(nvram get rc_shutdown)" > /tmp/.rc_shutdown
  if [ -f /tmp/.rc_shutdown ]; then
       chmod +x /tmp/.rc_shutdown
       /tmp/.rc_shutdown
  fi
  /opt/sbin/asterisk -rx "stop now" > /dev/null 2>&1 <--- 這行作用是在關機前再一次關閉 Asterisk, 可不加。
  /sbin/reboot
}

#> vi /opt/etc/config/optware.startup

增加藍字的部份

#!/bin/sh
#
(
export PATH=/opt/bin:/opt/sbin:$PATH
[ -e /opt/etc/profile ] && mount -o bind /opt/etc/profile /etc/profile 

# Insert whatever it takes to mount the USB drive here
#
# Start all init scripts in /opt/etc/init.d
# executing them in numerical order.
#
for i in /opt/etc/init.d/S??* ; do
     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
        *.sh)
            # Source shell script for speed.
            (
              trap - INT QUIT TSTP
              set start
              . $i
            )
            ;;
        *)
            # No sh extension, so fork subprocess.
            $i start
            ;;
     esac
done

) > /tmp/optware_startup.log 2>&1

 

Was this page helpful?
標籤 (Edit tags)
查看第15個(總17個)評論: 查看所有
是這樣的,除了用作家用外,
1.小弟還想自動群呼我所需要的用用戶(自訂的一長串電話號碼)播放語音信息。
2,群呼我指定的號碼,響一聲即掛。。。

基於以上兩點小應用,你仍然是推薦這個機器和安裝這個asterisk版本,看應用,似乎大陸的這個版本http://cn.astercc.org 好象跟我想要的非常類似,如果我非要安裝astercc在這款機器上,請你用你的使用經驗來說,可行不??
發佈時間 02:12, 23 Nov 2009 ()
要安裝 astercc 是不可行。
發佈時間 02:32, 23 Nov 2009 ()
那如果我單單安裝asterisk,能可以做到以下2點嗎?困難不?

1.小弟還想自動群呼我所需要的用戶(自訂的一長串電話號碼)播放語音信息。
2,群呼我指定的號碼,響一聲即掛。。。
發佈時間 13:40, 24 Nov 2009 ()
如果熟悉 AGI & dialplan 客製化語言,應該是可以辦到,不過因為這類機器的資源有限,不適合這樣應用。
舉凡這類的特殊應用,還是建議用 x86 機器來運行。
發佈時間 05:48, 25 Nov 2009 ()
哦。。那好的,剛好我有一台X86舊機,我一點也不熟悉AGI & dialplan,站台上有沒有剛好適合我的AGI & dialplan 客製化語言腳本呢。。我想copy它放在自己機器上跑。。。如果沒有的話,站大是否可以考慮放一點上來,畢竟也是屬於asterisk的。。也是開源的目的。。。剛才小弟又跑去http://cn.freeiris.org,想用它來實現我想要的功能,不過還沒有安好。。如果可以的話,我真的希望站大能寫一篇教學,內容是如何在指定時間內群呼指定的號碼,比如說,在學校裡,可以群呼老師開會,早晨可以做鬧鐘,因為不想打鈴了,打鈴太大聲,會影響隔壁的住宅
發佈時間 04:53, 27 Nov 2009 ()
國外有些商業套件可以做到,你可以在本站 Asterisk > Addons 找到這些資訊。
發佈時間 08:07, 27 Nov 2009 ()
哦。。那些資訊我看過了,但沒有用過,不明白呀。
發佈時間 03:27, 28 Nov 2009 ()
大大能介绍一下,这里如何安装asterisk GUI界面吗?毕竟想在MS的机器上通过WEB配制asterisk...
發佈時間 03:42, 22 Apr 2010 ()
請參考這篇 "IP PBX-ASUS WL-520GU 管理介面篇"
發佈時間 08:53, 22 Apr 2010 ()
沒來一陣子,ALang 又有新研究,非常適用,剛好手上有台520GU 和N16.. 不過看來過程滿複雜的!
發佈時間 17:14, 4 Jun 2010 ()
雖然看的不是很懂.可是還是很想試著去做一下.手上有一個同型號的.謝謝
發佈時間 11:23, 11 Aug 2011 ()
想請教 Alang兄 我花了8Hr 看了貴站粉多資訊.必查了粉多原廠的資料..對幾個項目粉有興趣..其中以OSS-E Svr及本文的興趣最高.先請教有關本文.我突有個想法.是不是可以用以上的方法 使用 ASUS NT-16+USB導入DD-WRT+Elastix 2.0不知道可不可行..?? 因為 IPPBX有許多複雜的設定..沒有中文就殘念了.. 我發現Elastix有中文的部份
發佈時間 03:08, 29 Sep 2011 ()
會這樣想..是因為..Asterisk官網上沒有 ZH_TW.. Google找到翻掉也好像沒有.. 您辛苦轉譯的版本1.01又比較舊..所以才產生上述的念頭.
發佈時間 03:10, 29 Sep 2011 ()
就我瞭解,要將 Elastix 移植到 ASUS NT-16 幾乎是不可行,關鍵在作業系統及硬體,如果要堅持 Elastix,或許可以試試 SheevaPlug 這個硬體。
發佈時間 16:02, 29 Sep 2011 ()
现在都已经出了asterisk1.8X了,大大可以更新一下吗?我主要是想用里面的GOOGLE VOICE功能.另外接听方面大家说应该用个SPA3000还是直接买个带RJ54的电话机呢?
發佈時間 16:19, 18 Jan 2012 ()
查看第15個(總17個)評論: 查看所有
您必須 登入 才能發佈評論。
Powered by MindTouch Core