使用docker搭建STUN/TURN服务器

作者&投稿:凌泰 (若有异议请与网页底部的电邮联系)
~ 前言

    STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是Simple Traversal of UDP Through NATs,即简单的用UDP穿透NAT。

    TURN,首先在RFC5766中定义,英文全称是Traversal Using Relays around NAT:Relay Extensions to Session Traversal 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 <patxi.gortazar@gmail.com>

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 \

  telnet \

  wget

RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz \

  && 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.org

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 http://169.254.169.254/latest/meta-data/public-ipv4)||echo"No public ip found on http://169.254.169.254/latest/meta-data/public-ipv4"

if[-z"$PUBLIC_IP"];then

PUBLIC_IP=$(curl http://icanhazip.com)||exit1

fi

#Try to get private IP

PRIVATE_IP=$(ifconfig|awk'/inet 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@www]# 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 <patxi.gortazar@gmail.com>

---> 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  telnet  wget

---> Using cache

---> 05ed9ced48a5

Step 4/11 : RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz  && 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.org

---> 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

Successfully built f5e5acad0f81

Successfully tagged teststurn_1:latest

执行完后可以看到自己创建的镜像名称为teststurn_1 

4:启动docker的镜像,并开启端口3478

     docker run -d -p 3478:3478 -p 3478:3478/udp teststurn_1

    启动后需要等待一两分钟才能测试顺畅

5:测试服务器效果

    打开 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/  并输入自己的本机IP和端口,分别测试两种协议服务是否生效


一篇文章帮你搞定 Docker 本地镜像仓库构建-harbor,建议收藏!
步骤1:证书签发 私有仓库需要HTTPS访问,首先,使用自签名证书进行部署。以下是证书生成过程:创建CA证书和私钥:openssl genrsa -out ca.key创建CA证书:openssl req -new -x509 -days 3650 -key ca.key -out ca.pem为harbor域名生成证书:openssl genrsa -out harbor.key生成证书请求文件:openssl r...

终于有人把Docker讲清楚了,Docker入门教程,原来这么简单...
1、docker并不是LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够课哦内阁制各进程的资源分配。在LXC的基础之上,docker提供了一系列更强大的功能。2、容器网络是Docker用来解决相互隔离的容器之间通信问题的技术。3、用户定义的桥接网络是使用创建和配置的dockern...

docker可以搭建网络吗?
1、Bridge模式 Bridge模式,其实就是常用的Linux网桥模式,容器在安装完成后,会在系统上默认创建一个Linux网桥,并为它分配一个子网,比如Docker,针对每一个容器,均为其创建一个虚拟的以太网设备,其中一端会关联到网桥上,另一端则会通过映射,映射到容器内部的网络空间中,然后将该虚拟网段中的一个...

docker使用教程
3、在这种模式下,Docker为容器创建独立的网络栈,保证容器内的进程使用独立的网络环境,实现容器之间、容器与宿主机之间的网络栈隔离。同时,通过宿主机上的Docker0网桥,容器可以与宿主机乃至外界进行网络通信。云计算核心技术Docker教程:Docker存储写入时复制(CoW)策略1、使用可以一起启动多个容器docker-comp...

一文教您如何通过 Docker 快速搭建各种测试环境
使用某个数据库:输入命令 exit ,退出连接!五、快速安装&搭建 Elasticsearch 环境 本节中,我们将学习如何通过 Docker 快速安装与搭建 Elasticsearch 环境。5.1 下载 Elasticsearch 镜像 这里以 Elasticsearch 6.5.0 为快速安装&搭建 Elasticsearch 环境例:下载完成后,通过 docker images 检查一下镜像...

Docker部署AutoPiano | 自由钢琴 让你听见内心的声音
搭建之旅:走进Docker世界 以绿联 DX4600 为例,打开Docker管理器,步入镜像的世界。在丰富的镜像仓库中,搜索并选择wbsu2003\/autopiano的最新版本,点击下载,开始你的搭建过程。在本地镜像中,识别新下载的镜像,创建一个简短而响亮的容器名,勾选启动选项,让容器的生命力瞬间启动。在基础设置环节,确保...

docker搭建私有仓库
  Docker 官方提供了一个搭建私有仓库的镜像 registry ,运行该镜像的容器并且对外暴露5000端口就ok了。  如果是在内网环境中,可以之间使用,如果是外网访问内网,可以借助花生壳等做个内网穿透。\/Users\/miuye\/Public\/registry 是我个人的挂载的本地目录,push到该仓库的镜像会...

在docker上搭建hadoop平台有什么目的
在docker上搭建hadoop平台目的占用资源少。根据查询相关公开资料得知想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机。但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的。这个时候我们可以使用Docker。Docker可以看做是一种轻量级的虚拟机,占用资源少,用起来...

如何使用docker搭建开发环境
export DOCKER_HOST=tcp:\/\/127.0.0.1:4243 docker-daemon跑在虚拟机上,这个程序实际上就是接收docker-client发送过来的消息命令,创建、启动和销毁lxc容器,以及docker本身的版本管理、映像存储等等 运行你的第一个docker容器 安装完成后,就差不多可以开始创建和运行docker容器了,在这之前,你首先得...

Docker搭建高可用Mysql数据库集群有什么用?
在Docker上搭建高可用MySQL数据库集群有以下几个好处:高可用性:集群中每个MySQL节点都可以接收读写请求,当一个节点出现故障或宕机时,其他节点可以接替它的工作,确保了数据库的高可用性。负载均衡:集群中每个MySQL节点可以根据负载情况来分配读写请求,均衡每个节点的负载,提高整个系统的性能和稳定性。数据...

泽库县17551548806: 如何在docker中运行storm -
钟离婵施太: 1. 安装 Docker 在开始前,我们首先得确保在Linux主机中已经安装了Docker.这里,我运行的是CentOS 7 主机,我们将运行yum管理器和下面的命令来安装Docker.# yum install docker# systemctl restart docker.service2. 创建 Dockerfile 现在,...

泽库县17551548806: 群晖docker 可以做什么 -
钟离婵施太: 1、docker就是VMware,docker里面的镜像就相当于VMware在装系统时使用的镜像文件. 2、docker里面创建的容器就是在VMware里面创建的虚拟机并已使用镜像文件装好系统. 3、虚拟机能做什么就能做什么,就是一台服务器虚拟化很多服...

泽库县17551548806: 如何在ubuntu上使用docker安装单机spark -
钟离婵施太: 我自己已经解决了,通过看了几篇BLOG,这里贴上地址,参考BLOG : 一、Ubuntu14.04下安装Hadoop2.4.0 (单机模式);Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原创);ubuntu 中ssh无密码配置 ,hadoop节点之间无密码登录;我是在Ubuntu14.04LTS下搭建的1.1.0Spark集群,已经搭建成功,目前只用了3台电脑.方法差不多.

泽库县17551548806: 如何基于Docker快速搭建多节点Hadoop集群 -
钟离婵施太: Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭 建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop on Docker项目所存在的问题之后,开发了接近最小...

泽库县17551548806: 如何利用docker快速构建MySQL主从复制环境
钟离婵施太: Docker容器虚拟化的好处 Docker项目的发起人和Docker Inc.的CTO Solomon Hykes认为,Docker在正确的地点、正确的时间顺应了正确的趋势—即高效地构建应用.现在开发者需要能方便地创建运行在云平台上的应用,也就是说应用必须能够...

泽库县17551548806: 如何用docker搭建一台虚拟机 -
钟离婵施太: docker如果安装成功,会有一块虚拟网卡,ip地址默认是172.17.42.1用docker search centos6命令搜索githup中的容器使用docker pull weepee/centos6下载容器到本地使用docker images查看本地所有的容器使用run命令启动容器 /usr/bin/...

泽库县17551548806: Linux系统Docker命令怎么用 -
钟离婵施太: 下面是安装 Docker 客户端并在上面运行容器的简单步骤. 1. 下载 Boot2Docker在我们开始安装之前,我们需要 Boot2Docker 的可执行文件.可以从 它的 Github 下载最新版本的 Boot2Docker.在这篇指南中,我们从网站中下载版本 v1.6.1....

泽库县17551548806: 如何在CentOS下安装部署Jenkins持续集成环境 -
钟离婵施太: 1. 安装 Docker 首先,我们要安装 docker,因为这是 Drone 的工作流的最关键的元素.Drone 合理的利用了 docker 来构建和测试应用.容器技术提高了应用部署的效率.要安装 docker ,我们需要在不同的 linux 发行版本运行下面对应的命令,...

泽库县17551548806: 如何在docker容器中运行一个jar而不会被退出 -
钟离婵施太: 假设你的容器名字叫做container,试试这样:1 docker run container tail -f /dev/null 后面加命令tail -f /dev/null,就可以保持你的容器一直在前台运行了.

泽库县17551548806: 如何从零开始搭建Docker Swarm集群 -
钟离婵施太: 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7) vim /etc/sysconfig/docker 2. 添加-H tcp://0.0.0.0:2375到OPTIONS OPTIONS='-g /cutome-path/docker -H tcp://0.0.0.0:2375' 3. CentOS6.6 需要另外添加-H unix:///var/run/docker....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网