当前位置: 首页 > 编程日记 > 正文

搭建turnserver

参考文件:

http://blog.csdn.net/kl222/article/details/20145423

为什么要搭建TURN服务器?

因为我们编写的sip客户端再和南瑞的sip服务器进行通信的时候,中间经过一个安全平台,这个安全平台具有NAT和防火墙功能。RTP和RTCP包传递不了。所以要增加一个TURN服务器。同时在sip客户端侧要实现TURN客户端功能。

搭建TURN服务器的步骤:

要安装两个软件 libConfuse和TURN server

1,下载

别人说通过svn和git方式下载,但是这个地址都下载不下来,提示地址错误。我是在windows下访问下面的两个网站,直接下载的文件。

官网:http://turnserver.sourceforge.net/

官网: http://www.nongnu.org/confuse/

下载的两个文件如下:

confuse-2.7.tar.gz

turnserver-0.7.3.tar.bz2

2,传输

我在windows下面使用的是xshell,  配置xshell下面的ZMODEM的上传和下载目录,就可以使用rz命令向CentOS主机传输文件了。

我是在根目录下创建了一个turnserver目录。

mkdir turnserver

3,解压

tar -xzvf confuse-2.7.tar.gz

tar -jxvf turnserver-0.7.3.tar.bz2

解压后的目录如下:

4,编译安装confuse-2.7

cd confuse-2.7./configure //这里不要指定目录,使用默认目录进行安装。默认是安装在/usr/local目录下面。makesudo make install

没有报错,安装成功。

5,编译安装turnserver-0.7.3

cd turnserver-0.7.3./configure //这里不要指定目录,使用默认目录进行安装。默认是安装在/usr/local目录下面。makesudo make install

这两个只所以没有指定安装目录是因为设置了安装目录后,再安装turnserver的时候,提示前面的confuse没有安装。

6,熟悉、建立、修改配置文件。

6.1 在turnserver源码根目录下的extra目录下有配置模板可以参考。

turnserver.fedora.initd #fedora平台的启动脚本

turnserver.spec         #fedora平台的启动脚本

turnserver.debian.initd #debian平台的启动脚本

turnserver.conf.template#配置文件

turnusers.txt.template  #用户名、密码配置文件

6.2  建立配置文件:

[hy@localhost-turnserver]$ cd extra/

[hy@localhost-extra]$ cp turnserver.conf.template /usr/local/etc/turnserver.conf

[hy@localhost-extra]$ cp turnusers.txt.template /usr/local/etc/turnusers.txt

[hy@localhost-extra]$ cd /usr/local/etc

6.3修改配置文件

cd /usr/local/etc

chmod 777 turnserver.conf

chmod 777 turnusers.txt

 

vi turnserver.conf

listen_address = {"183.62.225.76" }           #把对应公网网卡的IP地址写入(如果公网地址是用镜像的,则用镜像的那个IP地址),一般只要改这个配置,其它的用默认值就可以了。

## Account method.

account_method = "file"                        #配置账户数据为文件

## Account file (if account_method = file).

account_file ="/usr/local/etc/turnusers.txt" #指定账户文件位置

[root@rlnf-76etc]# vi turnusers.txt

foo:bar:domain.org:authorized

用户名:密码:领域:需要验证的

领域的值应与配置文件(turnserver.conf)中的

## Realm value.
realm = "domain.org"

的值相同.这个值用于密码确认的.

7,启动turnserver

[root@rlnf-76etc]# cd ../sbin

[root@rlnf-76sbin]# ./turnserver -c /usr/local/etc/turnserver.conf

8   启动回显服务:

在服务器上启动回显测试服务端程序:

[root@rlnf-76bin]# ./test_echo_server

UDP Echo server started on port 4588

9     测试服务器是否正常

在其它机器上(客户机器)启动测试程序:

rdc@rdc-Virtual-Machine:/home/turnserver/src$./test_turn_client -t udp -s 183.62.225.76 -p 183.62.225.76 -w 4588 -u foo -g 1234-d domain.org  

Protocol: udp (17) use TLS: 0.

sock: 3 speer: (nil) connected!

Send Allocate request.

Send Allocate request.

Probably wrong credentials or requestedfamily not supported.

这个是说权限错误,一般是用户或密码不对。修改用户和密码,再次运行:

rdc@rdc-Virtual-Machine:/home/turnserver/src$./test_turn_client -t udp -s 183.62.225.76 -p 183.62.225.76 -w 4588 -u foo -gbar -d domain.org

Protocol: udp (17) use TLS: 0.

sock: 3 speer: (nil) connected!

Send Allocate request.

Send Allocate request.

Allocate an address!

Send CreatePermission request.

Permission installed!

