如何让N2N虚拟局域网走P2P?简单测试

N2N 2020/09/21

废话就不展开说了。开始!

家里台式机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 ConePort 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指向台式机

注意:此步骤会将DMZ指向的设备完全暴露在公网下,易受到恶意攻击,请慎重开启

最后的效果:

再次测试

注意

本文所说的“有概率”,请看下图:

当我的NAT类型为Fullcone,公司是Symmetric,理论来说,是可以P2P的

但P2P不是一个开关(不是即开即生效)

在不断ping了200次左右时,NAT类型发生转变,延迟降低,可以判断为已建立P2P连接



100 条评论

  • 卖菜小哥 评论于 回复

    站长,我想问下达成P2P直连的标志是什么?
    我的两台设备组网成功,使用的服务器延迟是50ms,互相ping延迟只有17ms,这样算是P2P连接了吗?
    我是想利用局域网传输一些文件的,如果不是P2P好像会被会被封IP,所以很担心。
    请问能否在软件某个位置做一个标记,显示当前是否是P2P直连。
    最好是有一个开关或者附加参数,强制P2P连接,如果无法实现P2P,就显示连接不上。
    大概就这意思,不知道好不好实现

    • Bug侠 评论于 回复

      @卖菜小哥
      1.P2P的标志目前只有简单的通过【和强制中转下的延迟去比较】,或者【内置的主机列表下的PSP或P2P标识】来判断,后者不准确
      2.对,到服务器延迟50ms,如果中转,那AB客户端的延迟至少在50ms以上,你这边才17ms,必须是P2P无疑了
      3.如果不是P2P,通过PSP模式大流量的传输,目前的表现是:ISP这边会短暂的封禁该服务器的UDP端口,若干时间后自动恢复(所谓的UDP阻断)
      4.强制P2P连接的开关在n2n官方的git上有朋友已经提出了
      https://github.com/ntop/n2n/issues/784
      只不过目前还没实现…… :doge:

  • ReDawn 评论于 回复

    站长您好!请问edge有固定的教程么?我的网络由电信光猫和小米路由器组成,小米路由器已经设置了DMZ,但是光猫没有超级密码,只能设置端口映射

      • ReDawn 评论于 回复

        @Bug侠
        谢谢大佬!另外还想请教一个事情,因为我们这边群里有少部分人是在国外,可以连上p2p但是延迟不如腾讯云低,虽然可以加-s1但是因为带宽有限(实际上群里的憨憨都会无脑选择服务器中转),有没有办法多开easyn2n呢,我目前设置的参数如下
        -a 10.228.87.1
        -E
        -x 1
        -p 52218
        -d T1
        我是想同时再开一个设置成
        -a 10.228.87.2
        -E
        -x 1
        -p 52219
        -d T2
        -S1
        这样网络好的连10.228.87.1走p2p,网络不好的联10.228.87.2走中转

        • Bug侠 评论于 回复

          @ReDawn
          可以使用命令直接启动edge.exe,参数就是你写的这些,如果不想用配置文件加载,直接拉通行也行。关键就在于安装多个虚拟网卡,让每个edge.exe使用不同的tap网卡,-d 参数就行。安装多个tap网卡本站也记录了:https://bugxia.com/2275.html
          ———
          还有个问题,我发现你举例的两个IP是一个段的,如果用-x都指定为1的话,数据经网关时会冲突,建议设置成一个1,一个2(话说这个-x好像有问题,建议手动修改跃点数)

        • Bug侠 评论于 回复

          @ReDawn
          我又回想了一下,请忽略我上面补充的那些…… :咧嘴:

  • 戏子 评论于 回复

    你好,我因为在跟朋友玩文明6,所以直接买了您这边的捐助用户服务器,可是还是一直不稳定,进去玩一会就会ping失败,试了软件里面自带的好几种方法都行不通,明明延迟很低但就是不稳定,p2p直连也试过了我这边是Full Cone,我朋友是Symmetric NAT,但是看说明应该是可以直连的,它是只要有一方是就可以自动连接还是需要别的操作,另外您这边说可以用-S1的命令直接中转,我也试了好像还是一样的问题

    • Bug侠 评论于 回复

      @戏子
      1.如果出现不稳定的情况,可能是遭遇到了UDP阻断,参阅EasyN2N问题解答【连接正常,但容易中断】部分 https://bugxia.com/2518.html
      2.如果有一方是Fullcone,那么不用你操作,一般会自动打通P2P
      3.根据第1条,即便使用 -S1 参数,N2N还是走的UDP协议传输

    • zuishui 评论于 回复

      @戏子
      :doge: 网工学习路过 UDP是一种尽力而为的传输协议 换句话说 不稳定

  • 炯炯无神 评论于 回复

    本来我们只是想简简单单的玩个局域网游戏,没想到被逼着学了些奇奇怪怪的知识。我想请教下作者,我跟朋友想远程组局域用p2p,我现在网络状态是动态公网IP,DMZ开启了,端口也映射了54320,我这边N2N配置好了(还在研究中),我朋友加进来是不是只要在他的N2N服务器列表上面填入公网IP加端口就可了?如果局域网组成功了是不是就可以共享文件夹?这样上传下载带宽就会按照我的最大带宽传输数据?

  • AAA 评论于 回复

    站长请问一下,类型4的话开付费能不能联机

    • Bug侠 评论于 回复

      @AAA
      NAT类型仅和能否成功建立P2P有关系,和组网没关系。联机成功与否取决于游戏是否支持~

  • jackpcg1 评论于 回复

    话说,是不是我只要吧这个nat改了之后就会自动给我p2p直连?

    • Bug侠 评论于 回复

      @jackpcg1
      对,只要NAT类型不是类型4(Symmetric),大概率都可以任意打通P2P

  • Koishi 评论于 回复

    站长超赞! 站长我想请教一下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的进程守护、服务自启、定时重启这些功能更是相当好用,由衷感谢站长!

    • Bug侠 评论于 回复

      @Koishi
      非常感谢这么走心的评论!
      但是这里有个问题,N2N和大多数软件一样,不支持服务端到客户端之间通过IPv6连接(所以你说的10~20ms的延迟,应该是IPv4下的P2P)
      根据官方的文档,目前仅能做到“N2N隧道内传输 IPv6 数据包”,所以前提是你已经和对方通过IPv4组建了N2N,才能走IPv6
      那么,既然已经打通了N2N,那还要IPv6搞毛线呢……
      ipv6痛点确实很多,尤其是支持的生态还不是很完善,只能是期待将来越来越好吧
      ————
      感谢使用EasyN2N~

      • Koishi 评论于 回复

        @Bug侠
        破案了,原来我一直看的不是官方github项目,是这个别人专门为ipv6改过的项目(https://github.com/mxre/n2n),声称支持supernode以v4only、v6only、v4+v6三种模式运行,edge node以v4或v6地址连接supernode

  • siri 评论于 回复

    站长,如何强制走中转啊,我和我朋友用自建服务器联机时走的P2P,但P2P丢包率特别高,大概有90%,用L2TP的时候延迟很低无丢包但是搜索不到对方房间

    • Bug侠 评论于 回复

      @siri
      这里:https://bugxia.com/2071.html

  • 唐子峻 评论于 回复

    大佬,我这边整成全锥形了,怎么直连呀?直接用我这个电脑开服务器吗?

    • Bug侠 评论于 回复

      @唐子峻
      不用开服务器,当你们双方组网成功后,N2N会自动尝试进行P2P直连,如果是full cone,成功率会很高

      • 唐子峻 评论于 回复

        @Bug侠
        是直接用免费服务器进行组网吗?

        • Bug侠 评论于 回复

          @唐子峻
          是的,你直连成功与否和服务器没关系,只要成功连接到N2N服务器,你这边会自动尝试和对方进行P2P组网

  • HXG 评论于 回复

    新手,成功将自己的类型改为full cone后
    获得外网ip就不知道怎么办了,和朋友摸索了半天得不出结果
    希望能得到解答,非常感谢

    • xiange 评论于 回复

      @HXG
      噢鬼哥!!

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)