使用OpenSER构建电话通信系统——第七章(2)

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!

实验——AsteriskPSTN网关(Lab——Using Asterisk as a PSTN Gateway

使用本章提供的框架,写一个脚本将打给PSTN的通话传给PSTN网关。你可以使用phpMyAdmin或是MySQL命令行向数据库插入数据。

步骤1——使用SerMyAdmin向授信表中添加网关地址:

如果需要或是如果你觉得方便,可以使用MySQL命令行接口来完成同样的事情:

#mysql –u openser –p

 -- enter your mysql password --

 mysql> use openser;

 mysql> INSERT INTO trusted ( src_ip, proto, from_pattern )

 VALUES ( ' 10.1.30 .22', 'any', '^sip:.*$');

  上面的记录告诉OpenSER脚本要允许符合下面条件的请求:来自IP地址 10.1.30 .22,可以是任何的传输层协议,与正则表达式“^sip:.*$”相符合。如果你不想重新加载OpenSER,你可以使用下面的命令。

#openserctl fifo trusted_reload

步骤2——在域表中包含你的服务域。(如果之前你没有做过)

openserctl domain add sermyadmin.org

你也可以使用SerMyAdmin来做这件事。


步骤3——在组中包含用户(local,ldint

#openserctl acl grant 1000@sermyadmin.org local

 #openserctl acl grant 1000@sermyadmin.org ld

 #openserctl acl grant 1000@sermyadmin.org int

 #openserctl acl grant 1001@sermyadmin.org local

  要使用SerMyAdmin,转向下面这一屏:


步骤4——配置Asterisk做网关。

对于OpenSER来说,两个非常流行的网关是AsteriskCisco AS5300

其他厂商的网关也可以使用;检查他们的文档说明作为配置的指导。让我们看看怎样配置带两个FXOCisco 2601和带一个E1 PSTNAsterisk

    警告:防止将SIP包直接发送给网关是很重要的。SIP网关       

    应该在gateway的前面,并且要有防火墙防止用户直接将SIP   

    请求发送给网关。                                                                            

步骤5——建立Asterisk服务器或是Cisco网关

我们现在认为Asterisk网关的PSTN方面已经配置好了。让我们来改变我们网关的SIP配置(sip.conf)和它的拨号方案(extensions.conf)。我们将配置Asterisk来处理从PSTN来的或是打给PSTN的通话。Asterisk的一些基本知识是需要的。下面是最简单的一个能够让AsteriskOpenSER进行交互的配置。请按照你的布局对这个脚本进行调整。

           警告:只允许来自你的SIP服务器的SIP包传到你的          

           asterisk服务器。不允许来自其他地方的SIP包。你           

           可以用IP Tables来达到目的,如果你还是有疑问,请        
      
           资讯Linux安全专家。                                                        

Asterisk网关(sip.conf

[general]

 context=sipincoming

 #calls incoming from the SIP proxy to be terminated in the PSTN lines

 [sipproxy]

 #calls incoming from the PSTN to be forwarded to clients behind the

 SIP

 #proxy

 type=peer

 host= 10.1.30 .22

 

Asterisk (extensions.conf)

 [general]

 [globals]

 [sipincoming]

 exten=>_[0-9].,1,Dial(Zap/g1/${EXTEN:1})

 exten=>_[0-9].,2,hangup()

 [sipoutgoing]

 # If you have a digital interface use the lines below

 exten=_[0-9].,1,Answer()

  exten=_[0-9].,2,dial(SIP/${EXTEN}@sipproxy)

 exten=_[0-9].,3,Hangup()

 #If you have analog FXO interfaces use the lines below.

 exten=s,1,Answer()

 exten=s,2,dial(SIP/${EXTEN}@sipproxy)

 exten=s,3,Hangup()

  Cisco 2601 网关(Cisco 2601 Gateway

下面的解释可以帮的上忙,但是要完成这个配置,Cisco网关的一些知识也是需要的。Cisco网关的通话路由是由指令拨号点(instruction dial peer)完成的。由拨号点voice12两条POTSplain old telephone system)线路的说明可以看到,任何以9打头,其他数字跟随的拨号通话都将会被前转到PSTN1/0口或1/1口。而在拨号点voice123 voip线路的说明中,以19开始,任何数字跟随的拨号通话都将被直接转到IP地址为 10.1.3 .22SIP代理上。

voice class codec 1

 codec preference 2 g 711ulaw

!

interface Ethernet0/0

  ip address 10.1.30 .38 255.255.0.0

  half-duplex

!

ip classless

ip route 0.0.0 .0 0.0.0.0 10.1.0.1

no ip http server

ip pim bidir-enable

!

voice-port 1/0

!

voice-port 1/1

!

mgcp profile default

!

! The dial-peer pots commands will handle the calls coming from SIP

!dial-peers. Any call matching 9 followed by any number of digits will

be !forwarded to the PSTN with the 9 striped.

dial-peer voice 1 pots

  destination-pattern 9T

        port 1/0

!

dial-peer voice 2 pots

  destination-pattern 9T

 

   port 1/1

!

!The dial-peer voip commands will handle the calls coming from the

pots !dial peers (PSTN). You can prefix a number ( 80 in this example)

and send the DID number ahead.

!

dial-peer voice 123 voip

  destination-pattern ....T

 prefix 80

  forward all

  session protocol sipv2

  session target ipv4: 10.1.30 .22

  dtmf-relay sip-notify

步骤6——测试配置,打出和接受通话

使用LCRUsing LCRLeast Cost Routes])

上面的配置是好的,如果你只有一些网关,那么路由通常是不用改变的。然而,大多数的SIP服务提供者会频繁的改变路由。除此之外,他们中的大多数都有很多的网关并且会链接到更大的VoIP服务提供商那里。如果每次路由发生改变,那么修改脚本是比较麻烦的。那么LCR模块就有用武之地了。它允许你可以将路由器和网关插入数据库并且可以动态的更改他们以适应你所需求的系统要求。

想象一下下面这种情况:你有两个大的服务商,一个在欧洲,一个在亚洲。现在,你想要将本地和长途通话送到你自己的网关,到荷兰,德国和法国的通话送到欧洲的服务提供商,到日本和澳大利亚的通话送到亚洲的服务提供商。如果亚洲的服务停了,那么要求能够将通话转向你自己的网关。

LCR模块(The LCR Module

LCR模块有两种应用功能。最重要的是将一个请求连续的前转到一个或多个网关(load_gws()next_gw())。这些函数用来将通话送到网关上,当然你也可以使用failure_routenext_gw()将故障转移到其他网关上。你可以给网关分配优先级以决定到底哪一个网关会被优先选择。

你也可以使用LCR模块中的load_contacts()next_contacts()函数前转基于q值的contacts

配置图表(Configuration Diagram

要实现上面的这幅图中的内容,我们需要了解三张表:lcrgwgw_grp

VoIP服务提供商拨号方案(VoIP Provider Dial Plan

是时候开始为我们的VoIP服务提供商仔细的作一份拨号方案的时候了。我们将实现E.164编号方案(numbering scheme),将通话送到正确的网关上。当客户拨打本地号码时,我们在使用load_gw()函数选择网关之前,先使用正则表达式将其号码转换成它们相应的E.164地址。除了订阅者,这个服务提供商不会接受其他用户的任何非E.164格式的号码。我们假设用户接口能够帮用户拨出E.164号码。


LCR表(The LCR Table

lcr表中,我们将实现路由。lcr的各个字段描述如下。本地通话和长途通话将以号码+1305作为前缀。



l        Prefix——这个前缀要和URIphone number)的用户部分(user part)相符合

l        From_uri——From_uri可能会包含需要匹配的URI。有时候当你想要用主叫用户信息来进行路由的时候使用这个字段。

l        Grp_id——Grp_id标识网关组(gateway group

l        Priority——网关优先级(Gateway priority

网关表(The Gateways Table



l         gw_name——网关名称(Gateway name)

l         grp_id——网关组标识(Gateway group identification

l         ip_addr——网关IP地址(IP address of the gateway(对于1.2.x一下的版本,使用反转的十进制记法))

l         port——(UDP/TCP端口)

l         uri_scheme——sip1),sips2

l         transport——udp1),tcp2),tls3

l         strip——删除的字符的数量

l         prefix——发往网关前应用的前缀

网关组表(The Gateway Groups Table

网关组表只是用来进行管理之用。与网关的名字息息相关。

添加,删除和显示LCR和网关(AddingRemovingand Showing LCR and Gateways

你可以使用openserctlSerMyAdmin来添加,删除,和吸纳是LCR表和网关表。你也可以手动进行该项工作。

|             如果你正使用OpenSer1.0.x1.1.x,需要观察,这个字段的            |

|             IP地址要是反转的十进制记法。                                                        |

要将IP地址转换成十进制反转记法。需要做如下计算:

l         IP Address=a.b.c.d

l         反转十进制记法的IP地址 = d*224+c*216+b*28+a

如果你不想计算,那么就使用openserctl工具。它对于所有的版本都工作良好。在OpenSER1.2.x版本中,你可以将IP地址以通常的十进制点记法的格式直接插入数据库。

Openserctl LCR相关的命令(Openserctl LCR-Related Commands


小贴士(Notes):

l         IP地址必须以点记法的格式键入,如 1.2.3 .4

l         <uri_scheme> <transport>必须以整数或文本的方式键入:

n         Transport ‘ 2’ 等同于 transport ‘tcp’

n         Scheme1=sip2=sipstransport1=udp2=tcp3=tls

例子(Examples):

lcr addgw_grp usa 1

lcr addgw level3 1.2.3 .4 5080 sip tcp 1

lcr addroute +1 ' ' 1 1

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1323) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值