Lucky可以方便的实现动态域名(DDNS)、Stun内网穿透等。极大地方便用户操作。接下来,让我们来部署 这里,我们通过一键安装脚本来实现。 这里,我们以本地80端口为例 首先,在本地启动Apache2,点击STUN内网穿透新增规则如下: 穿透成功后,效果如下: 接下来,我们访问42.xx.xxx.xx:31091便可以访问当前的ssh服务。
RTP/SAVPF 111 103 104 0 8 107 106 105 13 126 c=IN IP4 0.0.0.0 a=rtcp:1 IN IP4 0.0.0.0 a=ice-ufrag:W2TGCZw2NZHuwlnf 换句话说: STUN服务器用于获取外部网络地址。 如果直连失败,TURN服务器将用于中继流量。 每个TURN服务器都支持STUN:TURN服务器是内置了中继功能的STUN服务器。 transport=udp', 'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', 'username': '28224511:1379330808 transport=tcp', 'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', 'username': '28224511:1379330808 部署STUN和TURN服务器 为了进行测试,Google运行appr.tc使用的是公共STUN服务器stun.l.google.com:19302。
我们用SIP 客户端呼叫的时候,经常遇到复杂的网络NAT环境,这个时候需要我们安装STUN Server / Turn Server 做穿透用。 这里简单记录下 STUN Server的安装启动步骤: yum -y install gcc yum -y install make yum -y install boost* # For Boost /stunserver --mode full --primaryinterface eth0 --altinterface eth0 & 全功能模式 需要2个IP .
lucky里开启stun穿透的原理stun(SessionTraversalUtilitiesforNAT)穿透原理:通过公网stun服务器获取NAT分配的公网映射地址,再通过打洞建立NAT转发表项,实现 P2P直连,仅适用于锥形NAT及以上,对称型NAT通常无效。 stun穿透配置前提网络配置条件网络环境很关键一定要是要全锥型即以上,也就是nat2以上。 你再用配置stun穿透添加一条穿透规则,就按我截图列的,这个最简单的一个实现。简单说下这里的原理,这里是将内部的端口转发到穿透的本地端口,本地端口再转发到公网端口。 问题:获取公网的ip和端口会变如果你有公网ip,就可使用动态公网ip+固定端口,不用折腾上面stun。stun穿透获取到公网ip和端口,和纯公网ip比较就是端口也会阶段性变。
Introduction STUN – Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators STUN working idea is pretty simple. STUN does three tests to detect the NAT type. Collapse|Copy Code In test I, the client sends a STUN Binding Request to a server, without any flags = STUN_NetType.UdpBlocked){ //UDP blocked or !!!!
STUN客户和STUN服务器之间可能有一个或多个NAT 。其结果是,由服务器接收该请求的源地址将通过在NAT最接近服务器创建的映射地址。 STUN服务器复制该源IP地址和端口到一个STUN绑定响应,并将其发送回源IP地址和端口 的STUN请求。对于所有类型的NAT,这种响应都将能够到达STUN客户。 一个STUN服务器必须准备接收绑定请求在四个 地址/端口组合:(A1, P1 ),(A2 ,P1) , (A1, P2)和(A2 , P2)。 通常情况下, P1的端口是3478 (默认的STUN端口)。 A2和P2是任意的。 A2和P2都通过CHANGED – ADDRESS属性告诉客户端的,如下所述。 以下是stun过程解析: test1: 客户端发送一个STUN绑定请求到服务器,在属性CHANGE-REQUEST中在不设置任何标志,并且没有 RESPONSE-ADDRESS属性。
(通常是STUN服务器)所识别 2. 操作概述 如图1为典型的stun配置,stun客户端连接到私有网络NET1,通过NAT1连接到私有网络NET2,NET2通过NAT2连接公网,stun服务器部署在公网。 服务器还使用事务ID作为键,在所有客户机之间唯一地标识每个事务,因此,事务ID必须是统一的,从间隔0 ——2的96幂-1,并且应该是密码随机的。 Message length 是包含20字节的stun头消息长度,因为所有的STUN属性都被填充为4个字节的倍数,所以这个字段的最后2位总是0。这为区分STUN报文和其他协议的报文提供了另一种方法。 请求或指示通过该连接发送 2.
一、stun协议格式 1、STUN报文头 1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。 2)STUN Message Type 字段定义了消息的类型(请求/成功响应/失败响应/指示)和消息的主方法。 虽然我们有4个消息类别,但在STUN中只有两种类型的事务,即请求/响应类型和指示类型。 服务端也把事务ID当作一个Key来识别不同的STUN客户端,因此必须格式化且随机在0~2^(96-1)之间。 2、STUN报文属性(attributes) 在STUN报文头部之后,通常跟着0个或者多个属性,每个属性必须是TLV编码的(Type-Length-Value)。 2)XOR-MAPPED-ADDRESS 和MAPPED-ADDRESS基本相同,不同点是反射地址部分经过了一次异或(XOR)处理。
; /* 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ; static const char* stun_msg2str(int msg) { switch(msg) { case STUN_BINDREQ: return “Binding Request default: return “Not RFC 3489 MSG”; } } static const char *stun_attr2str(int msg) { switch (msg) { Ignoring STUN attribute %s (%04x), length %d\n”, stun_attr2str(ntohs(attr->attr)), ntohs(attr->attr), , ntohs(hdr->msgtype), stun_msg2str(ntohs(hdr->msgtype))); } } return ret; } /*!
一个stun客户端(基本都是嵌入在啊voip软件内的,例如ip话机或者ip pbx)会发送一个请求给stun服务器用来发现客户端的公网ip以及端口,并且stun服务器会返回一个响应。 All STUN messages start with a STUN header, followed by a STUN payload. The STUN header contains: stun消息由stun头和一段stun有效负载(stun payload)组成,stun payload是一系列的STUN属性。 它指示要发送的binding responses往哪发(从STUN服务器发送到STUN客户机)。 与许多其他协议一样,STUN协议有一个错误代码列表。STUN协议错误代码类似于HTTP或SIP。下面是使用STUN协议时遇到的最常见错误代码的列表。
本文就来介绍一下当前主要应用于P2P通信的几个标准协议,主要有STUN/RFC3489,STUN/RFC5389,TURN/RFC5766以及ICE/RFC5245。 STUN报文头部 STUN头部包含了STUN消息类型,magic cookie,事务ID和消息长度,如下: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- 服务端也把事务ID当作一个Key来识别不同的STUN客户端,因此必须格式化且随机在0~2^(96-1)之间。 2. 发送Requst或Indication 目前,STUN报文可以通过UDP,TCP以及TLS-over-TCP的方法发送,其他方法在以后也会添加进来。
这是一整个系列,主要是针对家庭nas没有公网的情况下,通过stun穿透获取公网+端口,从而实现公网ipv4和ipv6都能访问的nas服务的教程。 前提准备拥有一个域名,并托管到cloudflarenas里已经装好lucky并配置好stun穿透分配好两个子域名,一个是穿透前用的如二级域名*.nini.cn,一个是穿透后用的如三级域名*.stun.nini.cn 详细步骤cloudflare后台登录cf后台,左侧点击,域,点击对应域名DNS设置,添加一个穿透前的域名:*.xxx.xyz,开启代理,添加一个穿透后的域名:*.stun.xxx.xyz,不开启代理。 各个子服务反向代理添加:反向代理这里的前端地址要改为重定向后的具体地址:xx.stun.xx.cn动态域名添加一个穿透前的域名和一个穿透后的域名,两条ddns。 2.stun.xxx.xyz服务3.stun.xxx.xyz然后直接访问:服务1.xxx.xyz这样即可访问到你nas服务。
coturn 搭建 stun / turn 服务器 简介 STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是Simple Traversal of UDP Through STUN(Simple Traversal of User Datagram Protocol Through Network Address Translators),即简单的用UDP穿透NAT,是个轻量级的协议 STUN协议在RFC5389中被重新命名为Session Traversal Utilities for NAT,即NAT会话穿透效用。 STUN可以用于多种NAT类型,并不需要它们提供特殊的行为。 STUN本身不再是一种完整的NAT穿透解决方案,它相当于是一种NAT穿透解决方案中的工具。 这是与RFC3489/STUN版本相比最重要的改变。 ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。
一:NAT (Network Address Translator) P2P技术详解(一):NAT详解——详细原理、P2P简介 NAT的四种类型 二:STUN(Simple Traversal of UDP (二)详解 P2P技术详解(四):P2P技术之STUN、TURN、ICE详解 STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是Simple Traversal of UDP STUN是个轻量级的协议,是基于UDP的完整的穿透NAT的解决方案。它允许应用程序发现它们与公共互联网之间存在的NAT和防火墙及其他类型。它也可以让应用程序确定NAT分配给它们的公网IP地址和端口号。 Extensions to Session Traversal Utilities for NAT(STUN),即使用中继穿透NAT:STUN的中继扩展。 TURN与STUN 共同点:都是通过修改应用层中的私网地址达到NAT穿透的效果, 不同点:是TURN是通过两方通讯的“中间人”方式实现穿透。
简介 stun协议本身是用来进行NAT穿透使用,其本身实际上是NAT内部设备获取外部IP地址的一种协议。 STUN协议在RFC上目前经过三种演变,其中RFC3489上定义的STUN和之后的RFC5389和8489上定义的stun在概念上存在明显区分: RFC3489定义:Simple Traversal 2. NAT类型 NAT类型是在RFC3489上提出的一个概念,这个概念旨在将NAT对于内部网络和外部网络数据包的不同处理上,对NAT进行一个系统的分类。 stun indiction(RFC5389加入):这个stun信令在设计上就是为了简化传统stun流程中冗余的request-response的逻辑,在初始的stun请求获取server-reflex 3.2 stun信令的组成部分 stun信令由stun头+stun属性两部分组成。其中stun头描述了基本的stun信息。stun属性则是对于这个stun信令的功能拓展。
P2P通信,而不需要其他公共服务器的中转。 STUN协议(Simple Traversal of UDP Through NATs),在RFC3489中定义为一种简单的NAT穿透解决方案,即用UDP实现的简单NAT穿透方法。 在新的RFC5389修订中把STUN协议定义为穿透NAT的提供工具,在原有UDP的基础增加了TCP穿透,英文全称为Session Traversal Utilities for NAT,即NAT会话穿透 即在STUN的基础上实现中继或“中间人”方式的NAT穿透。 实际环境中,包括Slack在内的大多系统都用到了集成STUN/TURN/ICE 协议且支持 P2P 穿透防火墙的Coturn应用,因此,我们建议实施以下规则: no-multicast-peersdenied-peer-ip
协议实现""" def __init__(self, stun_servers=None): self.stun_servers = stun_servers or [ ('stun.l.google.com', 19302), ('stun1.l.google.com', 19302), ('stun2.l.google.com E --> E1[STUN协议] E --> E2[ICE框架] E --> E3[SDP协商] classDef directClass fill:#e1f5fe,stroke ,D3 relayClass class E1,E2,E3 protocolClass图1:内网穿透技术分类图 - 展示各种穿透技术的层次结构2. 现代内网穿透解决方案4.1 基于WebRTC的P2P连接// WebRTC P2P连接实现class WebRTCNATTraversal { constructor(signalingServer
因此我们需要借助 STUN/TURN 方式进行 NAT 穿透。 WebRTC 采用了 ICE(Interactive Connectivity Establishment)建立端到端的数据通道。 标准规范定义 STUN,首先在 RFC3489 中定义,作为一个完整的 NAT 穿透解决方案,英文全称是 Simple Traversal of UDP Through NATs,即简单的用 UDP 穿透 在 RFC5389 修订中把 STUN 协议定位于为穿透 NAT 提供工具,而不是一个完整的解决方案,英文全称是 Session Traversal Utilities for NAT,即 NAT 会话穿透效用 2. TURN a. ),即使用中继穿透 NAT:STUN 的中继扩展。
, stun_port=3478): self.stun_server = stun_server self.stun_port = stun_port 6.2 P2P 文件共享应用 P2P 文件共享是内网穿透技术的经典应用场景。传统的中心服务器模式在处理大规模文件传输时,易出现带宽瓶颈与成本飙升问题。 以老牌 P2P 软件 eMule 为例,其采用 Kad 网络结合 UDP 打洞技术,用户即便处于不同内网环境,也能直接交换文件。 在开源项目中,如基于 Python 的 P2P 文件传输工具 PeerTransfer,通过简单的 UDP 打洞逻辑,实现了文件的快速共享。 WebRTC 集成了 ICE 框架,自动尝试 UDP 打洞、STUN 与 TURN 多种穿透策略。
(2)检测NAT的类型 这个主要发送响应的时候使用不同IP地址和端口或者改变端口等等。 2.Restricted Cone 从内网主机 in ipx和端口in portx发送的数据会映射为相同的公网ip x 和端口 port x。 2.Restricted Cone C无法和A进行通信,因为A从来没有和C通信过,NAT会拒绝C试图与A连接的动作,但是B可以通过发送数据到210.21.12.140:8000和A的192.168.0.4 stun 的NAT 类型探测流程 参考资料 stun https://baike.baidu.com/item/stun/3131387? https://www.cnblogs.com/idignew/p/7357731.html P2P通信标准协议(一)之STUN https://www.cnblogs.com/pannengzhi/p