UDPonNAT—— 一个UDP代理,能让普通的UDP应用跨越NAT网络设备

标签: 乱七八糟 UDPonNAT UDP代理 跨越NAT | 发表时间:2011-09-28 21:57 | 作者:iGFW 19GHz
出处:http://igfw.tk

UDPonNAT是什么:

UDPonNAT是一个UDP代理,它能让普通的UDP应用跨越NAT网络设备。UDPonNAT使用Python编写,遵守GPL协议发布,可运行的平台包括Windows/Linux/Unix等。

UDPonNAT有什么用途:

普通的UDP应用大多具有如下的工作方式:

 

Server运行后,UDP服务被绑定到一个固定的IP:Port上,等待来自 Client的UDP数据包并响应。如果Server具有真实的IP地址,则Client可以从Internet的任意位置访问Server提供的服务。 但现实中还有一些情况,比如作为Server所在的主机只有一个局域网内部IP(该主机如果要访问Internet资源需要通过NAT设备),这时 Server仅能让同一个局域网内的Client访问,如果想让Internet上的Client也能访问该Server,如何做呢,可以试试 UDPonNAT。

UDPonNAT能让没有真实独立IP的UDP Server透过NAT设备对外提供服务,如图:

 

该图的意思是,因为NAT设备的存在,Internet上的Client并不能直接访问到局域网内的Server,但通过UDPonNAT代理软件就可以。

如何使用UDPonNAT:

这 里以一个UDP的应用OpenVPN为例说明如何使用UDPonNAT。这里假设你需要从家里的电脑H访问公司的电脑C,而C处于公司的NAT设备(比如 防火墙)之后,C和H都运行的是Windows操作系统。并且您已经知道如何分别在C和H上配置OpenVPN服务端和客户端。

注意:本文中的所有程序需要在windows命令行方式下运行。

  • 2, 确认C与H所在的网络环境。通过在C和H上分别运行UDPonNAT目录下的stunclient.exe可以得到当前网络类型。一般该命令输出如下:

NET TYPE: Port Restricted Cone NAT(5)

  • a) 括号内的数字代表的是具体网络类型,这个数字后面将会用到。
  • b) 我们知道,UDP穿透是和待通信两端的网络类型密切相关的,并非所有网络都可穿透。UDPonNAT将网络分为9种,除去类型8不能通信外,其它都有可能通信,数字越小可能性越高,一般来说,只要通信两端中有一端网络类型小于等于5则网络就可能穿透。

如果运行结果类似于“UDP is blocked or The STUN server(stun.iptel.org: 3478) is NOT available.”,说明探测网络类型失败,有两种可能原因:

  • a) 主机所在网络不允许UDP通信,这种情况UDPonNAT是无法工作的。
  • b) UDPonNAT使用的开放STUN server可能坏掉了,您可以通过修改stunclient.conf文件中的stun_server项来换一个其他STUN server再试试,以下是一个可用的STUN server列表:
            stun01.sipphone.com
            stun.ekiga.net
            stun.fwdnet.net
            stun.ideasip.com
            stun.iptel.org
            stun.rixtelecom.se
            stun.schlund.de
            stunserver.org
            stun.softjoys.com
            stun.voiparound.com
            stun.voipbuster.com
            stun.voipstunt.com
            stun.voxgratia.org
            stun.xten.com

