前言:

VoIP 刚推出之初期,受到各种因素之干扰,以致非常难用,需要经过繁复的设定才能使用。 最常见到的是某一边的使用者的电脑设定有问题导致单边没有声音,因此收话发话两端都必须是 电脑高手才能顺利进行双方通话。另外一个很大的限制是,收话发话两端都必须填入所用电脑的 IP地址, 才能让两方相连。对于在家中利用拨接或ADSL设备上网或在防火墙后面的使用者而言, 这是一项难以达成的任务,无论使用者或电脑本身都难以轻易获知其对外的IP位址。 这种现象一直等到Skype 推出之后才获得大幅改善,大大提高了 VoIP的可用度,使得一般的电脑使用者也可以很轻易的使用VoIP。即使使用者是在防火墙 之后,VoIP 也可以顺利运作,这是归功於「VoIP穿越NAT 防火墙」技术。

一、NAT以及防火墙介绍

NAT 是一种将内部IP 与外部IP互相转换之技术。其起源是因為 IPv4 位址稀少,而很多企业或网路公司在拥有少数IP 地址而公司内部确有太多电脑时 而采用共用IP 的解决方法,让一个IP 地址给多个电脑使用。如今最常见的 IP 分享器或无线区域网路Access Point 都有NAT 的功能。使用者利用 ADSL上网 后,拿到一个 IP 地址,而IP 分享器或WLAN AP 则将一组专供内部使用的私有IP , 通常是192.168.0.x,分配给所有内部电脑,内部每部电脑拥有一个192.168.0.x的IP 位址, 但WLAN AP 对外却只有一个由网路公司赋予的IP 位址。 通常NAT 是将每一部电脑所用的 (IP, port number), 本文称为内部位址,对应到 (共用IP, port number),本文称为外部位址,  而 NAT 负责将进出封包的表头进行转换使得内部电脑可以 透通的与外部网络连线沟通。

Firewall的基本策略: 
    Firewall会判断所有的包是来自内部(Inside)还是外部(Outside)。 
    允许所有来自inside的包发出去。 
    允许来自Outside的包发进来,但这个连接必须是由Inside发起的。 
    禁止所有连接由Outside发起的包发进来。 
    firewall会允许几个信任的outside主机,他们可以发起建立连接,并发包进来。

  所有NAT和Firewall都是对于TCP/IP层以下进行处理和过滤的,而SIP应用的地址是在应用层。所以必须采用其他的途径来解决这一问题。

解决方案
针对不同的NAT类型,可以有不同的解决方案。

防火墙/NAT的种类

防火墙通常整合在NAT 裡面,根据所用的防火墙技术,NAT 可以分成 几类。主要分为如下四类:

下面说的地址表明IP,位址表明IP和Port

1、Full Cone

只是单纯的做位址转换,并未对进出的封包设限。

当一台私网内的主机向公网发一个包,其本地地址和端口是{A:B},NAT会将其私有地址{A:B}转换成公网地址{X:Y}并绑定。任何包都可以通过地址{X:Y}送到该主机的{A:B}地址上,NAT会将任何发送到{X:Y}的incoming包的地址{X:Y}转换成{A:B}。

其原理及运作方式如下图所示:

图1:原理图

图2:示例图
​​​​

2、Restricted Cone

对于封包进出稍加限制。从内部送出之封包的目的地 IP 位址会被记住。只有这些曾经收过这些封包的地址可以送封包进入 NAT。由其他地址送进来的封包,都会被档下。换言之, 只有收过NAT 内部送来的封包的地址才能将封包送入 Restrict Cone NAT 内。

当一台私网内的主机向公网发一个包,其本地地址和端口是{A:B},NAT会将其私有地址{A:B}转换成公网地址{X:Y}并绑定。任何包都可以通过地址{X:Y}送到该主机的{A:B}地址上,但是,NAT只为第一个发往{X:Y}的包绑定成{A:B}|{X:Y}<->{C, any},其中{C:any}是那个包的源地址和任意端口。也就是说,只有来自地址为C的包才能于主机{A:B}通信。

其原理及运作方式如下图所示:

3、  Port Restricted Cone NAT

Port Restricted Cone 对于封包进出比Restricted Cone 增加了一个限制, 从内部送出之封包的目的地的IP 位址及 Port 会被记住。 由外部送进来的封包,除了由那些接收过内部所送出的封包的IP 位址及 Port 所送来的封包之外,都会被档下。换言之, 只有收过NAT 内部送来的封包的地址及 Port 才能将封包送入 Restrict Cone NAT 内。