Send Send indication.

Receive data: 1024

Send CreatePermission request.

Channel bound to 16393.

Send ChannelData.

Received ChannelData: 1024 bytes

Send Refresh request.

Cleanup and exit.

10    服务端打印的日志:

15:44:26.632297 [turnserver_main:4509]  Received UDP on listening address15:44:26.632336[turnserver_listen_recv:3273]   Nomessage integrity15:44:26.636506 [turnserver_main:4509]  Received UDP on listening address15:44:26.636534[turnserver_listen_recv:3581]   OK basicvalidation are done, process the TURN message15:44:26.636546 [turnserver_process_turn:2942]  Process a TURN message15:44:26.636559[turnserver_process_allocate_request:2302]     Allocate request received!15:44:26.636573[turnserver_process_allocate_request:2536]     lifetime: 165 seconds15:44:26.636667 [turnserver_process_allocate_request:2767]      Account foo, allocations used: 315:44:26.636719[turnserver_process_allocate_request:2903]     Allocation successful, send success allocate response15:44:26.640733 [turnserver_main:4509]  Received UDP on listening address15:44:26.640758[turnserver_listen_recv:3581]   OK basicvalidation are done, process the TURN message15:44:26.640770[turnserver_process_turn:2942]  Process aTURN message15:44:26.640781[turnserver_process_createpermission_request:1627]      CreatePermission request received15:44:26.640807[turnserver_process_createpermission_request:1767]      Install permission for 183.62.225.76 458815:44:26.640828[turnserver_process_createpermission_request:1806]      CreatePermission successful, send successCreatePermission response15:44:26.645088 [turnserver_main:4509]  Received UDP on listening address15:44:26.645110[turnserver_listen_recv:3581]   OK basicvalidation are done, process the TURN message15:44:26.645121[turnserver_process_turn:2942]  Process aTURN message15:44:26.645131[turnserver_process_send_indication:1414]      Send indication received!15:44:26.645143[turnserver_check_bandwidth_limit:503] Tokendown bucket available: 150000, tokens requested: 102415:44:26.645154[turnserver_process_send_indication:1536]      Will not set DF flag15:44:26.645166[turnserver_process_send_indication:1567]      Send data to peer15:44:26.645224 [turnserver_main:4686]  Received UDP on a relayed address15:44:26.645241[turnserver_check_bandwidth_limit:477] Tokenup bucket available: 150000, tokens requested: 102415:44:26.645314[turnserver_relayed_recv:3722]  Send datato client15:44:26.649140 [turnserver_main:4509]  Received UDP on listening address15:44:26.649165[turnserver_listen_recv:3581]   OK basicvalidation are done, process the TURN message15:44:26.649177[turnserver_process_turn:2942]  Process aTURN message15:44:26.649187[turnserver_process_channelbind_request:1860]  ChannelBind request received!15:44:26.649199[turnserver_process_channelbind_request:1936]  Client request a ChannelBinding for 183.62.225.76 458815:44:26.649234[turnserver_process_channelbind_request:2055]  ChannelBind successful, send success ChannelBind response15:44:26.653515 [turnserver_main:4509]  Received UDP on listening address15:44:26.653532[turnserver_process_channeldata:1239]  ChannelData received!15:44:26.653544[turnserver_check_bandwidth_limit:503] Tokendown bucket available: 150000, tokens requested: 102415:44:26.653557[turnserver_process_channeldata:1366]  Send ChannelData to peer15:44:26.653596 [turnserver_main:4686]  Received UDP on a relayed address15:44:26.653611[turnserver_check_bandwidth_limit:477] Tokenup bucket available: 150000, tokens requested: 102415:44:26.653623[turnserver_relayed_recv:3722]  Send datato client15:44:26.657563 [turnserver_main:4509]  Received UDP on listening address15:44:26.657586[turnserver_listen_recv:3581]   OK basicvalidation are done, process the TURN message15:44:26.657598[turnserver_process_turn:2942]  Process aTURN message15:44:26.657608[turnserver_process_refresh_request:2101]      Refresh request received!15:44:26.657618[turnserver_process_refresh_request:2146]      lifetime: 0 seconds15:44:26.657664[turnserver_process_refresh_request:2201]      Account foo, allocations used: 215:44:26.657677[turnserver_process_refresh_request:2203]      Explicit delete of allocation15:44:26.657692[turnserver_process_refresh_request:2245]      Refresh successful, send success refresh response
服务端打印的日志

转载于:https://www.cnblogs.com/matthew-2013/p/4933244.html

相关文章:

【Android开发】:在任意目录执行NDK编译

