前言
想和在114514公里外的好基友一起van游戏
但是苦于没有公网ip,咋办捏?
你可能会说:哎呀简单,买张机票飞过去,去他家玩就可以力awa
但可不是谁都像你那么有¥!!!
但是现在有一个工具可以实现模拟你和基友处于同一局域网下,这样就可以让身处“天涯”的朋友“若比邻”了
他就是——内网穿透!
介绍搬运一下博客园大佬cyrus0w的主页 – 博客园 (cnblogs.com)
原理介绍搬运一下cyrus0w大佬的
对于在NAT之后的服务器来说,其不是不能主动访问公网端口,而是不能反过来有效的被公网访问。所以可以在中间架设一个公网服务器,让在NAT之后的服务器持续主动访问这个拥有公网IP地址的服务器,,这样内网服务器就成功与公网中转服务器建立了一个连接通道。然后当有任何其他NAT后的客户端主动连接公网中转服务器时,公网服务器接收到连接请求之后马上把这连接请求通过先前建立好的隧道转发到内网服务器,内网服务器将响应数据包再原路转发回去,最终到达公网中转服务器,然后返回给其他NAT后的客户端。
但是在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大
因此,P2P技术应运而生。
什么是P2P
P2P,是Peer-To-Peer 的简称,翻译成”对等网络”或者”点对点网络”。P2P是一种分布式网络,网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源需要由网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源(服务和内容)获取者(Client)
点对点穿透原理
在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。只要是数据量很大,而一般利用中转服务器又需要一定规模投入的应用,我们都可以考虑用P2P技术。
1.UDP打洞技术
最为常见的实现P2P的方式是采用UDP打洞技术,UDP打洞技术是通过中间服务器的协助在各自的NAT网关上建立相关的表项,使P2P连接的双方发送的报文能够直接穿透对方的NAT网关,从而实现P2P客户端互连。如果两台位于NAT设备后面的P2P客户端希望在自己的NAT网关上打个洞,那么他们需要一个协助者——集中服务器,并且还需要一种用于打洞的Session建立机制。
Session建立机制:
假定客户端A要发起对客户端B的直接连接,具体的“打洞”过程如下:
(1)A最初不知道如何向客户端B发起连接,于是A向集中服务器(本质上是一台被设置在公网上的服务器,建立P2P的双方都可以直接访问到这台服务器。位于NAT网关后面的客户端A和B都可以与一台已知的集中服务器建立连接,并通过这台集中服务器了解对方的信息并中转各自的信息)发送消息,请求集中服务器帮助建立与客户端B的UDP连接。
(2)集中服务器将含有B的外网和内网的地址二元组发给A,同时,集中服务器将包含有A的外网和内网的地址二元组信息的消息也发给B。这样一来, A与B就都知道对方外网和内网的地址二元组信息了。
(3)当A收到由集中服务器发来的包含B的外网和内网的地址二元组信息后,A开始向B的地址二元组发送UDP数据包,并且A会自动锁定第一个给出响应的B的地址二元组。同理,当B收到由集中服务器发来的A的外网和内网地址二元组信息后,也会开始向A的外网和内网的地址二元组发送UDP数据包,并且自动锁定第一个得到A回应的地址二元组。一旦A与B都向对方的NAT设备在外网上的地址二元组发送了数据包,就打开了A与B之间的“洞”,A与B向对方的外网地址发送数据,等效为向对方的客户端直接发送UDP数据包了。一旦应用程序确认已经可以通过往对方的外网地址发送数据包的方式让数据包到达NAT后面的目的应用程序,程序会自动停止继续发送用于“打洞”的数据包,转而开始真正的P2P数据传输。
当然,UDP转换协议提供的“洞”不是绝对可靠的,多数NAT设备内部都有一个UDP转换的空闲状态计时器,如果在一段时间内没有UDP数据通信,NAT设备会关掉由“打洞”过程打出来的“洞”。如果P2P应用程序希望“洞”的存活时间不受NAT网关的限制,就最好在穿越NAT以后设定一个穿越的有效期。2.TCP打洞技术
从现在的主流应用的角度上来看,基于TCP的P2P应用显然不如基于UDP的应用那么广泛,但是也存在打洞的需求。TCP相对于UDP而言要复杂的多,TCP连接的建立要依赖于三次握手的交互,所以NAT网关在处理TCP连接的时候,需要更多的开销。但是,由于TCP协议完备的状态机机制,TCP反而比UDP更能精确的获取某个Session的生命期。
一种新的代理类型 XTCP 能解决这个问题,实现方式可以是采用搭建FRP服务器的方式,在传输数据的两端都部署上FRP客户端用于建立直接的连接。
P2P相比于其他内网穿透实现方法,
拥有较佳的并行处理能力。
运用内存来管理交换资料,大幅度提高性能。
不用投资大量金钱在服务器的软,硬体设备。
适用于小规模的网路,维护容易。
大抵了解后正式进入实现环节!
实现(转Bug侠官网)
首先下载EasyN2N客户端
请以管理员权限运行n2n.exe(小黄鸭图标右键 —— 以管理员身份运行)
初次运行时,启动器会自动安装所需要的虚拟网卡驱动
注:安装驱动时如果出现Windows安全提示,请信任即可
启动后见下图
需要选择或操作的几个选项
服务器:提供N2N组网的服务器(EasyN2N内置一个)
小组名称:指定一个虚拟网小组名称(请尽量复杂,以便和公共N2N服务器上其他小组区分开)
虚拟IP:指定一个虚拟的局域网IP(或者让软件自动分配,但可能存在一些未知问题)
服务器在软件里内置了一个免费的,但是我经过不懈努(bai)力(piao),找到了两个更为稳定的服务器ip
119.96.47.122:9527
124.223.8.254:9527
准备就绪后,点击启动
当需要让更多朋友加入你的虚拟小组时,可以使用以下方法
方法1:快捷加入
点击图标后,EasyN2N将把当前连接的服务器、虚拟IP、小组名称等导出为专用分享链接
如:
easyn2n://bjJuLnMxLmJ1Z3hpYS5jb206OTUyN0B6U213VUg0VldiQGF1dG9A
将上述链接复制粘贴给朋友,在朋友的客户端上,点击菜单导入
注:
若导出端为手动指定虚拟IP,则导入端需要手动填写虚拟IP的最后一位
方法2:手动加入
新加入的客户端,除虚拟IP设置不同而外,其他设置均需保持一致即可
朋友A:IP地址:192.168.66.1,组名称:zSmwUH4VWb,服务器:n2n.test.com
朋友B:IP地址:192.168.66.2,组名称:zSmwUH4VWb,服务器:n2n.test.com
朋友C:IP地址:192.168.66.3,组名称:zSmwUH4VWb,服务器:n2n.test.com
……
注:
1.若选择自定义虚拟IP(比如192.168.66.1),则需要所有客户端均在该IP段内(如192.168.66.x)
2.虚拟小组的服务器、组名称均需保持一致,每个客户端虚拟IP最后一位均需独立设置
测试
同理,也可以在两个客户端间建立TCP、UDP连接进行测试
OK,886!