和 Restricted Cone 的区别是 Restricted Cone 只绑定incoming packet 的IP地址,而Port Restricted Cone 会绑定incoming packet的IP地址和端口。

其原理及运作方式如下图所示:

4、  Symmetric

Symmetric 在四种Cone NAT中最为严谨。 前三种NAT在做位址转换时,无论封包是送往何处, NAT内部同一内部位址 都对应到同一个外部位址,但在Symmetric NAT内则每一内部位址对不同的目的地, 都对应到不同的外部位址。Symmetric NAT只允许先由私有网域内的使用者发送封包到网际网路中的使用者 可以回传封包。

随著网路安全的要求越来越高,使用此种NAT有越来越多的趋势。

当一台私网内的主机向公网发一个包,其本地地址和端口是{A:B},外部位址为{C, D}。NAT经过公网{X:Y}绑定后变为{A:B}|{X:Y}<->{C, D}。如果再发一个包,但是外部位址为{E, F},NAT会经过另外的公网{Q:P}绑定后变为{A:B}|{Q:P}<->{E, F}。

其原理及运作方式如下图所示:

NAT 造成的问题

SIP是在当今的网际网络里最常使用的VoIP通讯协议。 使用者端(CPE)所连接的Agent 称為 User Agent (UA), 使用者端所需的软体功能都建置在UA 中,  网路上并建置有各种伺服器,提供各式各样的服务, 共同建构出一个运作顺畅的电话网路。我们以SIP 为例说明NAT 防火墙 对VoIP通讯协议造成的问题。为方便说明起见,本文将以SIP作為范例说明 各种VoIP技术。
在SIP协议中,UA必须主动向registrars伺服器註册,让register伺服器掌握UA 动态。 要建立通话session时,发话端 UA 主动向 proxy servers 发送INVITE请求,proxy servers会转发 INVITE请求。 而这两种自防火墙外所发出的请求会被防火墙所阻挡。 所以为防止转发的INVITE请求会被阻挡,register 伺服器不能放在防火墙之内。但UA 就比较麻烦了,难免会有相当数量的VoIP使用者是位于防火墙之内的,他们可以不受干扰的主动发话向外连接。不过,他们却很难接收他人的呼叫。 换言之,如果没有适当的解决方案,位于防火墙之内的VoIP使用者,只能对外发话,却无法接受电话。

現有穿越防火墙/NAT技术介紹

Universal Plug and Play (UPnP,即插即用)

Universal Plug and Play(UPnP)是微软公司提出的协定,其目的是要简化家庭或企业中智慧设备的连网过程. 使用TCP/IP协定透过网路自动彼此连接在一起, 而且连接过程中无需用户的参与和使用中央伺服器, UPnP设备可以自动探索网路并配置网路地址设定。 其穿越NAT的方式如下:

1)VoIP应用程式先对是否位于一个具有UPnP能力的NAT设备进行检测。
2)应用程式将获得共用的Public IP地址及Port,為NAT做Signaling及media资讯流使用。  
3)VoIP使用端就可以将此资讯加入VoIP signaling建立通话。
此通话建立后,使用获得的外部位址(Public IP地址及Port),做点对点的传输。

问题:

NAT及VoIP Client (UA) 必须支援UPnP, 但UPnP尚未得到所有的UA及NAT的支援 (要获得全部UA及NAT厂商之支援,绝非易事)。 尤其是NAT的问题,基于安全性的考虑,几无NAT 愿意支援 UPnP。

STUN

STUN (Simple Traversal of UDP Through Network Address Translators - RFC 3489 ), 是最著名和最常被使用的VoIP穿越NAT防火墙的解决办法。应用程序(即STUN CLIENT)向NAT外的STUN SERVER通过UDP发送请求STUN 消息,STUN SERVER收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即STUN CLIENT在NAT上对应的外部端口。然后响应消息通过NAT发送给STUN CLIENT,STUN CLIENT通过响应消息体中的内容得知其NAT上的外部地址,并将其填入以后呼叫协议的UDP负载中,告知对端,本端的RTP接收地址和端口号为NAT 外部的地址和端口号。由于通过STUN协议已在NAT上预先建立媒体流的NAT映射表项,故媒体流可顺利穿越NAT。

方式如下:

a)         客户端A向STUN Port发送Binding请求(图中绿色部分)

b)        STUN服务器接收到客户端A的Binding请求,它能得到该请求的源地址与端口(该地址和端口就是经过NAT映射过的),将该地址和端口记为Server Reflexive Address。