2019独角兽企业重金招聘Python工程师标准>>> 文以简单的例子讲述如何在任意目录把自己写的C代码使用NDK提供的交叉编译该工具来编译成Android可使用的静态库/动态库。 1. 准备环境 首先,你得安装了Android的NDK编译工具,假设你的NDK的根目录在…

SurfaceView 间取得焦点

在SurfaceView中我们的onKeyDown虽然重写了view的函数, 但一定需要我们在初始化的时候去声明焦点 //添加这个来取得按健事件this.setFocusable(true);this.setFocusableInTouchMode(true);this.requestFocus();如果这些方法,会造成按键无效,提…

Oracle字符串转BooIean,利用Java的多线程技术实现数据库的访问.pdf

利用Java的多线程技术实现数据库的访问.pdf第 卷第 期 计算机应用22 12 Voi .22 , No . 12年 月2002 12 Computer Appiications Dec . , 2002文章编号: ( )1001 - 9081 2002 12 - 0121 - 03利用Java 的多线程技术实现数据库的访问刘 巍,唐学兵(武汉大学 …

Linux音频设备驱动

在Linux中,先后出现了音频设备的两种框架OSS和ALSA,本节将在介绍数字音频设备及音频设备硬件接口的基础上,展现OSS和ALSA驱动的结构。17.1~17.2节讲解了音频设备及PCM、IIS和AC97硬件接口。17.3节阐述了Linux OSS音频设备驱动的组…

japid-controller自动绑定的数据类型

参考文献:http://www.playframework.org/documentation/1.2.3/controllers 当参数名和HTTP请求中的参数名(即界面中的name)相同时,后台Controller可以直接获取该变量的值。变量分两大类: 1. Simple types 所有的基本数…

NAT,Easy IP

R3配置 [V200R003C00] #snmp-agent local-engineid 800007DB03000000000000snmp-agent #clock timezone Indian Standard Time minus 05:13:20clock daylight-saving-time Day Light Saving Time repeating 12:32 9-1 12:32 11-23 00:00 2005 2005 #drop illegal-mac alarm #…

linux用户在哪个文件夹,LINUX中用命令成功建立一个用户后信息会记录在哪个文件中...

LINUX中用命令成功建立一个用户后信息会记录在哪个文件中发布时间:2007-07-28 10:14:57来源:红联作者:MPiops增加用户帐号后新建用户的命令十分简单,在命令行下使用 useradd 命令:useradd david该命令做了下面几件事:1)在 /etc/passwd 文件中…

iOS开发—block介绍

