Lucky可以方便的实现动态域名(DDNS)、Stun内网穿透等。极大地方便用户操作。接下来,让我们来部署 这里,我们通过一键安装脚本来实现。 这里,我们以本地80端口为例 首先,在本地启动Apache2,点击STUN内网穿透新增规则如下: 穿透成功后,效果如下: 接下来,我们访问42.xx.xxx.xx:31091便可以访问当前的ssh服务。
13 126 c=IN IP4 0.0.0.0 a=rtcp:1 IN IP4 0.0.0.0 a=ice-ufrag:W2TGCZw2NZHuwlnf a=ice-pwd:xdQEccP40E+P0L5qTyzDgfmW 如果这个方法失败(表示此时设备处于NAT环境下),ICE使用STUN服务器获取外部地址。如果使用STUN也无法连接,则通过TURN中继服务器进行路由。 换句话说: STUN服务器用于获取外部网络地址。 如果直连失败,TURN服务器将用于中继流量。 每个TURN服务器都支持STUN:TURN服务器是内置了中继功能的STUN服务器。 部署STUN和TURN服务器 为了进行测试,Google运行appr.tc使用的是公共STUN服务器stun.l.google.com:19302。 许多应用程序、库和平台利用WebRTC特性,比如: sipML5: 一个开源的JavaScript SIP客户端。
我们用SIP 客户端呼叫的时候,经常遇到复杂的网络NAT环境,这个时候需要我们安装STUN Server / Turn Server 做穿透用。 这里简单记录下 STUN Server的安装启动步骤: yum -y install gcc yum -y install make yum -y install boost* # For Boost
这是一整个系列,主要是针对家庭nas没有公网的情况下,通过stun穿透获取公网+端口,从而实现公网ipv4和ipv6都能访问的nas服务的教程。lucky简介:一款由个人开发者开发的网络工具。 lucky里开启stun穿透的原理stun(SessionTraversalUtilitiesforNAT)穿透原理:通过公网stun服务器获取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客户和STUN服务器之间可能有一个或多个NAT 。其结果是,由服务器接收该请求的源地址将通过在NAT最接近服务器创建的映射地址。 STUN服务器复制该源IP地址和端口到一个STUN绑定响应,并将其发送回源IP地址和端口 的STUN请求。对于所有类型的NAT,这种响应都将能够到达STUN客户。 一个STUN服务器必须准备接收绑定请求在四个 地址/端口组合:(A1, P1 ),(A2 ,P1) , (A1, P2)和(A2 , P2)。 以下是stun过程解析: test1: 客户端发送一个STUN绑定请求到服务器,在属性CHANGE-REQUEST中在不设置任何标志,并且没有 RESPONSE-ADDRESS属性。
术语定义 STUN代理:STUN代理是实现STUN协议的实体,该实体可以是客户端也可以是服务端 STUN客户端:产生stun请求和接收stun回应的实体,也可以发送是指示信息,术语STUN客户端和客户端是同义词 stun消息头之后有0个或多个属性。 5 协议处理流程 5.1 构建stun请求事务或指示事务 当确定请求或指示消息时,代理在创建stun报头时必须遵循第4节中的规则。 对于长期凭据,密钥为16个字节,计算公式如下: key = MD5(username “:” realm “:” SASLprep(password)) 也就是说,16字节字钥通过连接以下 5个字段的MD5哈希形成:(1)删除任何引号和后空的用户名,从username 属性中获取(在这种情况下,已应用了SASLprep)(2)冒号;(3)realm 删除引号和后空的领域;(4)冒号;(5) 例如,如果用户名为“user”,realm 为“realm ”,password为“pass”,那么16字节的HMAC密钥将是对字符串“user:realm pass”执行MD5哈希的结果,结果散希为0x8493fbc53ba582fb4c044c456bdc40eb
一、stun协议格式 1、STUN报文头 1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。 响应类型分为成功和出错两种,用来帮助快速处理STUN信息。 由于所有的STUN属性都是都是4字节对齐(填充)的,因此这个字段最后两位应该恒等于零,这也是辨别STUN包的一个方法之一。 还有一个作用就是在协议多路复用时候也可以将其作为判断标志之一 5)Transaction ID 字段是个96位的标识符,用来区分不同的STUN传输事务。 2、STUN报文属性(attributes) 在STUN报文头部之后,通常跟着0个或者多个属性,每个属性必须是TLV编码的(Type-Length-Value)。
0x0001 #define STUN_BINDRESP 0x0101 #define STUN_BINDERROR 0x0111 #define STUN_SECREQ 0x0002 #define STUN_MSG_USERNAME0x0006 #define STUN_MSG_PASSWORD0x0007 #define STUN_MSG_INTEGRITY0x0008 #define ; /* 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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0| char *data, size_t len, stun_cb_f *stun_cb, void *arg) { struct stun_header *hdr = (struct stun_header
一个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协议时遇到的最常见错误代码的列表。
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。
这是一整个系列,主要是针对家庭nas没有公网的情况下,通过stun穿透获取公网+端口,从而实现公网ipv4和ipv6都能访问的nas服务的教程。 今天讲的是通过lucky的stun穿透获取动态公网ip和端口后,借助cloudflare来获取动态端口并进行隐藏的流程,实现域名直接访问。 前提准备拥有一个域名,并托管到cloudflarenas里已经装好lucky并配置好stun穿透分配好两个子域名,一个是穿透前用的如二级域名*.nini.cn,一个是穿透后用的如三级域名*.stun.nini.cn 详细步骤cloudflare后台登录cf后台,左侧点击,域,点击对应域名DNS设置,添加一个穿透前的域名:*.xxx.xyz,开启代理,添加一个穿透后的域名:*.stun.xxx.xyz,不开启代理。 各个子服务反向代理添加:反向代理这里的前端地址要改为重定向后的具体地址:xx.stun.xx.cn动态域名添加一个穿透前的域名和一个穿透后的域名,两条ddns。
简介 stun协议本身是用来进行NAT穿透使用,其本身实际上是NAT内部设备获取外部IP地址的一种协议。 STUN协议在RFC上目前经过三种演变,其中RFC3489上定义的STUN和之后的RFC5389和8489上定义的stun在概念上存在明显区分: RFC3489定义:Simple Traversal stun indiction(RFC5389加入):这个stun信令在设计上就是为了简化传统stun流程中冗余的request-response的逻辑,在初始的stun请求获取server-reflex 3.2 stun信令的组成部分 stun信令由stun头+stun属性两部分组成。其中stun头描述了基本的stun信息。stun属性则是对于这个stun信令的功能拓展。 nonce值是对一次鉴权流程的标记,可以一直在鉴权成功之后的流程使用,realm标记的是所属的域; 获取计算消息完整性时HMAC-SHA1流程需要使用的key,在长期凭证机制中为: key = MD5(
STUN协议(Simple Traversal of UDP Through NATs),在RFC3489中定义为一种简单的NAT穿透解决方案,即用UDP实现的简单NAT穿透方法。 在新的RFC5389修订中把STUN协议定义为穿透NAT的提供工具,在原有UDP的基础增加了TCP穿透,英文全称为Session Traversal Utilities for NAT,即NAT会话穿透 TURN协议(Traversal Using Relays around NAT),在RFC5766中的定义是,使用中继穿透NAT,它是STUN协议的一种中继扩展。 即在STUN的基础上实现中继或“中间人”方式的NAT穿透。 之后,交互式连接(Interactive Connectivity Establishment,ICE)机制更让STUN和TURN的应用更加完美,它通过综合运用STUN、TURN、RSIP等NAT穿透方式
(socket.AF_INET, socket.SOCK_DGRAM) sock.settimeout(5) try: # 构造STUN :2px classDef holeClass fill:#f3e5f5,stroke:#4a148c,stroke-width:2px classDef relayClass fill:# - 展示不同方案的连接成功率5. 实战案例:企业级内网穿透系统6.1 系统架构设计图5:企业级内网穿透系统架构图 - 展示完整的系统组件关系6.2 核心服务实现import asyncioimport websocketsimport 展望未来,随着IPv6的普及和5G网络的发展,内网穿透技术也将面临新的机遇和挑战。QUIC协议的兴起、边缘计算的普及、以及AI在网络优化中的应用,都将为这一领域带来新的变革。
yes:非对称型(至少 IP 不限制);no:对称型=>test5。 test5 主机向 test4 的服务器再发一次请求,该服务器用相同 IP 但不同的端口返回? 因此我们需要借助 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 会话穿透效用 ),即使用中继穿透 NAT:STUN 的中继扩展。
(二)详解 P2P技术详解(四):P2P技术之STUN、TURN、ICE详解 STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是Simple Traversal of UDP Through NATs,即简单的用UDP穿透NAT。 STUN是个轻量级的协议,是基于UDP的完整的穿透NAT的解决方案。它允许应用程序发现它们与公共互联网之间存在的NAT和防火墙及其他类型。它也可以让应用程序确定NAT分配给它们的公网IP地址和端口号。 Extensions to Session Traversal Utilities for NAT(STUN),即使用中继穿透NAT:STUN的中继扩展。 TURN与STUN 共同点:都是通过修改应用层中的私网地址达到NAT穿透的效果, 不同点:是TURN是通过两方通讯的“中间人”方式实现穿透。
socket.SO_REUSEADDR, 1) self.server.bind(('0.0.0.0', local_port)) self.server.listen(5) , stun_port=3478): self.stun_server = stun_server self.stun_port = stun_port self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket.settimeout(5) 实际测试显示,在对称 NAT 环境下,采用中继服务器辅助打洞,传输速度可达中心服务器模式的 3-5 倍。 WebRTC 集成了 ICE 框架,自动尝试 UDP 打洞、STUN 与 TURN 多种穿透策略。
一、什么是内网穿透(NAT 穿透)? 在现代网络环境中,绝大多数家庭和企业都通过路由器(NAT 设备)连接互联网。 内网穿透(NAT 穿透)就是指让外部网络能够访问位于 NAT 后面的内网主机的技术。 NAT 穿透技术 a) STUN(Session Traversal Utilities for NAT) 主要用于 UDP 协议 内网主机通过 STUN 服务器获取自己的公网地址和端口 适用于对称 NAT 以外的大多数 NAT 类型 b) TURN(Traversal Using Relays around NAT) 当 STUN 失败时,使用 TURN 服务器中继所有流量 适用于所有 NAT 类型,但带宽消耗大 Zerotier、Tailscale 虚拟组网工具,通过 P2P 技术实现内网穿透,适合组建虚拟局域网,实现多地互联 5.
譬如,一个软件包可能会包括一个STUN客户端A,这个客户端A会向STUN服务器发送请求,之后,服务器就会向STUN客户端A发送NAT路由器的公网IP地址以及NAT为这个客户端A开通的端口号,这个端口号是允许从别的客户端 STUN主要功能 STUN主要有3个功能,分别是检测是否位于NAT后面,检测NAT的类型,获取经过NAT转换后的地址和端口。 stun 的NAT 类型探测流程 参考资料 stun https://baike.baidu.com/item/stun/3131387? /63/STUN_Algorithm3.svg STUN解决的过程 https://blog.csdn.net/carry1314lele/article/details/2420494 STUN简介 /5041546.html STUN服务器 https://baike.baidu.com/item/STUN服务器/2173892 STUN详解 https://segmentfault.com/a/