各位老铁们,大家好,今天由我来为大家分享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

stun服务器地址 STUN服务器的STUN服务器

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服务器或者简单的信令*机制就足够了。