fromuser host port qualify defaultip rtptimeout rtpholdtimeout sendrpid outboundproxy rfc2833compensate t38pt_usertpsource
contactpermit ; 限制主机注册地点。
Contactdeny ; 一个小窍门,作为一个SIP提供者在相同的IP地
; 址注册,呼叫自己,会被重定向到同一位置。
在Asterisk中对某个peer的类型分为3种:peer, user和friend,在asterisk中是这样解释的:
type=peer定义对方是一个服务提供者, 它允许你的Asterisk通过这里定义的服务商打电话;
而user则定义对方是你的一个客户端, 允许对方通过你的Asterisk打电话. friend就是两者兼有。
但type的真正意义在于Asterisk怎么去处理发往外部和来自外部的请求. 如果type是peer,有两层含义.
n 可以将对方作为一个SIP Service Provider, 允许你的Asterisk通过对方进行呼出.
n 如果对方在逻辑上是一个客户端, asterisk将根据传入的Invite请求来对对方进行身份验证, 但需要注意的是这里的验证不是通过username和secret, 而是通过对方的address和port. 这里分两种情况:
u 对方的address和port没有匹配到你在sip.conf中对任何一个peer的设置, 如果你的Asterisk允许匿名 呼入(allowguest=yes), 那么, 该呼入将被传到在sip.conf的general配置中的context上. 如果不允许匿名呼 入, 直接拒绝该呼入.
u 对方的address和port匹配到了任何一个sip.conf种的peer设置, 那么改呼入将被传到该peer指定的context上
Asterisk还提供了一个insecure参数来配置对peer呼入的身份验证方式. insecure=port|invite
n port: Asterisk忽略对方的port, 只根据对方的address来验证某个peer, Asterisk收到对方的Invite后, 会发送SIP/2.0 401 Unauthorized到对方, 要求对方发送认证信息, 但事实上对方返回回来的认证信息不会被真正使用.
n invite: Asterisk对初始Invite不进行验证. 这意味着Asterisk直接使用客户端传入的Invite包中的信息尝试进行验证而不会发送SIP/2.0 401 Unauthorized包到对方
type=user
根据来源Invite包中的用户和密码信息来认证,所以对方不能也不需要Register到你的Asterisk服务器上.
需要额外说明一点的是Register, 如果某个peer的host设置为dynamic, 那么Asterisk允许客户端通过Register的方式来告诉Asterisk对方的地址和端口.
特别注意:经网友证实,以上细节仅限于SIP协议,对于IAX协议,在IAX里那个from验证IP是没有用的,形同虚设,必需使用上面的两行代码 验证对方的IP才行,要没有这两行,任何的asterisk只要知道你的服务器的IP都可以通过你的asterisk进行呼出,如果需要杜绝这个隐患,需 要修改/etc/asterisk/manager.conf文件,增加类似下面的例句:
deny=0.0.0.0/0.0.0.0
permit=122.227.22.22/255.255.255.0
17. SIP代理例子 ;[sip_proxy]
仅用于呼入。使用代理的IP地址来匹配呼入,因为我们不能使用username (caller id)匹配。 type=peer context=from-fwd host=fwd.pulver.com
;[sip_proxy-out]
type=peer ; 仅想做外呼 secret=guessit
username=yourusername ; 外呼代理的认证用户
fromuser=yourusername ; 一些SIP 提供端(代理)需要该配置 fromdomain=provider.sip.domain host=box.provider.com
usereqphone=yes ; 这个代理的URI中需要;user=phone
call-limit=5 ; 允许同时5个外呼到这个peer,由于realtime的peer不存
; 储在内存中,所以realtime时不能强制使用Call-limits
outboundproxy=proxy.provider.domain ; 发送外呼信号到这个代理,而不是直接到peer
port=80 ; 需要连接到的远程的端口号,也可以使用defaultip 配 ; 置中的defaultport
18. SIP设备本地连接的定义
type = user ; a device that authenticates to us by \field to place calls
; 一个设备,使用from字段认证到服务器,发起呼叫。
type = peer ; a device we place calls to or that calls us and we match by host
; 服务器呼该该设备,或者设备呼叫服务器并且服务器使用host字段来匹配
type = friend ; two configurations (peer+user) in one ; 上面两个配置的和(peer+user)
设备名我们推荐使用字母(a-z), 数字 (0-9) 和下划线
本地呼叫,最常使用的是type=friend
如果你的电话只能单向听到声音,应该是NAT 配置的问题。如果asterisk在公网上,客户端在一个NAT设备内部,你必须配置nat,同时打开qualify=yes属性,保持nat连接处于开放状态。
19. 配置实例 ;[grandstream1]
type=friend
context=from-sip ; 呼叫进入拨号计划的位置
callerid=John Doe <1234> ; 全caller ID,来修改呼入电话的callerid信息 host=192.168.0.23 ; 有一个静态私有IP地址。允许非注册时使用。
nat=no ; 表示服务器和客户端之间没有NAT设备 canreinvite=yes ; 允许RTP数据流不经过服务器
dtmfmode=info ; either RFC2833 or INFO for the BudgeTone call-limit=1 ; 同一时刻在服务器和客户端之间只允许一个呼入和一个呼出
; 相当于是一个peer和一个user,加起来是一个friend。这也会影
; 响到订阅。由于没有friend的联合的呼叫计数器,所以当前没有 ; 办法在sip.conf中限制每个客户端的内呼或外呼的数量。可以在 ; 拨号计划中用组计数器来达到这个目的。
mailbox=1234@default ; 语音信箱1234,context \disallow=all ; 先要屏蔽掉所有的 allow=ulaw ; 再按使用顺序打开允许的 allow=alaw
allow=g723.1 ; Asterisk仅支持g723.1直通寄存器( pass-thru) allow=g729 ; 如果没有获得g729 许可,仅支持直通寄存器( pass-thru)
callingpres=allowed_passed_screen ; 设置显示caller ID,更多信息参考doc/callingpres.txt
;[xlite1]
关闭X-Lite的安静压缩 (\Silence\
注意,Xlite 发送NAT保活数据包,因此qualify=yes不是必须的。 type=friend
regexten=1234 ; 当他们注册时,创建extension 1234 callerid=\Smith\<5678>
host=dynamic ; 这个设备必须注册才能使用 nat=yes ; X-Lite在一个NAT路由器后边
canreinvite=no ; 如果使用了NAT,该项须设为NO,使媒体流经过服务器 disallow=all
allow=gsm ; GSM比ulaw消耗带宽小 allow=ulaw