关闭

IAD voice数据走voice APN修改说明

标签: IAD VOIP sip helperiptables
139人阅读 评论(0) 收藏 举报


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保存到连接上。

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:211次
    • 积分:21
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档