在 CentOS 5.4 上安装和配置 Asterisk 和 Digium 卡

asterisk

现在大家基本都在用智能手机,加上我们的工作区已经被 Wifi 覆盖,如果能让每个手机连上 Wifi,通过一个 Asterisk 服务器(网关)给内线打电话的话就会很方便,比如我在周围散步、或者和朋友聊天的话还可以收到办公桌上的内线电话。如何用智能手机(这里主要使用 Nokia E 系列)免费打内线电话呢?首先手机必须通过 Wifi 连上内部网络,然后通过内部网络的一台 Asterisk 服务器和电话线连上内部电话网络(PSTN),Asterisk 在这里相当于一个网关,用来连接 IP 网络和 PSTN 网络,这样我们就可以通过 IP 网上的电话(手机或者软电话)打内部电话(俗称座机)了,如果内部电话使用 IP 电话就更好了,就不用这么麻烦了。

上个星期在自己的 PC 上安装了一个 Digium 电话卡,并且 在 Ubuntu 上源码编译安装了 Asterisk 和 Digium 驱动,测了测效果,电话语音效果还不错。这个星期打算安装在服务器上,SUN 服务器没有 PCI 插槽,找了一台很老的 HP ProLiant ML110,配置是:Intel P4 3GHz CPU, 4GB ECC RAM,足够我们小组的人用了。按照 Asterisk 和 Digium 官方网站的推荐,VPSee 还是决定使用 CentOS 5.4 作为这台 Asterisk 服务器的操作系统。

安装和配置 Asterisk 和 Digium 卡

首先安装 CentOS 5.4 和优化系统,然后加上 Asterisk 的 Repositories:

# vi /etc/yum.repos.d/CentOS-Asterisk.repo
[asterisk-tested]
name=CentOS-$releasever - Asterisk - Tested
baseurl=http://packages.asterisk.org/centos/$releasever/tested/$basearch/
enabled=0
gpgcheck=0
#gpgkey=http://packages.asterisk.org/RPM-GPG-KEY-Digium

[asterisk-current]
name=CentOS-$releasever - Asterisk - Current
baseurl=http://packages.asterisk.org/centos/$releasever/current/$basearch/
enabled=1
gpgcheck=0
#gpgkey=http://packages.asterisk.org/RPM-GPG-KEY-Digium

再加上 Digium 的 Repositories:

# vi /etc/yum.repos.d/CentOS-Digium.repo
[digium-tested]
name=CentOS-$releasever - Digium - Tested
baseurl=http://packages.digium.com/centos/$releasever/tested/$basearch/
enabled=0
gpgcheck=0
#gpgkey=http://packages.digium.com/RPM-GPG-KEY-Digium

[digium-current]
name=CentOS-$releasever - Digium - Current
baseurl=http://packages.digium.com/centos/$releasever/current/$basearch/
enabled=1
gpgcheck=0
#gpgkey=http://packages.digium.com/RPM-GPG-KEY-Digium

安装 Asterisk 1.6 和 DAHDI:

# yum install asterisk16 asterisk16-configs asterisk16-voicemail \
dahdi-linux dahd

把 Asterisk 加到启动文件中以便开机就启动 Asterisk:

# /sbin/chkconfig asterisk on

安装完毕,启动和停止 Asterisk:

# /etc/init.d/asterisk start
# /etc/init.d/asterisk stop

插上电话线和电话

Digium 驱动安装成功并重启系统后,Digium 卡上的闪烁灯应该会被点亮,注意在拆机箱、安装 Digium PCI 卡时要把卡接上主机内的电源,这样电话才会听见拨号音。左边黑线连接电话机,右边白线连接电话线(PSTN):

digium card

配置 Digium

先运行 dahdi_genconf 自动生成配置文件,这样会在 /etc/dahdi/ 下面产生一个 system.conf,在 /etc/asterisk/ 下产生一个 dahdi-channels.conf,注意 Zaptel 项目被重新命名为 DAHDI,所以目录和配置文件名也有变化:

# /usr/sbin/dahdi_genconf
# vi /etc/dahdi/system.conf
vi /etc/asterisk/dahdi-channels.conf

配置 Asterisk

给系统分配电话号码,简单说明一下,1)如果要打外线需要先拨 9;2)如果从电话上(连在 Asterisk 服务器上的那个电话)接电话的话,Dial(dahdi/g1,20,rt);3)想把 incoming 电话转接到手机上(电话号码是 9252)的话,Dial(SIP/9252,20):

# vi /etc/asterisk/extensions.conf
[internal]
exten => 9250,1,Dial(SIP/9250,20)
exten => 9250,2,Hangup
exten => 9251,1,Dial(SIP/9251,20)
exten => 9251,2,Hangup
exten => 9252,1,Dial(SIP/9252,20)
exten => 9252,2,Hangup

exten => 92461,1,Dial(dahdi/g1,20,rt)
exten => 92461,2,Hangup

exten => _9.,1,Dial(dahdi/g2/${EXTEN:1})

[incoming]
exten => s,1,Answer()
exten => s,2,Dial(dahdi/g1,20,rt)
; exten => s,1,Dial(SIP/9252,20)

