各位老铁们,大家好,今天由我来为大家分享stun服务器,以及STUN服务器的STUN服务器的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
一、STUN服务器的STUN服务器
目前有许多种解决方案都可以让基于SIP的VoIP呼叫穿透防火墙,但每一种类型的NAT防火墙都要求使用不同的技术。另外,每种NAT穿透解决方案只适用于一种类型的NAT设备,这也使事情变得更复杂。例如,简单UDP穿透NAT(STUN)技术只适用于非对称式的NAT,通常部署在企业环境之中。
互动式连接建立(Interactive Connectivity Establishment——ICE)草案是由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。该技术可以让基于SIP的VoIP客户端成功地穿透远程用户与网络之间可能存在的各类防火墙。
二、STUN服务器服务器特点
STUN服务器,全称为用户数据报协议(UDP)简单穿越网络转换器(NAT)服务器,它的主要功能是协助那些被防火墙或NAT设备限制的终端设备,如家庭计算机,与位于局域网之外的VoIP服务提供商进行电话通话。通过与STUN服务器交互,终端能够获取其公共IP,NAT类型以及与特定互联网端口相连的本地端口信息,这些信息对于建立VoIP通信至关重要。STUN协议的详细规范可在RFC 3489中找到。
尽管通常在UDP端口3478上连接STUN服务器,但RFC指出,服务器可能会在其他任意的IP和端口上进行测试,以确保兼容*和灵活*。VoIP,即基于互联网的语音通信技术,它通过将语音信号数字化为数据包在IP网络上进行实时传输。VoIP的一大优点在于它能够利用全球的互联网环境,提供比传统通信方式更多的服务,如便宜的语音通话、视频会议、统一消息服务等增值服务。
三、使用docker搭建STUN/TURN服务器
前言
STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是Simple Tr*ersal of UDP Through NATs,即简单的用UDP穿透NAT。
TURN,首先在RFC5766中定义,英文全称是Tr*ersal Using Relays around NAT:Relay Extensions to Session Tr*ersal Utilities for NAT,即使用中继穿透NAT:STUN的扩展
简单的说,TURN与STURN的共同点都是通过修改应用层中的私网达到NAT穿透的效果,异同点是TURN是通过两方通讯的“中间人”方式实现穿透。
ICE的全称Interactive Connectivity Establ.shment(互动式连接建立),由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。
STUN和TURN服务器和ICE可以参考阅读: P2P技术详解(三):P2P技术之STUN、TURN、ICE详解
本文介绍如何通过DOCKER搭建STUN和TURN服务器,步骤如下
1:创建Dockerfile,内容如下:
FROM ubuntu:14.04
MAINTAINER Patxi Gortázar<>
RUN apt-get update&& apt-get install-y\
curl\
libevent-core-2.0-5\
libevent-extra-2.0-5\
libevent-openssl-2.0-5\
libevent-pthreads-2.0-5\
libhiredis0.10\
libmysqlclient18\
libpq5\
tel\
wget
RUN wget ;
&& tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz\
&& dpkg-i coturn_4.4.2.2-1_amd64.deb
COPY./turnserver.sh/turnserver.sh
ENV TURN_USERNAME test
ENV TURN_PASSWORD test
ENV REALM kurento.
ENV NAT true
EXPOSE 3478 3478/udp
ENTRYPOINT ["/turnserver.sh"]
2:创建turnserver.sh,内容如下
#!/bin/bash
set-e
if[$NAT="true"-a-z"$EXTERNAL_IP"];then
#Try to get public IP
PUBLIC_IP=$(curl )||echo"No public ip found on "
if[-z"$PUBLIC_IP"];then
PUBLIC_IP=$(curl )||exit1
fi
#Try to get private IP
PRIVATE_IP=$(ifconfig|awk'/i addr/{print substr($2,6)}'|grep-v 127.0.0.1)||exit1
exportEXTERNAL_IP="$PUBLIC_IP/$PRIVATE_IP"
echo"Starting turn server with external IP:$EXTERNAL_IP"
fi
echo'min-port=49152'>/etc/turnserver.conf
echo'max-port=65535'>>/etc/turnserver.conf
echo'fingerprint'>>/etc/turnserver.conf
echo'lt-cred-mech'>>/etc/turnserver.conf
echo"realm=$REALM">>/etc/turnserver.conf
echo'log-file stdout'>>/etc/turnserver.conf
echo"user=$TURN_USERNAME:$TURN_PASSWORD">>/etc/turnserver.conf
[$NAT="true"]&&echo"external-ip=$EXTERNAL_IP">>/etc/turnserver.conf
exec/usr/bin/turnserver"$@"
3:使用docker build创建镜像,执行结果如下
[root@]# docker build-t teststurn_1.
Sending build context to Docker daemon 4.096kB
Step 1/11: FROM ubuntu:14.04
---> 6e4f1fe62ff1
Step 2/11: MAINTAINER Patxi Gortázar<>
---> Using cache
---> 4460f9f84053
Step 3/11: RUN apt-get update&& apt-get install-y curl libevent-core-2.0-5 libevent-extra-2.0-5 libevent-openssl-2.0-5 libevent-pthreads-2.0-5 libhiredis0.10 libmysqlclient18 libpq5 tel wget
---> Using cache
---> 05ed9ced48a5
Step 4/11: RUN wget tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz && dpkg-i coturn_4.4.2.2-1_amd64.deb
---> Using cache
---> d82ed28fdac9
Step 5/11: COPY./turnserver.sh/turnserver.sh
---> Using cache
---> 1d37a488282c
Step 6/11: ENV TURN_USERNAME test
---> Running in bfd88f08db42
Removing intermediate container bfd88f08db42
---> cf8af0504b95
Step 7/11: ENV TURN_PASSWORD test
---> Running in b8ef33b7c213
Removing intermediate container b8ef33b7c213
---> 32a832f23169
Step 8/11: ENV REALM kurento.
---> Running in bbe129edf5b3
Removing intermediate container bbe129edf5b3
---> 21fdfe34689b
Step 9/11: ENV NAT true
---> Running in 5bdfe8555d5e
Removing intermediate container 5bdfe8555d5e
---> dc7fc896841c
Step 10/11: EXPOSE 3478 3478/udp
---> Running in 67aaa1966f68
Removing intermediate container 67aaa1966f68
---> a12646ed45ff
Step 11/11: ENTRYPOINT ["/turnserver.sh"]
---> Running in b8fc2ff09265
Removing intermediate container b8fc2ff09265
---> f5e5acad0f81
Suessfully built f5e5acad0f81
Suessfully tagged teststurn_1:latest
执行完后可以看到自己创建的镜像名称为teststurn_1
4:启动docker的镜像,并开启端口3478
docker run-d-p 3478:3478-p 3478:3478/udp teststurn_1
启动后需要等待一两分钟才能测试顺畅
5:测试服务器效果
打开 ;并输入自己的本机IP和端口,分别测试两种协议服务是否生效
四、STUN服务器STUN服务器
在VoIP通信中,确保连接的稳定*是一项艰巨的任务,因为用户和企业网络之间可能存在各种复杂的网络转换(NAT)防火墙,这给语音通信带来挑战。为了解决这个问题,已开发出多种NAT穿透技术,如SIP VoIP呼叫的解决方案。
其中,STUN技术是一种常见的简单UDP穿透NAT策略,它专为非对称NAT设计,通常在企业环境中应用。然而,这种技术并不适用于所有类型的NAT设备,其适用范围有限。
为了解决这种复杂*,IETF的MMUSIC工作组提出了互动式连接建立(ICE)草案。ICE提供了一个统一的框架,旨在整合不同的NAT穿透技术,使得基于SIP的VoIP客户端能够有效地穿透远程用户和网络防火墙,无论它们是何种类型,无论通信环境如何复杂,都保证了VoIP呼叫的顺利进行。
总的来说,ICE草案为VoIP通信的NAT穿透问题提供了一种灵活且高效的解决方案,使得即使在复杂的网络环境中,也能保证高质量的语音通信体验。
五、webrtc stun服务器必须是公网ip吗
在WebRTC中,STUN服务器(Session Tr*ersal Utilities for NAT)是一个重要的组件,它帮助客户端发现其公共IP和端口,以便在NAT(网络转换)环境中建立对等连接。关于STUN服务器是否必须是公网IP的问题,这取决于你的使用场景和网络环境。
首先,让我们明确一点:STUN服务器本身并不需要一个公网IP。STUN服务器仅仅是一个帮助客户端发现其公网IP和端口的服务。一旦客户端获得了这些信息,它就可以与其他对等端进行通信,不再需要STUN服务器的介入。
然而,在某些情况下,使用一个公网IP的STUN服务器可能是有用的。以下是几种可能的情况:
安全*考虑:如果你的WebRTC应用程序部署在一个受限制的网络环境中,例如企业内网或学校校园网,使用一个公网IP的STUN服务器可以作为一个外部的通信通道,帮助客户端突破这些网络限制,与外部对等端建立连接。
简化部署:对于某些组织或个人开发者来说,拥有一个公网IP的服务器可能更容易管理和维护。他们可以将其配置为一个STUN服务器,并将其用于其WebRTC应用程序。
灵活的通信策略:在一些场景下,使用STUN服务器可以实现更灵活的通信策略。例如,STUN服务器可以帮助客户端在不同的网络之间进行中继通信,或者在不同的对等端之间进行媒体转发。
但是,如果你只是为了在两个对等端之间建立基本的实时通信,并且它们都位于同一个NAT环境中,那么你可能不需要一个公网IP的STUN服务器。在这种情况下,你可以使用一个内网的STUN服务器,或者使用一些自实现的方法来*初始的信令数据(如*SDP描述和ICE候选),以便在两个对等端之间建立连接。
总的来说,STUN服务器是否必须是公网IP取决于你的具体需求和网络环境。如果你的应用程序需要与外部对等端进行通信,或者需要在受限制的网络环境中建立连接,那么使用一个公网IP的STUN服务器可能是有益的。然而,对于大多数基本的WebRTC应用程序来说,一个内网的STUN服务器或者简单的信令*机制就足够了。