c)         STUN服务器发送response响应,在response响应中携将Server Reflexive Address经过异或后填入XOR-MAPPED-ADDRESS属性。

d)         客户端A接受到STUN服务器的response后,就知道了自己的外网地址(反射地址,Server Reflexive Address)。

缺点:

STUN无法穿透Symmetric NAT, 而偏偏这种NAT已经成为NAT市场上的主流。

UA支持STUN CLIENT的功能

优点:

优点是无需现有NAT/FW设备做任何改动。可在多个NET串联的环境中使用

TURN

TURN方式解决NAT问题的思路与STUN相似,也是私网中的VOIP终端通过某种机制预先得公网上的服务地址(STUN方式得到的地址为出口NAT上外部地址,TURN方式得到地址为TURN Server上的公网地址),然后在报文净载中所要求的地址信息就直接填写该公网地址。

工作原理如下:

a)         客户端A向STUN Port发送Allocate请求(图中绿色部分)

 b)        STUN服务器接收到客户端A的Allocate请求,服务器一看是Allocate请求,则根据relay端口分配策略为A分配一个端口。

c)         服务器发送response成功响应。在该response中包含XOR-RELAYED-ADDRESS属性。该属性值就是A的relay端口的异或结果。

d)         客户端接收到response后,就知道了自己的relay地址。该relay地址是个公网地址,可以看作是客户端A在公网上的一个代理,任何想要联系A的客户       端,只要将数据发送到A的relay地址就可以了。

交互转发流程如下:

TURN的全称为Traversal Using Relay NAT,即通过Relay方式穿越NAT.TURN应用模型通过分配TURN Server的地址和端口作为私网中VOIP终端对外的接受地址和端口,即私网终端发出的报文都要经过TURN Server进行Relay转发。TURN Server控制分配地址和端口,能分配RTP/RTCP地址对(RTCP端口号为RTP端口号加1)作为私网终端用户的接受地址,避免了STUN方式中出口NAT对RTP/RTCP地址端口号的任意分配,使得客户端无法收到对端发来的RTCP报文(对端发RTCP报文时,目的端口号缺省按RTP端口号加 1发送)。

优点:

拥有STUN的所有优点,适用于所有NAT类型,包括Symmetric,支持基于TCP应用。

缺点:

需要VOIP终端支持TURN Client,所有报文都必须经过TURN Server转发,增大了包的延迟和丢包的可能性。大量转发会带来部署成本问题。

ALG (Application Layer gateway)

ALG可以是单独的连接于外网和内网之间的设备,也可以是内置于防火墙内的插件。当FW/NAT发现外网呼叫信令为SIP时,将其转发到ALG(应用层网关),通过ALG建立起内网伪地址终端与外网终端的通信连接。

经过NAT转换后,到外网SIP包中via,contact,ower/creator,connection information均需要改为NAT外网IP。

SIP ALG的实现主要是对Request、Response消息进行解析、修改、转发。

对Invite消息的修改

1)对Via、From、CALL-ID、Contact头域的处理

Via Via头域是被服务器插入request中,用来检查路由环的,并且可以使response根据via找到返回的路 Via: SIP/2.0/TCP user1pc.domain.com;branch=z9hG4bK776sgdkse
From 表示请求的发起者 From: sip:user1@domain.com;tag=49583
Call-ID 由本地设备(Client)生成,全局唯一,每次呼叫这个值唯一不变 Call-ID: asd88asd77a@1.2.3.4
Contact 包含源的URI信息,用来给响应方直接和源建立连接用 Contact: sip:192.168.100.1:1111

对SDP的修改,则是针对 ”o" "c" "m" 三个字段进行的

缺点:

使用ALG需要对现有设备升级改造。因为ALG 不能识别加密后的报文内容,所以必须保证报文采用明文传送,这使得报文在公网中传送时有很大的安全隐患。

MidCom(Middlebox Communications)

MIDCOM的基本框架是采用可信的第三方(MIDCOM Agent)对Middlebox (NAT/FW)进行控制,VOIP协议的识别不由Middlebox完成,而是由外部的MIDCOM Agent完成,因此VOIP使用的协议对Middlebox是透明的 .

由于识别应用协议的功能从Middlebox移到外部的MIDCOM Agent上,根据MIDCOM 的构,在不需要更改Middlebox基本特性的基础上,通过对MIDCOM Agent的升级就可以支持更多的新业务,这是相对NAT/ALG方式的一个很大的优势。

