IAD voice数据走voice APN修改说明

原创 2015年07月08日 17:34:44


1.背景说明:

IAD是下挂在CPE的LAN口上的语音网关设备,CPE支持双APN,DATA APN是默认APN;VOICE APN专用于语音,VOICE APN需要配置才能生效。在配置VOICE APN的情况下所有本板语音数据和CPE下挂的IAD上的语音数据都要走此语音专用APN。由于CPE上的默认路由接口是DATA APN,因此要对IAD上的语音数据进行路由的处理,这需要三步来完成,第一步是在CPE上对IAD的语音数据里进行识别和标记,第二步是对标记数据进行策略路由,第三步是对数据进行伪装。

2.实现步骤

第一步:对CPE下挂IAD的语音数据进行标记

对下挂IAD的语音数据进行MARK,我们可能通过iptables的连接跟踪nf_conntrack进行,在此我们使用0xf000来对IAD数据进行MARK。
#define MARK_FROM_IAD 0x1000
#define MASK_FROM_IAD 0xf000
iptables -t mangle PREROUTING ... -j MARK --mark-set MARK_FROM_IAD/MASK_FROM_IAD
由于IAD相关协议比较复杂,如何识别IAD数据比较复杂,后面专门说一下如何标记IAD语音数据包。

第二步:对带有IAD MARK的数据进行策略路由

ip rule add fwmark "$MARK_FROM_IAD" table VoicePdn

第三步:对IAD语音数据进行MASQUERADE

由于IAD下挂在CPE的LAN口上,VOIP服务器在大网上,为了正常通讯,需要对IAD数据进行伪装
iptables -t nat -A POSTROUTING -s "$lan_ip"/"$lan_netmask" -o eth_voip -j MASQUERADE

3.如何识别从IAD上来的语音数据包

IAD的相关协议比较复杂,先通过SIP协议建立SIP控制会话,它通过SIP数据包中数据域中携带RTP的端口信息,供服务口打开其他的端口进行语音数据传输(建立RTP/RTCP连接),因为这些连接在建立时的磋商信息都在协议数据包的数据域内,而不是在可分析的协议头里。这样我们很难通过数据包头中的端口进行识别,这就使得连接跟踪机制很难正确地跟踪它们。解决的办法是为连接跟踪模块增加一个特殊的SIP helper,以便能检测到SIP相关连的所有数据包,这样,那些从SIP服务器到客户机的连接就可以被跟踪了。
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark --nfmask MASK_FROM_IAD --ctmask MASK_FROM_IAD
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -m helper --helper sip -j MARK --set-mark
iptables -t mangle -A PREROUTING -m state --state NEW -j CONNMARK --save-mark --mask MASK_FROM_IAD
nf_conntrack的MARK分为两种,一种是连接的标记(CONNMARK),有效范围是的整条连接;另外一种是数据包的标记(MARK),针对的是单个数据包。上面第一条指令是将连接MARK保存的数据包上,第二条指令是将新收到的SIP数据包进行MARK,第三条是将数据包上MARK保存到连接上。

版权声明:本文为博主原创文章,未经博主允许不得转载。

voice後台數據結構

  • 2010年11月17日 09:09
  • 42KB
  • 下载

Voice VLAN介绍及其配置

Voice VLAN介绍及其配置  Understanding Voice VLAN The voice VLAN feature enables access p...
  • achejq
  • achejq
  • 2011年01月05日 21:35
  • 2331

保留申请的 Google Voice 号码

Google Voice 是由 Google 推出的 VOIP 服务,其初衷是将个人所用的众多电话号码集中成为一个号码,并且提供更多增值服务。通过申请 Google Voice 可以得到一个美国电话号...
  • xhhjin
  • xhhjin
  • 2017年03月10日 20:30
  • 4806

Android 语音识别+语音搜索源码 Voice Search

1、判断是否已安装语音搜索功能 package com.voice.search;      import java.io.File;   import java.io.FileOutputSt...
  • sc52086
  • sc52086
  • 2016年02月26日 00:02
  • 244

Libjingle - Google Talk Voice及 P2P 的交互操作函数库

Libjingle是Google提供的C++组件集,它为Google Talk的点对点通讯与语音视频呼叫功能提供交互操作性。     组件包包括了Jingle和Jingle-Audio的googl...

Interactive Voice Respond IVR 交互式语音应答系统

Interactive Voice Respond IVR 交互式语音应答系统 IVR(Interactive Voice Respond,交互式语音应答系统/自动语音应答系统)又叫做VRU (Vo...

Android 利用 Voice Search语音接口 进行语音识别结果太不准

公司最近在做语音识别的项目,但是又要求要录音,纠结了很久,后来发现谷歌的借口了,但是去识别不准。唉。。。。直接上代码大神们帮我看看吧,小弟在此谢过了。  public class MainActiv...

如何申请google voice免费美国电话

Google Voice可以使你创造一个独立的电话号码,通过该号码来管理你所有的手机号码、电话号码、语音邮件、短信等等。 有了Google Voice,你可以免费拔打美国与加拿大的所有电话,免费发送短...

[洪流学堂]Hololens开发高级篇3:语音(Voice)

本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月8日 本文内容提要 设计语音命令并针对Hololens语音引擎优化 让用...

使用VOICE_CALL在Android5.0之后闪退bug源码解析

使用VOICE_CALL在Android5.0之后闪退bug源码解析
  • tream0
  • tream0
  • 2017年03月29日 20:00
  • 687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IAD voice数据走voice APN修改说明
举报原因:
原因补充:

(最多只允许输入30个字)