如何让N2N虚拟局域网走P2P?简单测试
废话就不展开说了。开始!
家里台式机A:192.168.123.1
公司台式机B:192.168.123.2
测试
通过 EasyN2N 自带的NAT类型测试,分别测的:家里、公司的网络NAT类型均为 Symmetrict NAT
PING延迟
分析
N2N是可以进行P2P通信的,在P2P连接下,虚拟局域网下的客户端连接延迟和稳定性都很不错,但前提是客户端所在网络NAT类型符合条件才可以实现P2P连接。
网络上关于NAT和P2P的关系这里就不啰嗦了,可以参考这篇文章 :NAT的四种类型及类型检测(详细介绍)
简单学习后,可以了解到P2P建立条件:
当联机的双方NAT类型有一方为Cone NAT时(以下前三种)才 有概率 建立P2P连接,如果双方都是Symmetric NAT,必然无法成功建立P2P连接
几种常见的NAT类型:
1.Full Cone
2.Restricted Cone
3.Port Restricted Cone
4.Symmetric NAT
结合上面的P2P条件,由于家里和公司的NAT类型均为 Symmetric NAT,所以无法建立P2P连接,只能通过N2N服务器中转通信
引用一段恩山论坛大佬总结的:
1.双方中只要有一方是Full Cone,可以直连
2.双方都是Restricted Cone或Port Restricted Cone,这种情况可以打洞,通过N2N服务器握手以后,双方的数据不再经过服务端
3.一方为Restricted Cone,另一方为Symmetric NAT,可以打洞,通过N2N服务器握手以后,双方的数据不再经过服务端
4.一方为端口Port Restricted Cone,另一方为Symmetric NAT,这种情况无法打洞,数据要走N2N服务器中转
5.双方都为Symmetric NAT,这种情况也是无法打洞的,数据要走N2N服务器中转
折腾
如果需要走P2P,则要调整当前网络的NAT类型,以符合P2P连接的条件
因为公司的网络比较固定(专线),并且上层交换设备无权操作,所以公司的网络这边只能放弃
同理,有些校园网、手机的4G\5G、公用WIFI等,都是这样的情况
方法1
来自 lucktu 大佬分享的方法:
方法1:edge使用固定端口,上级路由器使用端口转发过来
方法2:最新的支持upnp的edge下,打开路由器的upnp支持
方法2
打开路由器中的DMZ,将DMZ的IP指向台式机
最后的效果:
再次测试
注意
本文所说的“有概率”,请看下图:
当我的NAT类型为Fullcone,公司是Symmetric,理论来说,是可以P2P的
但P2P不是一个开关(不是即开即生效)
在不断ping了200次左右时,NAT类型发生转变,延迟降低,可以判断为已建立P2P连接
52条评论
站长请问一下,类型4的话开付费能不能联机
@AAA
NAT类型仅和能否成功建立P2P有关系,和组网没关系。联机成功与否取决于游戏是否支持~
话说,是不是我只要吧这个nat改了之后就会自动给我p2p直连?
@jackpcg1
对,只要NAT类型不是类型4(Symmetric),大概率都可以任意打通P2P
站长超赞! 站长我想请教一下ipv6的问题
前段时间开了个七日杀服务器,服务器本身是full cone类型的网络,用站长easyn2n工具进行联机,总共十来个玩家同时在线基本都是p2p,10-20ms延迟,偶尔才会飙高+丢包;有一个玩家是ipv6直连,延迟直接个位数,十分稳定
所以最近一直在鼓捣ipv6联机,尝试各种方式想达成在客户端做最少的操作甚至无操作或一次性操作,就能通过ipv6来直接进行联机游戏
掉了一堆头发之后基本是没什么成果hhh
ipv6痛点还是比较多,我个人觉得最大有两点
1.很多游戏服务器不支持ipv6
2.很多人没有ipv6,(尽管其实可以有,但不是每个人都会&愿意设置路由器和光猫
第1点我这两天刚好在尝试用端口转发,但终究还是没那个技术又没有前人造轮子,最终成效还是差点意思,而且强依赖客户端有v6,回过头想想感觉可能不如老老实实用n2n
那么问题就来了,N2N我记得是也有ipv6支持的,如果所有人统一走n2n,第1点就不成问题,那么两个同样有ipv6的玩家,通过n2n联机,是否会优先通过ipv6达成稳定高速的p2p呢?公益服务器又是否支持ipv6呢?
如果是的话,n2n应该就是目前网络环境下,小规模游戏联机最好的方案了,既能让没有ipv6的玩家通过p2p来联机,又不怎么影响ipv6玩家之间原本就有的直连体验、还能绕过游戏不支持ipv6的问题,也可以免去服主开放防火墙端口等操作(反正我是觉得能少麻烦一点是一点hh
哦对了,easyn2n的进程守护、服务自启、定时重启这些功能更是相当好用,由衷感谢站长!
@Koishi
非常感谢这么走心的评论!
但是这里有个问题,N2N和大多数软件一样,不支持服务端到客户端之间通过IPv6连接(所以你说的10~20ms的延迟,应该是IPv4下的P2P)
根据官方的文档,目前仅能做到“N2N隧道内传输 IPv6 数据包”,所以前提是你已经和对方通过IPv4组建了N2N,才能走IPv6
那么,既然已经打通了N2N,那还要IPv6搞毛线呢……
ipv6痛点确实很多,尤其是支持的生态还不是很完善,只能是期待将来越来越好吧
————
感谢使用EasyN2N~
@Bug侠
破案了,原来我一直看的不是官方github项目,是这个别人专门为ipv6改过的项目(https://github.com/mxre/n2n),声称支持supernode以v4only、v6only、v4+v6三种模式运行,edge node以v4或v6地址连接supernode
站长,如何强制走中转啊,我和我朋友用自建服务器联机时走的P2P,但P2P丢包率特别高,大概有90%,用L2TP的时候延迟很低无丢包但是搜索不到对方房间
@siri
这里:https://bugxia.com/2071.html
大佬,我这边整成全锥形了,怎么直连呀?直接用我这个电脑开服务器吗?
@唐子峻
不用开服务器,当你们双方组网成功后,N2N会自动尝试进行P2P直连,如果是full cone,成功率会很高
@Bug侠
是直接用免费服务器进行组网吗?
@唐子峻
是的,你直连成功与否和服务器没关系,只要成功连接到N2N服务器,你这边会自动尝试和对方进行P2P组网
@Bug侠
好的,谢谢大佬
新手,成功将自己的类型改为full cone后
获得外网ip就不知道怎么办了,和朋友摸索了半天得不出结果
希望能得到解答,非常感谢
@HXG
噢鬼哥!!
请问我跟朋友在命令窗口ping值4ms应该是直连状态,但是n2n测试工具ping下来确是60ms非直连,这是为什么呢
@Yokirot
呃……不应该啊,EasyN2N的ping和Windows的Ping原理都是ICMP协议。可以尝试用TCP\UDP的Ping试试延迟
@Bug侠
请问为啥直连延迟还这么高
我们命令窗口ping的是物理ipv4地址,ping虚拟网ip的话倒是和n2n测试的一样。但主机列表看我们是直连状态,但还是延迟70ms
@Yokirot
我有点懵逼,不好意思
ping的物理ipv4地址是啥意思?你们本身就在一个物理局域网内吗?那为啥要组N2N呢?
@Bug侠
我小白,不太会描述问题,先跳过这部分吧。想问下EasyN2N的小组名称旁边的主机列表显示我跟我朋友是P2P直连,但延迟依旧在60ms,这正常吗
@Yokirot
你和你朋友分别在哪里呢?什么运营商?
@Bug侠
贵州和山东,移动和联通
@Yokirot
贵州到山东的物理距离决定了你俩的直连延迟都不会低,更何况还跨了运营商。所以60ms的直连延迟的正常的。
本文所贴图里的5ms延迟情况:同城市同运营商下,虚拟网下的直连延迟。
mc服务器也能用p2p直连吗
@busy
必须的是可以的,p2p或psp都是在虚拟网下的连接模式
首先感谢作者!
最近两天使用了各种方法,想尝试直连我朋友的电脑,但最终依然是走了中转的延迟结果,作为门外汉,无奈只能寻求作者的帮助!以下是我俩的具体操作情况:
我和我的朋友为同一校园网(同运营商、nat类型、在同一栋楼且是同款路由器),但双方无法通过p2p直连(延迟为70ms),期间我尝试过DMZ,检测自己的nat也变成了full cone,但依然没有直连成功。
期间也确认了以下状况:
双方的原始nat类型均为restricted cone;
我的路由器确认开启了upnu状态;
双方均一键关闭了防火墙并可以ping通不丢包;
双方均设置n2n虚拟网卡约点数为最低;
直接tracert 自动分配的对方ip,只显示对方电脑(没有其他设备);
双方可以用线下局域网游戏直接发现、联机,延迟结果均为70左右。
至今依然无法查明原因,恳望作者阅后能指点一二,不胜感谢!
@Cognition
客气了,不过不好意思,我这边只能盲猜一波,几个点:
1.P2P是概率事件,且不能仅以NAT类型来确定是否能够成功P2P。
2.既然你们都是同一校园网了,内网IP不通吗?
3.如果上述内网IP不通,并且可以做到full cone,那可以判断你们校园网用了VLAN隔离,大概就相当于你们看似在物理上是一个局域网内的,但每个子网又是独立的。
4.你和你朋友N2N组网后,是在一个虚拟局域网内的,路由表是写好的,所以tracert一跳直达
5.综上,我盲猜还是因为校园网的问题
@Bug侠
就是校园网问题,一个寝室局域网联机能看见房间,就是无法解析
站长,我的路由器设置DMZ只能设置最后一个点后面的数字,这就造成了小黄鸭启动会有个不能和局域网ip相同的限制,这怎么搞
@Jx
???
DMZ指向的IP是你物理局域网的IP,和N2N的虚拟IP没关系的
@Bug侠
我的路由 ip是 192.168.31.1,DMZ只能改192.168.31.xx,比如我改成了192.168.31.11,启动小黄鸭输入虚拟ip为192.168.31.1,就会提示不能相同,谢谢站长
@Jx
虚拟IP和物理真实IP需要分属不同的段,否则就会冲突。
比如你台式机是192.168.31.x,那N2N的IP就不能在31.x这个段内,随便指定一个别的,比如192.168.13.x
@Bug侠
好的,谢谢站长,这样也有几率实现 full cone 是吧
我自己电脑以及把-p 20486的20486开启公网同端口(路由器支持,且有公网IP)
对端peer1是服务器,全端口开放
为什么我ping peer1延迟是140ms【不连接n2n单独ping是30ms】,也就是说还是走了supernode
以及tracerte只有一跳
但这不合理啊qwq……
@Enoch
我这边也没啥思路。不过可以简单分析一波:
1.通过延迟判断走的是PSP,也就是P2P没成功,P2P没成功需要检查双方NAT,既然对端是服务器(假设其NAT正常),那大概率是你本地的问题,DMZ大法试了没?
2.排查完NAT后,可以持续ping,看看是否有变化点(比如我这边有时候ping50次左右的时候,就从PSP切到P2P了)
3.N2N情况下tracert只有一跳我还没遇到过
4.配合edge、supernode日志再排查分析吧
@Bug侠
DMZ试过了,而且公网ip从其他服务器测试tcping成功的
另外又遇到了另外一个问题
按照github教程里面使用username-password和A4
用 -I -J -P -k -A4 登录之后,登录成功了,edge和supernode通信成功
但是无法和其他edge通信
确认-c指定了同一个社区,尝试过用相同账号和不同账号,都无法互通
确认不使用 -I -J -P -k -A4时可以互通
站长尝试过用username-password验证咩
恳请提供一点解决思路
万分感谢~~~!
站长,我和我朋友有时候是p2p,有时候是中转,有没有强制走p2p的端口设定啊,这样随机切换有点懵
还有就是双方ping通的情况下有时候小组列表会打不开,显示打开列表失败,想问一下是什么原因导致的
@林钟寒艳
1.没有强制P2P,P2P是个概率事件,大部分随机切的情况,是因为双方中至少有一方的NAT环境发生了改变,建议先从优化网络NAT环境开始折腾。
2.EasyN2N 2.4修改了小组列表的功能,逻辑是发送数据给本机edge的管理端口(默认是5644),然后返回用户列表数据,应该不会出现这个提示啊,这个我暂时没有头绪
@Bug侠
好的,谢谢站长,我把防火墙的N2N相关设置都放开了,打开列表失败的机率小了很多,应该是和防火墙设置有关系
其实,不用打开dmz,那个太霸道了:
1、方法一,edge使用固定端口,上级路由器使用端口转发过来;
2、最新的支持upnp的edge下,打开路由器的upnp支持。
@lucktu
感谢大佬分享方法。我后来换了路由器,里面直接就有FullCone的开关,打开以后就再没管过
@Bug侠
请问站长是什么路由器,也想开启远程玩单机大作
@不会蹦的兔子
这款:https://bugxia.com/1481.html
现在跑的PVE,下挂OpenWRT(https://www.right.com.cn/forum/thread-4053752-1-2.html)
新手可以直接刷OpenWRT
我和朋友建立网络,他的是Full Cone,我的是restrict nat,怎么不会建立p2p连接,数据经过服务器中转了
tun/tap网卡能共享网络给PS4这类主机使用吗(类似netch),如果主机能加入虚拟局域网,那P2P游戏的延迟能改善好多
@Siphon
这个问题还真是第一次遇见……好像也没有直接的方法。不过我倒是有个思路,比较麻烦
假设:
A\B是两台不分属两个不同的物理局域网下的PS4
可以通过N2N的网对网的方法(https://bugxia.com/2228.html),实现两个PS4的物理局域网互通,也就间接的实现了加入同一个虚拟局域网
但是验证起来不太方便,这里就仅提供个思路。
@Bug侠
想加群找人试验一下
@Siphon
PS4或者ns可以用lanplay工具配合n2n进行局域网联机,比如玩高达exvs mb的局域网联机
@亮一光
lanplay工具无需n2n地址,目前我有多个公网地址组建。
站长 最关键的nat调整你怎么没写啊
@svenmax
,等我折腾明白了,再补充
牵扯的东西太多了,没法做到一个通用的方案,比如最基本的路由器,大家都不一样,而且也不一定开DMZ什么的就能改善NAT类型。只能写一个大概的东西,我这边是软路由,集成Fullcone的开关……不能让大家都买个软路由吧……