在VOIP实际应用中,Middlebox功能可驻留在NAT/Firewall,通过软交换设备(即MIDCOM Agent)对IP语音和视频协议(H323、SIP、MGCP/H248)的识别和对NAT/Firewall的控制,来完成VOIP应用穿越 NAT/Firewall .在安全性上,MIDCOM方式可支持控制报文的加密,可支持媒体流的加密,因此安全性比较高。

原文参考1链接:https://blog.csdn.net/hwz119/article/details/3995691

原文参考2链接:https://blog.csdn.net/iteye_11002/article/details/81995206

原文参考3链接:https://blog.csdn.net/tanningzhong/article/details/80595929

VOIP穿越防火墙详解相关推荐

  1. iptable 详解_最全的iptables防火墙详解.pdf

    最全的iptables防火墙详解 iptables / iptables / iippttaabblleess官方网站:hhttttpp::nneettffiilltteerr..oorrgg// • ...

  2. linux防火墙ddos,Linux iptables防火墙详解 + 配置抗DDOS***策略实战

    Linux iptables防火墙详解 + 配置抗DDOS***策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能. 在2.0内核中, ...

  3. iptables防火墙详解及使用layer7阻止qq,酷狗,等P2P软件

    iptables防火墙详解及使用layer7阻止qq,酷狗,等P2P软件   防火墙其实就是一个加固主机或者网络安全的一个设备或者软件而已,通过防火墙可以隔离风险区域与安全区域的连接,同时不会妨碍风险 ...

  4. Linux_IPtables防火墙详解

    目录 目录 Iptables Iptables结构 规则表 规则链 iptables指令用法详解 综合案例 SNAT 策略 DNAT 策略 Iptables规则的备份和还原 iptables 练习 I ...

  5. iptables防火墙详解

    iptables详解 2012-07-18 20:10:08 分类: LINUX 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪 ...

  6. linux防火墙端口配置策略路由,Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战...

    Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能. 在2.0内核中,防火墙操作工具叫:ipfwadm 在2.2内核中,防火墙操作工具叫:ipc ...

  7. Firewalld 防火墙详解

    文章目录 1. firewalld 是什么 2. 什么是动态防火墙 3. firewalld 和 iptables 之间的关系 4. firewalld 区域 4.1 firewalld 区域的概念 ...

  8. waf应用防火墙详解

    通过nginx配置文件抵御攻击 0x00 前言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并 ...

  9. Linux防火墙详解(二)

    1 2 3 4 5 6 一.iptables命令基本语法 二.iptables语法进阶 三.iptables显示扩展 四.iptables简单案例 五.iptables之forward 六.iptab ...

最新文章

  1. 第十六届智能车竞赛竞速组别网络报名说明
  2. 会话(cookie的使用,路径和Session的工作原理,使用)
  3. Oracle中的Rowid
  4. 怎么让电脑屏幕一直亮着_电视机指示灯亮不开机怎么办 电视机故障及维修介绍【详解】...
  5. 个人觉得好的文章链接推荐【转载,侵权立删】
  6. 【英语学习】【Level 08】U01 Let's Read L5 You're a wizard, Harry.
  7. SQLi LABS Less 25 联合注入+报错注入+布尔盲注
  8. 转载:camera - 滤镜格式 (原生RGGB、RCCB、RCCC、RGB-IR和Monochrome(单色传感器))
  9. Kali--社会工程学工具-social engineering toolkit(SET)
  10. mac磁盘工具合并分区_如何使用Mac的磁盘工具对驱动器进行分区,擦除,修复,还原和复制
  11. 学习之旅-计算语言学工作者需要了解的数学知识
  12. phoenix 安装以及开启后报错
  13. 基于easyTrader部署自动化交易(一)
  14. 动态图 vs 静态图
  15. BEA-090403 Authentication for user admin denied
  16. DPABI详细使用教材——数据准备、预处理流程、数据分析流程
  17. 面试之其他面试题归类
  18. c++学习记录(一)
  19. NameNode处理上报block块逻辑分析
  20. 天津职业技术师范大学计算机研究生,天津职业技术师范大学2021年硕士研究生招生各学院调剂系统开放时间...

热门文章

  1. 蓝桥 星期一 JAVA
  2. TWaver家族新成员 — Legolas工业自动化设计平台
  3. 基于Django框架的零食商城系统之Python毕设选题推荐
  4. java 调用打印机
  5. 以Transaction的生命周期为线索剖析Libra核心组件
  6. 中国土地市场网-js解密
  7. 重做日志文件(redo log file)
  8. 有趣的歌单昵称_好听的歌单名称
  9. 如何管理WiFi无线网络?
  10. 昨日关注:唐骏说盛大、微软、比尔盖茨及营销