FreeSwitch Nat穿透

NAT的种类:Full Cone NAT(全锥型NAT)、Restricted Cone NAT(限制锥型NAT)、Port Restricted Cone NAT(端口限制锥型)、Symmetric NAT(对称型NAT)。

FreeSWITCH帮助终端穿越NAT的解决方案:

1、SIP穿越

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

<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:4753 Auto Changeing port from 192.168.1.100:50496 to 1.2.3.4:50496

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

自动调整的功能默认是开启的,可在Profile中禁用:

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

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

SIP终端自己的解决方案

1、STUN服务

STUN的原理是:在公网上部署一个STUN服务器,位于NAT后面的客户端设备向它发送一系列的UDP包先在NAT设备上“打洞”,STUN服务器取到UDP包的来源地址后,回送相关的消息告诉该客户端它被映射的外网地址。

大多数的SIP话机及软电话均可以选择是否启用STUN服务。使用STUN后,SIP消息的contact头域中就可以直接填入外网地址。

注意:STUN服务对于锥形NAT是有效的,但对于对称型NAT就无能为力了。简单讲就是SIP终端从STUN服务学习到的IP及端口会失效,如果两个SIP终端分别处于两个对称型NAT之后,则它们是无法进行通信的。

2、ICE

综合利用STUN和TURN(使用转发方式进行穿越的NAT,主要用来解决对称型NAT的问题,FreeSWITCH不支持该技术,但支持与TURN的SIP客户端配合工作)等技术,使之在最合适的情况下工作。比如,如果两个SIP终端处于相同的NAT后面,则他们可以直接用内网地址进行通信;如果位于不同的NAT后面,并且是锥型NAT,则选择从STUN服务器获得外网地址进行通信;如果是对称型NAT,则只能通过TURN来通信。

FreeSWITCH处于NAT后面的解决方案

1、uPnp

FreeSWITCH支持通过uPnP或NAT-PMP协议在路由器上“打洞”,打洞完成后就知道自己将要映射的外网地址了,前提是路由器支持uPnp功能并开通。FreeSWITCH检测到NAT以后,设置Profile的外网SIP和RTP的IP,通过命令 [email protected]>sofia status profile external 可查询Ext-SIP-IP和Ext-RTP-IP的值。

自动检测NAT的配置在external.xml中:

<param name="ext-rtp-ip" value="auto-nat"/>

<param name="ext-sip-ip" value="auto-nat"/>

2、STUN服务

如果路由器不支持uPnp及NAT-PMP协议,那么可将上述配置改为:

<param name="ext-rtp-ip" value="stun:stunserver.org"/>

<param name="ext-sip-ip" value="stun:stunserver.org"/>

使用命令 freeswitch>stun stunserver.org 可检测该服务是否有效。

3、手动设置

手动找出路由器的外网IP地址后,以下两种方法都可设置:

<param name="ext-sip-ip" value="autonat:1.2.3.4"/>

<param name="ext-rtp-ip" value="autonat:1.2.3.4"/>

或者

<param name="ext-sip-ip" value="1.2.3.4"/>

<param name="ext-rtp-ip" value="1.2.3.4"/>

4、DNS服务器

部署DNS服务器,如host:sip.sword.com,通过域名解析获得外网的IP地址。

此方法的好处是,外网和内网的SIP终端用户都可以通过域名注册,如果有移动办公的用户,就不用经常更换内网地址或外网地址注册了。

时间: 2024-11-25 14:23:57

FreeSwitch Nat穿透的相关文章

NAT穿透技术

在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet.很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转.由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信.这种技术通常称为NAT穿透(NAT Traversal).最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议. STUN,首先在RFC

WebRTC中NAT穿透浅析

说NAT穿透之前先说几个关于WebRTC的概念,可能之前有跟作者一样对WebRTC概念理解错误的同学.. WebRTC(网络实时通信)它是一个支持网页浏览器进行实时语音对话或视频对话的技术,它为我们提供了视频会议的核心技术,包括音视频的采集.编解码.网络传输.显示等功能,并且还支持跨平台:windows,linux,mac,android,iOS. 1.WebRTC的实现原理 webRTC是基于P2P的网络通信,可能有同学不太了解P2P是什么,在此简单解释一下 P2P就是点对点的通信. 下面就拿