- (void)viewDidLoad {[super viewDidLoad];NSLog("我在玩手机");NSLog("手机没电了");[self chargeMyIphone:^{NSLog("出门逛街");}];NSLog("我在看电视"); }-(void)chargeMyIphone:(void(^)(void))finishBlock {double delayInSecon…

Sap Byd Soap使用 SSL 客户端证书

1.修改通讯安排为使用SSL客户端证书2.设置客户端证书上传证书,或者上传并下载证书3.用SoapUI 测试系统选择下载来的证书,或者自己创建的通讯证书,并输入密码配置好后就可以测试系统了4.关于验证失败.byd 系统 有时候,系统生效会比较慢,如果不行,请等待3分钟,还是不行,从头在试下…

IOS开源项目汇总

扫描wifi信息:http://code.google.com/p/uwecaugmentedrealityproject/http://code.google.com/p/iphone-wireless/ 条形码扫描:http://zbar.sourceforge.net/iphone/sdkdoc/install.html tcp/ip的通讯协议:http://code.google.com/p/cocoaas…

linux命令face,linux下配置face_recognition

1、如linux下已有python2.7,但需要更新一下python 2.7至python2.xsudo add-apt-repository ppa:fkrull/deadsnakes-python2.7sudo apt-getupdatesudo apt-get upgrade2、部署步骤安装Boost, Boost.Pythonsudo apt-get install build-essential cmakesudo apt-get install libgt…

微服务系列(五):事件驱动的数据管理

编者的话|本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第五篇文章。第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点;第二和第三篇描述了微服务架构模块间通讯的不同方面;第四篇研究了…

js基础知识温习:Javascript中如何模拟私有方法

本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。 公有方法 公有方法就是能被外部访问并调用的方法。 // 在对象中 var R…

格式化测试数据,组装用于插入表中的sql语句

最近闲的蛋疼,每每在写测试例子的时候,万恶的测试数据需要手工书写insert语句的向表中插入,很费事,于是就像写个脚本来实现自动生成插入语句 测试数据: 100 北京 20120203123 100 天津20120203123 101 湖南20120203nul…

linux内核功能有,好消息!LINUX内核2.6.18终于支持实时功能了

LINUX内核2.6.18终于支持实时功能了,这是个好消息。当LINUX实时功能加强后,它在嵌入式系统的应用就会更广泛了。在这一版发布前,为了使嵌入式系统的LINUX具有实时特性,需要给标准和LINUX系统加上具有实时功能的补丁。实际上,就算是…

Asp.Net 构架(HttpModule 介绍)

Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一幅图中…

.net下WinDbg使用说明

加载调试文件 .loadby sos mscorwks #.Net 3.5版本及以下 .loadby sos clr #.Net 4.0 WinDbg的基本命令 !threads #显示所有线程 !dumpheap #显示托管堆的信息 !dumpheap -stat #统计堆栈内存 !clrstack #显示调用栈 !dumpobj #显示一个对象的内容 !dumparray #显示数组…

【系列】EOS开发3 EOS提供的程序和工具

上一篇文章使用了nodeos命令来启动eos服务,这一篇文章,就来介绍一下eos提供的相关程序和工具。 nodeos EOSIO的核心守护进程,它可通过插件配置来启动一个节点。 cleos 这是一个命令行工具,它跟nodeos开放的REST API接口进行交互。…

Linux qgis 编译,QGIS简介与源代码编译

QGIS(http://qgis.org)是一个集成了很多个开源的空间数据处理库的桌面GIS软件,支持Python脚本。QGIS基于QT和SIP进行开发,支持Windows\Linux\MacOS等操作系统,可以访问MySQL/PostGRE等数据库的空间数据,可以连接到OpenstreetMap拉…

一步步写自己SqlHelper类库(五):Command对象

1.Command对象基础 当我们使用Connection对象里面的方法打开数据库后,要查询自己所需的数据或对数据库的内容进行增删改时,Command对象就派上用场了! MSDN定义:建立与数据源的连接后,利用Command对象来执行命令并从数据…

MVC-前台调用后台action 传递upload file 参数问题

在后台获取upload file 数量的时候发现count一直为0,经检查发现了问题 ,代码如下: 前台: var data $("#DetailForm").serialize(); $.ajax({ url: Url.Action("SaveRequest", "RegistrationRequest&quo…

Storybook 5.0正式发布:有史以来变化最大的版本\n

Storybook 5.0(SB5)于近日正式发布,这是目前为止最大的一个版本。新版本的内容包括: 全新的开发者体验;带有主题的组件库;改进的前端插件架构;全新的Storybook网站。 Storybook的进展和未来 Sto…

linux6直连存储挂载磁盘,CentOS7mount网络磁盘的详细步骤

在配置前一定先关闭防火墙systemctl disable firewalldsystemctl stop firewalldsystemctl mask firewalld一.修改iscsi客户端的用户名vi /etc/iscsi/initiatorname.iscsiInitiatorName iqn.************;【注:eg:iqn.2017-09.com.centos:cl…

如何将Java源代码文件的编码从GBK转为UTF-8?

有时候看到有意思的demo,在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制, demo的类比较少的时候 可以忍受,demo的类多的时候 除了靠之外 别无办法 今天再找仿ios样式demo的时候 实在受不了乱码&a…

电子书格式怎么在线转换为PDF格式

电子书格式怎么在线转换为PDF格式,现在很多朋友喜欢用PDF格式的电子书,因为其有纸质书的排版和格局,但实际生活中出现的最多的是TXT等格式的电子书,那如何将其进行转换成PDF格式的呢,下面就由小编来告诉大家转换的解决…

设计模式笔记(18)---迭代器模式(行为型)

Gof定义 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露该对象的内部表示。 动机 在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访…

linux卸载mpfr,Red Hat Linux在安装gcc时遇到的问题汇总

找到了一个比较老的RedHatlinux,想要装上apachetomcat。由于是在虚拟机中运行,我想先装一个vmware-tools提高性能。但是安装的过程中我发现竟然找不到gcc。于是我就去网上(] http://www.linuxidc.com/Linux/2009-01/18242.htm 与 http://www.linuxidc.co…

【数据结构】某些难理解点

1 typedef char ListData;2 //表示以后可以用ListData来代替char类型3 4 typedef struct node{ //此处node,只在结构体中出现和使用5 ListData data;6 struct node *link;7 }ListNode; //表示将整个结构体命名为ListNode,也就是说…

利用jQuery实现用户名片小动画

我爱撸码,撸码使我感到快乐!大家好,我是Counter。下面给大家介绍利用jQuery实现的小动画,非常的简便,如果有原生js操作的话,那么就不止这么多行了。至于CSS,个人觉得,这边CSS布局也蛮…

Linux二进制导出配置文件,Go打包二进制文件的实现

背景众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。操作需求:打包部署到centos7笔者打包环境:mac os方法:进入main.go所在目录,输入如下命…