给手机或 SIP 软电话分配电话号码

# vi /etc/asterisk/sip.conf
[9250]
type=friend
context=internal
username=9250
host=dynamic                    ; This device needs to register
canreinvite=no                  ; Typically set to NO if behind NAT
dtfmode=rfc2833
nat=no                          ; X-Lite is behind a NAT router
disallow=all
allow=ulaw
subscribecontext=internal
[email protected]                   ; Subscribe to status of multiple mailboxes

[9251]
type=friend
context=internal
username=9251
host=dynamic                    ; This device needs to register
canreinvite=no                  ; Typically set to NO if behind NAT
dtfmode=rfc2833
nat=no                          ; X-Lite is behind a NAT router
disallow=all
allow=ulaw
subscribecontext=internal
mailbox[email protected]           ; Subscribe to status of multiple mailboxes

;Nokia Cellphone
[9252]
type=friend
context=internal
username=9252
host=dynamic                    ; This device needs to register
qualify=no
port=5060
notransfer=yes
disallow=all
allow=alaw

修改完配置文件后需要 Asterisk 重新导入配置文件:

# /usr/sbin/asterisk -vvvvvvvr
localhost*CLI> reload

测试

手机必须是支持 Wifi,SIP 的智能手机,VPSee 在 Nokia E51/E60/E61/E70/E71/N82 上都测试过没有问题,如果没有手机的话也可以用任何 SIP 软电话(比如 X-Lite 等)客户端测试。测试具体配置可以看 用 Nokia 手机连接 Asterisk 打 SIP 电话 的后半部分。

评论 (14 Comments)

  1. Hi, thank you for all the information you have provided.
    I am trying to install asterisk in centos and am having following problems:

    when I do : ‘ yum install asterisk16 asterisk16-configs asterisk16-voicemail \ dahdi-linux dahd’ I get the following message:
    *************88
    Package asterisk16-1.6.0.25-1_centos5.i386 already installed and latest version
    Package asterisk16-configs-1.6.0.25-1_centos5.i386 already installed and latest version
    Package asterisk16-voicemail-1.6.0.25-1_centos5.i386 already installed and latest version
    Package dahdi-linux-2.2.1-1_centos5.i386 already installed and latest version
    No package dahd available.
    Nothing to do
    *******************
    Please suggest what I should do to get Asterisk running.

    Thank you.

    Bandana

    I

  2. you have installed asterisk/dahdi successfully, just run the following command to start your asterisk server:
    # /etc/init.d/asterisk start

    you can also run ‘asterisk -r’ in a terminal to connect to the asterisk server:
    # /usr/sbin/asterisk -r
    localhost*CLI>

    the asterisk configuration files are:
    /etc/asterisk/sip.conf
    /etc/asterisk/extensions.conf
    /etc/dahdi/system.conf
    /etc/asterisk/dahdi-channels.conf

    good luck:)

  3. 不错一篇教程,请问这个可以用来商用吗?

  4. 可以,很多小的 VoIP 公司都是这么做的。

  5. 商用我们都用AVS和VPS不知道哪个的兼容性更好,而且支持G.729吗?

  6. 支持,可以从 Digium 那里买 license,或者用 open source 的 G.729 版本。

  7. 谢谢,很详尽。
    asterisk新手,麻烦请问,digium卡没有什么驱动(.bin)么?比如diva的似乎就有一个Diva4linux_installer_9.5-110-91.bin……能解释一下么?

  8. @kylelover
    yum 安装就是二进制安装,比自己下载和安装 bin 包还要方便。

  9. 您好,本人新手,向您请教一些基本的原理问题,请问实现IP 互联网和3G网视频互通的最基本条件是什么?
    我想实现这样的3G视频会议方案,客户A和客户B使用pc终端,客户C使用3G手机终端,A和B主动通过互联网连接服务器,C被叫,然后A、B、C三个客户实现视频会议。又或者C主动用手机连接服务器,A和B被邀请,然后A、B、C三个客户实现视频会议。

    如下所示:
    pc—-互联网—3G网—3G手机
    1,必需的硬件除了pc和3G手机以外还需要什么?我看到有些方案是在3G网和IP网之间加一个视频网关,请问这个视频网关能否用软件的方式实现?这个视频网关的价格是不是是否昂贵?
    2,是不是不管用什么方式,只要希望从pc接通3G手机,就必须要到运营商那里申请专门的线路和号码?

    不知道大家有什么好的方案?纯软件(只添加简单的板卡)能否解决?asterisk+E1板卡这样的方式是否是理想选择?
    新手,基本原理不太懂,谢谢指教。

  10. 你好,vpsee 请问公司有台 teledex的电话,可以运行在这个系统上吗?

  11. @lee
    普通的电话就可以。

  12. 请教一下400电话 chan_dahdi.conf 的 nationalprefix localprefix 应该填什么?

  13. 你好,vpsee 之前我也安装配置过asterisk,但是貌似不是很稳定的说~ 语音卡用的是openvox 的400p的,你的运行稳定吗,需要经常地重启吗?

  14. @lee
    asterisk 很稳定,安装配置好后基本不用管。

发表评论