ubuntu 配置 turnserver

参考资料:http://www.webrtcbbs.com/forum.php?mod=viewthread&tid=139&extra=page%3D1

    http://www.blogjava.net/linli/archive/2014/10/22/418935.html

在使用WebRTC进行即时通讯时,需要使浏览器进行P2P通讯,但是由于NAT环境的复杂性,并不是所有情况下都能进行P2P(几乎只能在同一局域网内进行),这时需要 TURN Server来帮助客户端之间转发数据。rfc5766-turn-server是一个高性能的开源TURN Server实现。以下是使用Ubuntu操作系统安装rfc5766-turn-server:


第一步:下载安装包
[html] view plain copy
  1. wget http://ftp.cn.debian.org/debian/pool/main/r/rfc5766-turn-server/rfc5766-turn-server_3.2.4.4-1_amd64.deb  

第二步:安装
[plain] view plain copy
  1. sudo apt-get update  
  2. sudo apt-get install gdebi-core  
  3. sudo gdebi rfc5766-turn-server_3.2.4.4-1_amd64.deb  
安装完后,在/usr/share/doc/rfc5766-turn-server下有很多文档可参考。


第三步:配置

在配置之前先生成一下TurnServer的用户名还有密码:

turnadmin -k -u 用户名 -r north.gov -p 密码


记得复制保存一下生成出来的key:0xa9c04dc63524413e8c16fa1bb04a1472

修改/etc/turnserver.conf 文件(直接将一下内容覆盖原来的文件)
[html] view plain copy
  1. listening-ip=外网ip  
  2. listening-port=3478  
  3. tls-listening-port=5349 relay-ip=外网ip  
  4. external-ip=外网ip  
  5. relay-threads=50  
  6. lt-cred-mech  
  7. usermyuserHello: 0xa9c04dc63524413e8c16fa1bb04a1472(格式:user:pass)  
  8. userdb=/etc/turnuserdb.conf  
  9. #max-bps=102400  
  10. pidfile="/var/run/turnserver.pid"  
配置说明:
[html] view plain copy
  1. # TURN为UDP和TCP的侦听器端口(默认: 3478)。  
  2. # 注:实际上,TLS和DTLS会话可以连接到"清晰的"TCP和UDP端口,  
  3. #    如果允许配置。  
  4. listening-ip=外网ip  
  5. listening-port=3478  
  6. # TURN为TLS的侦听器端口(默认: 5349)。  
  7. # 注意:事实上,"清晰的"TCP和UDP会话可以连接到TLS和DTLS端口,  
  8. #      如果允许配置。  
  9. # TURN服务器"自动"识别传输类型。  
  10. # 实际上,两个监听终端点("清晰的"端和"TLS"端)是  
  11. # 对等的功能;但我们保持两个端点来满足RFC 5766规范。  
  12. # 对于安全的TCP连接,我们目前支持SSL的3个版本,  
  13. # 是TLS 1.0版本,1.1版本和1.2版本。  
  14. # SSL2还支持"encapculation模式"。  
  15. # 对于安全的UDP连接,我们支持DTLS版本1。  
  16. tls-listening-port=5349  
  17. # 中继地址(本地IP地址将用于传递数据包的给每个端)  
  18. # 可以使用多个中继地址。  
  19. # 相同的IP可以用作监听IP和继电器IP。  
  20. # 如果没有指定中继IP,那么turnserver将应用默认策略:  
  21. # 它将自行决定使用那个中继  
  22. # 地址,并且它总是会使用客户端套接字的  
  23. # IP地址作为中继的IP地址在TURN会话中(如果  
  24. # 请求的中继地址族解决同族的客户端套接字)。  
  25. #  
  26. relay-ip=外网ip  
  27. #  
  28. # Amazon EC2用户:  
  29. # TURN服务器公开/私有的地址映射,假如服务器是在NAT后端。  
  30. # 在这种情况下,如果一个表单中"-X <ip>"使用一个-X,  
  31. # 然后该ip将被作为中继ip地址来使用。  
  32. # 这种情况只适用于一个简单的例子,  
  33. # 当一个中继的地址是被使用,和没有RFC5780功能是必需的。  
  34. # 单个中继地址必须通过NAT映射到外部的IP。  
  35. # 外部的IP值,假如不为空,通过XOR-RELAYED-ADDRESS字段返回。  
  36. # 外部的IP,NAT必须直接转发端口(转发端口12345,  
  37. # 必须总是映射到相同的外部端口12345)。  
  38. # 在更复杂的情况下,当涉及到多个IP地址,  
  39. # 这个选项必须使用几次,每个条目必须形  
  40. # 成"-X <public-ip/private-ip>",将所有涉及到的地址。  
  41. # RFC5780 NAT发现STUN功能正常工作,  
  42. # 如果正确的地址映射,即使TURN服务器本身是  
  43. # 在一个NAT后。  
  44. # 默认,该值为空,并且没有使用地址映射。  
  45. #  
  46. external-ip=外网ip  
  47. #  
  48. # 数量的中继线程处理建立连接(除了验证线程和侦听器线程)。  
  49. # 如果设置为0,那么应用程序中继进程在一个线程中运行,在同一  
  50. # 个线程中监听处理(身份验证线程仍然是一个单独的线程)。  
  51. # 在旧系统(3.9 Linux内核之前),  
  52. # 数量的UDP线程总是一个线程监听一个网络端点,  
  53. # 包括辅助端点——除非设置0或1值。  
  54. #  
  55. relay-threads=50  
  56. #  
  57. # 取消使用长期证书机制。  
  58. # 默认情况下不使用凭证机制(允许任何用户)。  
  59. # 这个选项可能使用用户数据文件或  
  60. # PostgreSQL或MySQL或Redis来存储用户密钥。  
  61. #  
  62. lt-cred-mech  
  63. #  
  64. # 钥匙必须由turnadmin实用程序生成。键值取决于用户名称、领域和密码:  
  65. #  
  66. # Example:  
  67. # 例子,使用以下命令:  
  68. #  
  69. # $ turnadmin -k -u ninefingers -r north.gov -p youhavetoberealistic  
  70. #  
  71. # Output: 0xbc807ee29df3c9ffa736523fb2c4e8ee  
  72. # 输出是: 0xbc807ee29df3c9ffa736523fb2c4e8ee  
  73. #  
  74. # ('0x' in the beginning of the key is what differentiates the key from  
  75. # password. If it has 0x then it is a key, otherwise it is a password).  
  76. # ('0x'开始的关键是区分从密码的关键。  
  77. # 如果它有0x,那么它是一个关键,否则这是一个密码)。  
  78. #  
  79. # The corresponding user account entry in the config file will be:  
  80. # 相应的配置文件中的用户帐户条目将:  
  81. #  
  82. #user=ninefingers:0xbc807ee29df3c9ffa736523fb2c4e8ee  
  83. # Or, equivalently, with open clear password (less secure):  
  84. #或者是这样,明文密码(不安全的):  
  85. #user=ninefingers:youhavetoberealistic  
  86. #  
  87. user=user:password  
  88. #  
  89. # 'Dynamic'用户帐户数据库文件名。  
  90. # 只有用户长期机制可以存储在一个文件,短期机制不会处理选项,短期机制需要PostgreSQL或MySQL或  
  91. # Redis数据库。  
  92. # 'Dynamic'的长期用户帐户在turnserver程序中动态检查的,  
  93. # 这样他们可以改变的在turnserver运行时。  
  94. # 默认文件名是turnuserdb.conf.  
  95. #  
  96. userdb=/etc/turnuserdb.conf  
  97. #  
  98. # 存储进程pid的文件名。  
  99. # 默认是/var/run/turnserver.pid(超级用户使用)  
  100. # 或者是/var/tmp/turnserver.pid  
  101. #  
  102. pidfile="/var/run/turnserver.pid"  