(转)NAT与NAT穿透 原理

原文:http://blog.csdn.net/ustcgy/article/details/5655050 5. NAT穿透5.1 转发     最可靠但又是最低效的点对点通信方法,莫过于将p2p网络通信看作一个C/S结构,通过服务器来转发信息.如下图,两个客户端A和B,均与服务器S初始化了一个TCP或UDP连接,服务器S具有公网固定IP地址,两个客户端分布在不同的私网中,这样,他们各自的NAT代理服务器将不允许他们进行直连.                                  

网络 解决外网与内网或内网之间的通信,NAT穿透

在网络编码中会发现程序在局域网中是可以适用的,但是在外网与内网之间和内网与内网之间就不可行.问题就在于NAT.首先介绍下NAT. NAT的作用NAT(Network Address Translator),网络地址转换.顾名思义,它是一种把内部私有网络IP地址翻译成公有网络IP地址的技术,如图5-1所示.NAT是在IP地址日益缺乏的情况下产生的,它的主要目的是使地址能够重用[9].  图5-1 NAT模型  IP地址分为五类:A类,B类,C类,D类,E类(这里不考虑保留的IP地址).A.B.C类

NAT穿透进行P2P文件传输

实现一个简单的p2p文件传输,主要解决NAT穿透问题,使用tcp协议传输. NAT背景介绍 简介 NAT(Network Address Translation ,网络地址转换) 是一种广泛应用的解决IP 短缺的有效方法, NAT 将内网地址转和端口号换成合法的公网地址和端口号,建立一个会话,与公网主机进行通信. NAT 不仅实现地址转换,同时还起到防火墙的作用,隐藏内部网络的拓扑结构,保护内部主机. NAT 不仅完美地解决了 lP 地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并

NAT与NAT穿透(二)

5. NAT穿透 5.1 转发 最可靠但又是最低效的点对点通信方法,莫过于将p2p网络通信看作一个C/S结构,通过服务器来转发信息.如下图,两个客户端A和B,均与服务器S初始化了一个TCP或UDP连接,服务器S具有公网固定IP地址,两个客户端分布在不同的私网中,这样,他们各自的NAT代理服务器将不允许他们进行直连. Server S | | +----------------------+----------------------+ |                             

NAT穿透的详细讲解及分析

原文地址:http://bbs.pediy.com/thread-131961.htm 一.什么是NAT?为什么要使用NAT?NAT是将私有地址转换为合法IP地址的技术,通俗的讲就是将内网与内网通信时怎么将内网私有IP地址转换为可在网络中传播的合法IP地址.NAT的出现完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机.  二.NAT的分类    STUN标准中,根据内部终端的地址(LocalIP:LocalPort)到NAT出口的公网地址(Pub

NAT穿透的方式

目前主要的NAT类型有如下几种: 1)Full-cone NAT, also known as one-to-one NAT 一旦一个内网地址 (iAddr:iPort) 被映射到一个外部地址 (eAddr:ePort), 来自 iAddr:iPort 的任何数据包将通过 eAddr:ePort 发送. 任何外部主机能够通过eAddr:ePort这个地址发送数据包到iAddr:iPort. 2)Address-restricted-cone NAT 一旦一个内网地址 (iAddr:iPort)

PJNATH介绍 -- 开源的用于NAT穿透的ICE, STUN和TURN

原文地址:http://blog.pjsip.org/2007/04/06/introducing-pjnath-open-source-ice-stun-and-turn/ ICE是什么? 对于那些不熟悉ICE的人而言,ICE可能是一种最全面的用于穿透NAT和多媒体通信的方法.它提供了一种找到两个终端之间最好路径的方法,它还解决了NAT所带来的各种各样的问题,比如两个终端处在同一个NAT后面(and no hairpin is available),两个终端都处在对称NAT后面(在这种情况下,