注意:对于教育网的用户来说,因为免费的STUN server大多是国际流量,教育网内可能无法直接访问,因而UDPonNAT包中提供了一个替代程序:cernet.exe,通过运行它你也可以获得当前网络类型,但没有stunclient.exe的准确性高。

  • 3, 注册两个GMail账号,这是因为UDPonNAT在建立UDP连接过程中需要使用GTalk做辅助。比如 [email protected]/[email protected],注意注册账号后还需要使用GTalk软件分别以两个账号登入并且互相加为好 友,确认互相可收发消息。
  • 4, 配置UDPonNAT Server端。UDPonNAT Server端运行在主机C上,它等待来自指定UDPonNAT Client端的数据并将其转发到实际的UDP应用Server端口上,我们这里的UDP应用Server是OpenVPN Server。通过正确填写UDPonNAT目录下的server.conf文件来进行Server端配置。
  • a) to表示应用Server的UDP端口,比如OpenVPN监听的是“127.0.0.1:1194”。
  • b) net_type是第2步中获取的网络类型数字。
  • c) stun_server如果是教育网,请使用“stun.l.google.com:19302”。
  • d) GTalk_server一般保留不变即可。
  • e) i表示Server端使用的GTalk用户,uServer。
  • f) allowed_user表示允许哪个用户从UDPonNAT Client端接入,uClient。
  • 5, 配置UDPonNAT Client端。UDPonNAT Client端运行在主机H上,它从指定的端口等待UDP应用Client发出的数据包并将这些数据包穿透NAT设备转发给C上的UDPonNAT Server,我们这里的UDP应用Client是OpenVPN Client。同样需要填写配置文件client.conf:
  • a) listen表示UDPonNAT的监听端口。需要注意的是UDP应用Client(OpenVPN)也需要将服务器的地址设为这个端口,即将发往应用服务器的数据发送到这里。
  • b) net_type是第2步中获取的网络类型数字。
  • c) stun_server如果是教育网,请使用“stun.l.google.com:19302”。
  • d) GTalk_server一般保留不变即可。
  • e) i表示Client端使用的GTalk用户,uClient。
  • f) server_user表示UDPonNAT Server用户,只有该用户所在的服务器才能与之通信。
  • 6, 启动各个软件。
  • a) 启动主机C上的UDP应用软件OpenVPN Server。
  • b) 启动主机C上的UDPonNAT Server,只要在UDPonNAT目录下运行server.exe并且按提示输入密码即可。等待数秒后您可以使用uClient用户登入到GTalk,这时您应该看到uServer用户已在线。
  • c) 回家,打开主机H,运行UDPonNAT Client,同样,只须在UDPonNAT目录下运行client.exe并且按提示输入密码即可。等待数秒后,UDPonNAT将提示您连接是否建立或者失败。
  • d) 如连接成功建立,这时启动UDP应用Client(OpenVPN Client),不过记得将OpenVPN的服务器地址设成client.conf中的listen地址。

后记:

UDPonNAT是我在08年9月即完成的,期间一直在搭配OpenVPN使用,因为没能写文档的原因而拖到了09年元旦才发出来。

我写的几个小软件基本上都是源于我自己的实际需要,比如stripcc是因为看C项目代码无法忍受太多的条件编译分支破坏思路,GAppProxy是因为我住在教育网环境内无法访问国际网络,而UDPonNAT也是因为我需要在家里登入到工作的电脑上。

UDPonNAT的思路直接来源于我在08年5月写的一片文章《不需公网IP架设OpenVPN》, 该文章里附带了一些python的实现脚本,但后来我发现很多朋友无法正确使用该脚本,其中也包括一些计算机基础很好的朋友,因而最终萌发了写一个类似功 能的更高效更易配置的独立软件,这就是UDPonNAT。UDPonNAT使用GTalk替换了原来的GMail通信,让连接建立速度大大提高,并且支持 网络的类型也更多。

一段仅供自己使用的代码和一个功能类似的小的开源软件在我实际体会上还是有着很大的差别,主要是体现在开发工作量和使用体验上。发布UDPonNAT的目的是希望它能对其他人同样有用。

这段文档也许不够清楚,如果您在使用过程中遇到了任何问题,欢迎发邮件和我交流,[email protected]

关于STUN协议,参考:http://blog.chinaunix.net/u/10449/showart.php?id=1146001

 

关于GTalk通信,参考:http://blog.chinaunix.net/u/10449/showart.php?id=1147690

关于OpenVPN穿越NAT,参考:http://blog.chinaunix.net/u/10449/showart.php?id=688463

更多的参考文章见UDPonNAT的docs目录。

项目地址:http://code.google.com/p/udponnat/
下载地址:http://code.google.com/p/udponnat/downloads/list

相关 [udponnat udp 代理] 推荐:

UDPonNAT—— 一个UDP代理,能让普通的UDP应用跨越NAT网络设备

- 19GHz - iGFW
UDPonNAT是一个UDP代理,它能让普通的UDP应用跨越NAT网络设备. UDPonNAT使用Python编写,遵守GPL协议发布,可运行的平台包括Windows/Linux/Unix等. UDPonNAT有什么用途:. 普通的UDP应用大多具有如下的工作方式:. Server运行后,UDP服务被绑定到一个固定的IP:Port上,等待来自 Client的UDP数据包并响应.

使用 iptables 透明代理 TCP 与 UDP

