过NAT的SIP通信环境搭建
环境说明
最近需要搭建一个内外网sip通信的环境,大概拓扑如下:
client1和SIP server都在内网,client2在外网,三者都经过防火墙做NAT,防火墙会开启ALG功能,内外网互相访问使用过NAT的公网IP,内网访问使用私网IP。
使用软件
- SIP server使用opensips
- client1 和client2使用eyeBeam和EasySip,对于不同sip客户端以后会具体说明
实现功能
- 内外网client之间能够正常打电话
- client1和client2之间的sip 通话控制连接由sever代理client1与client2实现,通话数据传输由client1和client2之间实现
- client1和client2之间的通话数据由RTP传输
环境配置
- 搭建opensips server + RTPproxy环境
opensips server搭建可以参考https://blog.csdn.net/smileyan9/article/details/86092036
rtpproxy 安装可以参考 https://blog.csdn.net/fg4215828/article/details/60869396
需要注意的是osipsconfig安装需要安装USE_NAT和ENABLE_TCP
安装过程有报错可以通过tail /var/log/messages查看
附使用的opensips.cfg的关键配置
alias=172.30.1.32listen=udp:10.226.6.1:5060
listen=tcp:10.226.6.1:5060#### NAT modules
loadmodule "nathelper.so"
modparam("nathelper", "natping_interval", 10)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "sipping_bflag", "SIP_PING_FLAG")
modparam("nathelper", "sipping_from", "sip:pinger@10.226.6.1")
modparam("nathelper", "received_avp", "$avp(i:42)")loadmodule "rtpproxy.so"
modparam("rtpproxy", "rtpproxy_sock", "udp:10.226.6.1:12221")
loadmodule "proto_udp.so"
loadmodule "proto_tcp.so"
开启RTP
rtpproxy -A 172.30.1.32 -l 10.226.6.1 -s udp:localhost:12221 -F
rtpproxy -A 172.30.1.32 -l 10.226.6.1 -s udp:localhost:12222 -Fopensips常用指令
opensipsctl start/stop/restart 开启/关闭/重启服务
opensipsctl ul show 查看online的用户
opensipsctl ul rm [] 删除用户
[root@localhost ~]# opensipsctl ul show
Domain:: location hash_size=512AOR:: 8002Contact:: sip:8002@10.128.18.30:61733;transport=udp Q=ContactID:: 417216284229585379Expires:: 271548Callid:: 83156025-0103-7252-b1df-bfb99aab6af8Cseq:: 31118User-agent:: JdMee/v1.0.58.550State:: CS_SYNCFlags:: 0Cflags:: NATSocket:: udp:10.226.6.1:5060Methods:: 7535AOR:: 8001Contact:: sip:8001@10.226.6.6:57098;transport=udp Q=ContactID:: 417427390462002824Expires:: 259073Callid:: 56e11dbe-af8e-2291-add8-ffccdede2435Cseq:: 2509User-agent:: JdMee/v1.0.58.550State:: CS_SYNCFlags:: 0Cflags:: NATSocket:: udp:10.226.6.1:5060Methods:: 7535
- client 1和client2能够注册到sip server
需要使用拨号的号码和密码,外网client注册的server ip是过NAT的公网IP,内网client注册使用server ip的私网IP
8001 为client1
8002 为client2
使用EasySIP
使用eyeBeam
需要注意的是本地实验环境在虚拟PC上,没有声卡,有些sip客户端需要声卡才能使用,拨通后会显示正在连接却没有RTP数据。
本地测试,用EasySip拨打,eyeBeam接收会有RTP数据。
实验结果
内呼外,client1拨打client2
实现过程
client1与server控制连接协商
INVITE报文携带message body,携带了client1的私网IP,以及client1进行数据通信的端口13328
200 OK携带message body,connection information为client2过NAT后的公网IP,以及client2进行数据通信的端口52344
client2与server控制连接协商
client2端抓包
INVITE报文携带message body,connection information为client1过NAT后的公网IP,以及client1进行数据通信的端口13328
200 OK携带message body,connection information为client2私网IP,以及client2进行数据通信的端口52344
client1端数据抓包
client2端数据抓包
可以看到client1和client2的数据连接在过防火墙之前都是私网IP,过防火墙后转换为各自的公网IP。数据RTP访问的就是对应200OK和INVITE报文中携带的公网IP和端口。
外呼内,client2拨打client1
实现过程:
client2端控制连接抓包
INVITE报文携带message body,携带了client2的私网IP,以及client2进行数据通信的端口17210
200 OK携带message body,connection information为client1过NAT后的公网IP,以及client1进行数据通信的端口53246
client1端控制连接抓包
INVITE报文携带message body,携带了client2过NAT后的公网IP,以及client2进行数据通信的端口17210
200 OK携带message body,connection information为client1私网IP,以及client1进行数据通信的端口53246
client1端数据抓包
client2端数据抓包
可以看到client1和client2的数据连接在过防火墙之前都是私网IP,过防火墙后转换为各自的公网IP。数据RTP访问的就是对应200OK和INVITE报文中携带的公网IP和端口。
这种环境影响因素很多,比如:受客户端影响,受防火墙ALG功能影响。
不同客户端对过NAT处理会不相同,本地测试遇到过,由于是双网卡PC,使用Blink客户端软件,控制连接正常,但是message body中带的ip不是自己网卡控制连接的ip,变成PC管理网卡的IP,导致传输数据从另外一块网卡出去了-_-!!!
不同防火墙ALG对SIP的处理不同,这个就不具体说了。
过NAT的SIP通信环境搭建相关推荐
- 1.Hadoop初步环境搭建(ssh无密码通信)
一.初步环境搭建 1在Windows 7上安装VMware虚拟机(VMware-workstation-full-9.0.2),VMware Workstation下载地址: https://my.v ...
- Davinci DM6446 Codec Engine双核通信环境的搭建
根据前几篇文章,一个DM6446的系统已经架构完成.但是有很多人都喜欢TI的机制,毕竟双核软件开发对很多工程师来说是非常麻烦的事情,既然TI提供开发套件和开发包,那么直接做OEM就可以了,底层的东西不 ...
- EC600 QuecPython开发环境搭建、固件下载,最方便的OpenCPU物联网4G通信解决方案
EC600 QuecPython 官方资源汇总 开发环境搭建 1.安装windows驱动 2.验证模组的固件版本 3.烧录QuecPython固件 小试QuecPython 1.查看系统信息 2.点亮 ...
- VRP远程管理(华为设备telnet登录密码配置与测试环境搭建)——在物理机上创建回环网卡及eNSP模拟器与物理机实现连接通信
目录 一.在网络连通的情况下,开启telnet服务 二.用户认证配置 1. 密码认证模式 2. aaa认证模式 三.eNSP模拟器telnet测试环境搭建 1.在物理机上创建回环网卡及IP地址配置 2 ...
- webrtc的DEMO环境搭建
Webrtc 介绍与Demo环境搭建 一,webrtc的基本介绍 WebRTC是一个开源项目,提供简单的JavaScript接口以实现浏览器的实时通信(RTC).与普通的客户端与服务器之间的即时通信不 ...
- 基于docker的 Hyperledger Fabric 多机环境搭建(上)
环境:ubuntu 16.04 Docker 17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...
- 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析
嵌入式linux开发环境搭建--VirtualBox虚拟机网络环境解析 本博文转自:Pandoras Box http://blog.csdn.net/yxc135/article/details/8 ...
- LVS负载均衡群集部署之——NAT模式的介绍及搭建步骤
文章目录 一.企业群集应用概述 1.1 群集的三种类型 1 负载均衡群集 2 高可用群集 3 高性能运算群集 1.2 负载均衡结构 1.3 负载均衡群集工作模式 (1) NAT模式--地址转换 (2) ...
- 大数据 -- Hadoop集群环境搭建
首先我们来认识一下HDFS, HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.它其实是将一个大文件分成若干块保存在不同服务器的多个节点中.通过联网 ...
最新文章
- [C# Control] 仿RAR式进度条 (RarProgressBar)
- rockemq 发送延迟消息_RocketMQ系列(五)广播与延迟消息
- idea maven 出现:Try-with-resources are not supported at language level ‘5‘
- Myeclipse下Maven的配置
- 计算机技能测试题九,计算机技能培训后人人过关测试试题九
- 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。...
- 突破次元壁障,Python爬虫获取二次元女友
- python系列教程_python基础学习系列教程2-进阶之路中绕不开的知识点。
- 二叉树的递归与非递归
- 集成腾讯信鸽推送遇到的大坑
- 关于计算机的好处的英语作文,关于电脑好处的英语作文
- 自己的应用跳转到应用宝评分界面
- LabVIEW字符串中显示多种字体
- java 有意思面试题_一道有趣的Java面试题
- 计算机的发明是现代科学的奇迹之一翻译,2017年6月英语六级翻译每日一练:塑料旧法新用...
- 中国人最需要的“基础文明”有三项
- go go wagon! wagon go!
- 复杂的构造 有趣的原理
- 微表面模型GGX/Trowbridge-Reitz概率密度函数的推导
- 抖音小店无货源怎么发货?我们常用什么方法?具体怎么操作?
热门文章
- elasticsearch ik pingyin 分词器的安装和使用
- LKDHelper使用LKDBHelper以实体类对象进行数据库的操作,例如新建一个新闻实体类,以这个类来
- LaTex命令和环境的定义与重定义
- hse是什么意思的缩写_什么是HSE? HSE是什么?
- Windows下设置任意窗口总在最前面不被遮挡的方法
- 【图像识别】基于matlab实现步态周期检测与步态角度特征
- 运筹学知识:决策分析技术-乐观准则,悲观准则,后悔准则
- 学校等企事业单位通配符证书,通配符ov证书,泛域名ssl证书,ov通配符ssl证书
- java_TCP/UDP整合
- 西门子服务器提升抱闸信号不输出,西门子V90伺服调试工程师不可不知的一些事儿...