在修改/etc/ turnuserdb.conf文件:

如果你只有一个用户就配置下面这一句就好了,这里的跟turnuserdb.conf配置的用户名密码保持一致:

[html] view plain copy
  1. myuserHello: 0xa9c04dc63524413e8c16fa1bb04a1472(格式:user:pass)  
配置解释:
[html] view plain copy
  1. #This file can be used as user accounts storage for long-term credentials mechanism.  
  2. #这个文件可以用作长期用户帐户存储凭证机制。  
  3. # Keys must be generated by turnadmin utility. The key value depends  
  4. # on user name, realm, and password:  
  5. # 钥匙必须由turnadmin实用程序生成。键值取决于用户名称、领域和密码:  
  6. #  
  7. # Example:  
  8. # 例子,使用以下命令:  
  9. # $ turnadmin -k -u ninefingers -r north.gov -p youhavetoberealistic  
  10. # Output: 0xbc807ee29df3c9ffa736523fb2c4e8ee  
  11. # 输出是: 0xbc807ee29df3c9ffa736523fb2c4e8ee  
  12. #  
  13. # ('0x' in the beginning of the key is what differentiates the key from  
  14. # password. If it has 0x then it is a key, otherwise it is a password).  
  15. # ('0x'开始的关键是区分从密码的关键。如果它有0x,那么它是一个关键,否则这是一个密码)。  
  16. #  
  17. # The corresponding user account entry in the userdb file will be:  
  18. # 相应的用户帐号在userdb文件中是:  
  19. #  
  20. #ninefingers:0xbc807ee29df3c9ffa736523fb2c4e8ee  
  21. # Or, equivalently (less secure):  
  22. #或者是这样(不安全的):  
  23. #ninefingers:youhavetoberealistic  
  24. #  
  25. yourname:yourpsw  

第四步:启动
[html] view plain copy
  1. turnserver -L <public_ip_address> -c /etc/turnserver.conf -o -a -b/etc/turnuserdb.conf -f -r <system_domain_name>  

服务器启动
turnserver -v  -r by


第五步:测试

在浏览器访问http://外网ip:3478,如果看到“TURN Server”,说明已经搭好了。

ubuntu 配置 turnserver_第1张图片

在WebRtc的JS客户端中这样写:

[javascript] view plain copy
  1. iceServer = { "iceServers":[{"url""stun:stun.l.google.com:19302" },  
  2.                              {"url":"stun: 外网ip:3478"},  
  3.                              {"url":"turn:外网ip",   
  4.                              "credential":"0xa9c04dc63524413e8c16fa1bb04a1472","username":"myuserHello"}   
  5. ]}  









你可能感兴趣的:(ubuntu 配置 turnserver)