ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FreeSWITCH NAT

2022-04-19 16:32:05  阅读:272  来源: 互联网

标签:UDP SIP IP RTP NAT FreeSWITCH


一、FreeSWITCH帮助终端穿越NAT

1、SIP穿越

FreeSWITCH默认使用acl来判断对方是否处于NAT环境中,配置如下:

// internal.xml
<param name="apply-nat-acl" value="nat.auto"/>

nat.auto是ACL,包含了RFC1918规定的私网地址,并去掉了本地网络地址。当SIP终端注册时,通过比较contact地址是否包含在此ACL中来判断该终端是否处于NAT背后,如果是那么它就把contact地址自动替换为SIP包的来源地址,后边的呼叫就可以正常抵达。

在实际工作当中,当局域网内架设另一个无法直接互通的子网时,信令无法正常抵达子网终端,那么就需要改为无论何种情况下都要使用的SIP包的来源地址作为用户的contact地址。

2、RTP穿越

NAT环境下SIP终端SDP信息中的IP地址是私网地址,因此freeSWITCH无法直接发送RTP包,而NAT设备基本只允许内网主机曾经接触过的外网主机发送的UDP数据包进入。FreeSWITCH使用了一个名为RTP自动调整的特性,SIP协商时给对方一个可用的公网RTP地址,然后等待客户端发送RTP包,一旦FreeSWITCH收到RTP包后,就可以根据对方发包的地址给它发RTP包了。此类情况发生时,log中可以看到类似的信息:

[INFO] switch_rtp.c:7268 Auto Changing audio port from 192.168.1.198:44978 to 61.51.110.204:44978
[DEBUG] switch_rtp.c:4137 Starting timer [soft] 160 bytes per 20ms
[INFO] switch_rtp.c:7268 Auto Changing audio port from 192.168.1.101:8074 to 61.51.110.204:8074

 注意:

      此办法存在安全性能问题,如某黑客向随机的RTP端口发送数据包,FreeSWITCH收到后将远端地址调整到黑客的IP和端口,进而RTP数据包全部发往新的IP地址。所以为了防止这个问题,FreeSWITCH规定这种端口调整只能在电话开始的时候进行,且仅支持一次调整。自动调整的功能默认时开启的。配置如下:

<param name="disable-rtp-auto-adjust" value="false"/>

或者针对个别的呼叫来禁用自动调整,在呼叫时设置通道变量rtp_auto_adjust=false来禁止。

二、FreeSWITCH处于NAT后面的解决方案

1、如果路由支持uPnP或者NAT-PMP协议

FreeSWITCH支持通过uPnP或NAT-PMP协议在路由器上“打洞”,打洞完成后就知道自己将要映射的外网地址了。前提是路由器支持uPnP功能并开通。FreeSWITCH配置如下:

//internal.xml external.xml 
<param name="ext-rtp-ip" value="auto-nat"/>
<param name="ext-sip-ip" value="auto-nat"/>

FreeSWITCH检测到NAT以后,设置Profile的外网SIP和RTPIP,通过命令可以查询Ext-SIP-IP和Ext-RTP-IP值,如下:

freeswitch@internal> sofia status profile internal  
========================================== Name internal Domain Name N/A Auto-NAT false DBName sofia_reg_internal Pres Hosts 172.16.5.40,172.16.5.40 Dialplan XML Context public Challenge Realm auto_from RTP-IP 172.116.5.40 Ext-RTP-IP 116.171.1.158 SIP-IP 172.116.5.40 Ext-SIP-IP 116.171.1.158

2、当路由不支持uPnP和NAT-PMP协议

需要手动设置,配置如下:

//internal.xml external.xml 假设116.171.1.158为外网映射地址
<param name="ext-rtp-ip" value="auto-nat"/>
<param name="ext-sip-ip" value="auto-nat"/>
修改为
<param name="ext-rtp-ip" value="116.171.1.158"/>
<param name="ext-sip-ip" value="116.171.1.158"/>

3、其他NAT穿透相关设置

开启rport功能

//internal.xml
<param name="NDLB-force-rport" value="true"/>

三、检查ACL参数,确定没有阻挡

此处做ACL控制,目前是全部放开,一旦发现可疑的攻击服务器的IP地址就需要加入到deny中阻止。

//autoload_configs/acl.conf.xml
<param name="acl.conf" description="Network Lists">

检查路由器上的IP端口映射,检查FreeSWITCH机器的安全策略,确认下面端口:

  • 1719  UDP H.323 Gatekeeper RAS port
  • 1720  TCP H.323 Call Signaling
  • 3478  UDP STUN service
  • 3479  UDP STUN service
  • 5002  TCP  MLP protocol server
  • 5003  UDP Neighborhood service
  • 5060  UDP & TCP SIP UAS  Used for SIP signaling (Standard SIP Port, for default Internal Profile)
  • 5070  UDP & TCP SIP UAS  Used for SIP signaling (For default "NAT" Profile)
  • 5080  UDP & TCP SIP UAS   Used for SIP signaling (For default "External" Profile)
  • 16384-32768  UDP RTP/ RTCP multimedia streaming  Used for audio/video data in SIP and other protocols
  • 5066  TCP Websocket Used for WebRTC
  • 7443 TCP  Websocket Used for WebRTC

标签:UDP,SIP,IP,RTP,NAT,FreeSWITCH
来源: https://www.cnblogs.com/zhongqifeng/p/16165411.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有