我是靠谱客的博主 细心绿草,最近开发中收集的这篇文章主要介绍NAT SIP helper-2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

NAT SIP测试拓扑如下:

              |-------------------------|
 60.1.1.2 ----| 60.1.1.1                |
              |                         | 
              |           192.168.1.127 |------- 192.168.1.109
              |                         |
 50.1.1.2 ----| 50.1.1.1                |
              |-------------------------|

配置如下,由于客户端50.1.1.2(SIP账号1002)和60.1.1.2(SIP账号1001)都是通过SIP服务器192.168.1.109进行信令通信,而不是两者直接通信,所以sip_direct_media设置为零,指明媒体流量并不是在交互信令的两端建立。配置如下:

# ip addr add 50.1.1.1/24 dev enp9s0
# ip addr add 60.1.1.1/24 dev enp10s0
#
# echo 1 >  /proc/sys/net/ipv4/ip_forward
#
# modprobe nf_conntrack_sip sip_direct_media=0
# modprobe nf_nat_sip
#
# iptables -t nat -A POSTROUTING -s 50.1.1.2 -o enp6s0 -j SNAT --to-source 192.168.1.127
# iptables -t nat -A POSTROUTING -s 60.1.1.2 -o enp6s0 -j SNAT --to-source 192.168.1.127
#
# iptables -A PREROUTING -t raw -p udp --dport 5060 -j CT --helper sip

SIP信令expect

当两个客户端注册之后,生成如下的两个expect。其中目的端口为58701的expect为客户端50.1.1.2所创建;端口号为49768的expect为客户端60.1.1.2所创建。

# conntrack -L expect
545 proto=17 src=192.168.1.109 dst=192.168.1.127 sport=0 dport=58701 mask-src=255.255.255.255 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=50.1.1.2 master-dst=192.168.1.109 sport=58701 dport=5060 PERMANENT class=0 helper=sip
230 proto=17 src=192.168.1.109 dst=192.168.1.127 sport=0 dport=49768 mask-src=255.255.255.255 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=60.1.1.2 master-dst=192.168.1.109 sport=49768 dport=5060 PERMANENT class=0 helper=sip

如下为两个expect的主连接跟踪:

# conntrack -L
udp      17 3588 src=50.1.1.2 dst=192.168.1.109 sport=58701 dport=5060 src=192.168.1.109 dst=192.168.1.127 sport=5060 dport=58701 [ASSURED] mark=0 helper=sip use=2
udp      17 3594 src=60.1.1.2 dst=192.168.1.109 sport=49768 dport=5060 src=192.168.1.109 dst=192.168.1.127 sport=5060 dport=49768 [ASSURED] mark=0 helper=sip use=3

SIP媒体流量expect

如下为客户端60.1.1.2(1001)呼叫50.1.1.2(1002)建立的expect,首先当INVITE信令由60.1.1.2发往服务器192.168.1.109时,通告媒体地址:192.168.1.127:27694,创建前两条expect,以便到达192.168.1.127:27694的媒体流量可以通过,之后目的地址经过NAT转换还原为60.1.1.2:27694。

其次,当SIP服务器转发INVITE信令到50.1.1.2时,通告的媒体地址为:192.168.1.127:27694。NAT网关再次接收到此INVITE信令时,使用此媒体地址创建expect,但是此时发现expect已经存在(第一条expect),表明两个客户端可通过NAT网关直接通信。由于已经存在的第一条expect的原始地址为60.1.1.2,所以创建直连的expect,即第三条expect,这样客户端50.1.1.2可直接发送媒体流量到客户端60.1.1.2。详见内核函数set_expected_rtp_rtcp。

# conntrack -E expect
    [NEW] 180 proto=17 src=0.0.0.0 dst=192.168.1.127 sport=0 dport=27694 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=60.1.1.2 master-dst=192.168.1.109 sport=49768 dport=5060 class=1 helper=sip
    [NEW] 180 proto=17 src=0.0.0.0 dst=192.168.1.127 sport=0 dport=27695 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=60.1.1.2 master-dst=192.168.1.109 sport=49768 dport=5060 class=1 helper=sip
	
    [NEW] 180 proto=17 src=0.0.0.0 dst=60.1.1.2 sport=0 dport=27694 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=50.1.1.2 master-dst=192.168.1.109 sport=58701 dport=5060 class=1 helper=sip
    [NEW] 180 proto=17 src=0.0.0.0 dst=60.1.1.2 sport=0 dport=27695 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=50.1.1.2 master-dst=192.168.1.109 sport=58701 dport=5060 class=1 helper=sip

当客户端50.1.1.2回复SIP服务器的呼叫请求时,INVITE响应信令通告媒体地址:50.1.1.2:31810,经过NAT网关之后,修改为:192.168.1.127:31810,创建如下的第一条媒体类型expect。以便媒体流量可到达此地址。

当SIP服务器转发此INVITE响应信令时,通告的媒体地址:192.168.1.127:31810。NAT网关再次接收到此INVITE响应信令时,使用此媒体地址创建expect,但是此时发现expect已经存在(以下第一条expect),表明两个客户端可通过NAT网关直接通信。由于已经存在的第一条expect的原始地址为50.1.1.2,所以创建直连的expect,即第三条expect,这样客户端60.1.1.2可直接发送媒体流量到客户端50.1.1.2。详见内核函数set_expected_rtp_rtcp。

# conntrack -E expect
    [NEW] 180 proto=17 src=0.0.0.0 dst=192.168.1.127 sport=0 dport=31810 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=50.1.1.2 master-dst=192.168.1.109 sport=58701 dport=5060 class=1 helper=sip
    [NEW] 180 proto=17 src=0.0.0.0 dst=192.168.1.127 sport=0 dport=31811 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=50.1.1.2 master-dst=192.168.1.109 sport=58701 dport=5060 class=1 helper=sip
	
    [NEW] 180 proto=17 src=0.0.0.0 dst=50.1.1.2 sport=0 dport=31810 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=60.1.1.2 master-dst=192.168.1.109 sport=49768 dport=5060 class=1 helper=sip
    [NEW] 180 proto=17 src=0.0.0.0 dst=50.1.1.2 sport=0 dport=31811 mask-src=0.0.0.0 mask-dst=255.255.255.255 sport=0 dport=65535 master-src=60.1.1.2 master-dst=192.168.1.109 sport=49768 dport=5060 class=1 helper=sip

如下可见RTP/RTCP协议通信报文:

在这里插入图片描述

最后

以上就是细心绿草为你收集整理的NAT SIP helper-2的全部内容,希望文章能够帮你解决NAT SIP helper-2所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部