- - 依云's Blog
本文来自 依云's Blog,转载请注明. 很早之前,我在 《Linux「真」全局 HTTP 代理方案》中介绍了 redsocks 方案. 不过它只处理了 TCP,并没有处理 UDP,DNS 也是采用强制 TCP 的方式来处理的,再加上它本身还要将请求转发到真正的代理客户端,延迟比较高. 然后,还可以结合 Wi-Fi 分享 或者 网络命令空间,玩点更有趣的.

NAT穿透(UDP打洞) - heaventouch - 博客园

- -
1、NAT(Network Address Translator)介绍. NAT有两大类,基本NAT和NAPT. 静态NAT:一个公网IP对应一个内部IP,一对一转换. 动态NAT:N个公网IP对应M个内部IP,不固定的一对一转换关系. 现在基本使用这种,又分为对称和锥型NAT. 锥型NAT,有完全锥型、受限制锥型、端口受限制锥型三种:.

GitHub - cnlh/nps: 一款轻量级、功能强大的内网穿透代理服务器。支持tcp、udp流量转发,支持内网http代理、内网socks5代理,同时支持snappy压缩、站点保护、加密传输、多路复用、header修改等。支持web图形化管理,集成多用户模式。

- -
nps是一款轻量级、高性能、功能强大的. tcp、udp流量转发,可支持任何. tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还. 支持内网http代理、内网socks5代理、. p2p等,并带有功能强大的web管理端. 做微信公众号开发、小程序开发等----> 域名代理模式.

推荐一些socket工具,TCP、UDP调试、抓包工具

- - IT技术博客大学习
标签:   socket   抓包.    还记得我在很久很久以前和大家推荐的 Fiddler和 Charles debugger么. 他们都是HTTP的神器级调试工具,非常非常的好用. 好工具能让你事半功倍,基本上,我是属于彻头彻尾的工具控. 号称高级开发框架,“目标是向Java框架、Rails On Ruby、Python Django Pylons等一流框架发起挑战”的一种以socket方式运行的PHP框架.

ffmpeg 录制udp电视信号,视频文件

- - 开源软件 - ITeye博客
ffmpeg -i udp://@:6980  -map 0:p:254  -acodec copy -vcodec copy -sameq  254.ts -map 0:p:255  -acodec copy -vcodec copy -sameq   255.ts  -map 0:0 -map 0:0.

为什么UDP有时比TCP更有优势

- - SegmentFault 最新的文章
野狗科技嵌入式工程师,曾在TP-Link从事相关工作,在嵌入式研究上经验丰富. 野狗官博: https://blog.wilddog.com/. 野狗官网: https://www.wilddog.com/. 公众订阅号:wilddogbaas. 随着网络技术飞速发展,网速已不再是传输的瓶颈,UDP协议以其简单、传输快的优势,在越来越多场景下取代了TCP,如网页浏览、流媒体、实时游戏、物联网.

视频面试传输协议到底是 TCP 还是 UDP

- - IT瘾-dev
又是一年一度的秋季校招开始了,以往的校招各个公司都会在公司现场或者学校现场安排学生进行现场面试. 但是今年由于疫情的原因,不允许让同学在现场进行一个面试,所以今年的面试形式就从线下转到了线上,面试形式的转变,但是我们考核学生的方式依旧没有转变. 校招的同学和社招的同学有很大的不同,他们没有丰富的工作经验,没有太多的项目经历,那么我们如何去衡量一个校招的同学呢.

NAT穿透技术详解(udp打洞精髓附代码) - lyztyycode的博客 - CSDN博客

- -
以前自己写的代码都只是在本地进行c/s通信,今天想写一个可以跨越外网的c/s通信,这里我就用udp实现一个点对点的不同外网的通信. 用到的技术就是nat穿透技术,这里最直接使用的就是udp打洞技术. 如果你需要nat穿透技术的详解点这里:. 一个已知的外网服务器S(ip+port),两个位于不同外网的客户端A, B.

udp打洞穿透nat实现p2p GitHub - pannzh/P2P-Over-MiddleBoxes-Demo: A simple demo of P2P communication over middle boxes such as NAT

- -
一个P2P聊天程序,使用UDP打洞创建链接. ./p2pchat/server <服务器端口号> ./p2pchat/client <服务器IP>:<服务器端口号> >>> help. 该UDP打洞示例仅支持锥形地址转换器(Cone NAT),如果两个客户端都在同一个公网结点下,需要确保出口路由器支持.