如何让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 条评论

  • Yokirot 评论于 回复

    请问我跟朋友在命令窗口ping值4ms应该是直连状态,但是n2n测试工具ping下来确是60ms非直连,这是为什么呢

    • Bug侠 评论于 回复

      @Yokirot
      呃……不应该啊,EasyN2N的ping和Windows的Ping原理都是ICMP协议。可以尝试用TCP\UDP的Ping试试延迟

      • Yokirot 评论于 回复

        @Bug侠
        我们命令窗口ping的是物理ipv4地址,ping虚拟网ip的话倒是和n2n测试的一样。但主机列表看我们是直连状态,但还是延迟70ms :笑哭: 请问为啥直连延迟还这么高

        • Bug侠 评论于 回复

          @Yokirot
          我有点懵逼,不好意思 :笑哭:
          ping的物理ipv4地址是啥意思?你们本身就在一个物理局域网内吗?那为啥要组N2N呢?

          • Yokirot 评论于 回复

            @Bug侠
            :doge: 我小白,不太会描述问题,先跳过这部分吧。想问下EasyN2N的小组名称旁边的主机列表显示我跟我朋友是P2P直连,但延迟依旧在60ms,这正常吗

            • Bug侠 评论于 回复

              @Yokirot
              你和你朋友分别在哪里呢?什么运营商?

              • Yokirot 评论于 回复

                @Bug侠
                贵州和山东,移动和联通

                • Bug侠 评论于

                  @Yokirot
                  贵州到山东的物理距离决定了你俩的直连延迟都不会低,更何况还跨了运营商。所以60ms的直连延迟的正常的。
                  本文所贴图里的5ms延迟情况:同城市同运营商下,虚拟网下的直连延迟。

  • busy 评论于 回复

    mc服务器也能用p2p直连吗

    • Bug侠 评论于 回复

      @busy
      必须的是可以的,p2p或psp都是在虚拟网下的连接模式

  • Cognition 评论于 回复

    首先感谢作者!

    最近两天使用了各种方法,想尝试直连我朋友的电脑,但最终依然是走了中转的延迟结果,作为门外汉,无奈只能寻求作者的帮助!以下是我俩的具体操作情况:

    我和我的朋友为同一校园网(同运营商、nat类型、在同一栋楼且是同款路由器),但双方无法通过p2p直连(延迟为70ms),期间我尝试过DMZ,检测自己的nat也变成了full cone,但依然没有直连成功。

    期间也确认了以下状况:
    双方的原始nat类型均为restricted cone;
    我的路由器确认开启了upnu状态;
    双方均一键关闭了防火墙并可以ping通不丢包;
    双方均设置n2n虚拟网卡约点数为最低;
    直接tracert 自动分配的对方ip,只显示对方电脑(没有其他设备);
    双方可以用线下局域网游戏直接发现、联机,延迟结果均为70左右。

    至今依然无法查明原因,恳望作者阅后能指点一二,不胜感谢!

    • Bug侠 评论于 回复

      @Cognition
      客气了,不过不好意思,我这边只能盲猜一波,几个点:
      1.P2P是概率事件,且不能仅以NAT类型来确定是否能够成功P2P。
      2.既然你们都是同一校园网了,内网IP不通吗?
      3.如果上述内网IP不通,并且可以做到full cone,那可以判断你们校园网用了VLAN隔离,大概就相当于你们看似在物理上是一个局域网内的,但每个子网又是独立的。
      4.你和你朋友N2N组网后,是在一个虚拟局域网内的,路由表是写好的,所以tracert一跳直达
      5.综上,我盲猜还是因为校园网的问题

      • busy 评论于 回复

        @Bug侠
        就是校园网问题,一个寝室局域网联机能看见房间,就是无法解析

  • Jx 评论于 回复

    站长,我的路由器设置DMZ只能设置最后一个点后面的数字,这就造成了小黄鸭启动会有个不能和局域网ip相同的限制,这怎么搞

    • Bug侠 评论于 回复

      @Jx
      ???
      DMZ指向的IP是你物理局域网的IP,和N2N的虚拟IP没关系的

      • Jx 评论于 回复

        @Bug侠
        我的路由 ip是 192.168.31.1,DMZ只能改192.168.31.xx,比如我改成了192.168.31.11,启动小黄鸭输入虚拟ip为192.168.31.1,就会提示不能相同,谢谢站长

        • Bug侠 评论于 回复

          @Jx
          虚拟IP和物理真实IP需要分属不同的段,否则就会冲突。
          比如你台式机是192.168.31.x,那N2N的IP就不能在31.x这个段内,随便指定一个别的,比如192.168.13.x

          • Jx 评论于 回复

            @Bug侠
            好的,谢谢站长,这样也有几率实现 full cone 是吧

  • Enoch 评论于 回复

    我自己电脑以及把-p 20486的20486开启公网同端口(路由器支持,且有公网IP)
    对端peer1是服务器,全端口开放
    为什么我ping peer1延迟是140ms【不连接n2n单独ping是30ms】,也就是说还是走了supernode
    以及tracerte只有一跳
    但这不合理啊qwq……

    • Bug侠 评论于 回复

      @Enoch
      我这边也没啥思路。不过可以简单分析一波:
      1.通过延迟判断走的是PSP,也就是P2P没成功,P2P没成功需要检查双方NAT,既然对端是服务器(假设其NAT正常),那大概率是你本地的问题,DMZ大法试了没?
      2.排查完NAT后,可以持续ping,看看是否有变化点(比如我这边有时候ping50次左右的时候,就从PSP切到P2P了)
      3.N2N情况下tracert只有一跳我还没遇到过
      4.配合edge、supernode日志再排查分析吧

      • Enoch 评论于 回复

        @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通的情况下有时候小组列表会打不开,显示打开列表失败,想问一下是什么原因导致的

    • Bug侠 评论于 回复

      @林钟寒艳
      1.没有强制P2P,P2P是个概率事件,大部分随机切的情况,是因为双方中至少有一方的NAT环境发生了改变,建议先从优化网络NAT环境开始折腾。
      2.EasyN2N 2.4修改了小组列表的功能,逻辑是发送数据给本机edge的管理端口(默认是5644),然后返回用户列表数据,应该不会出现这个提示啊,这个我暂时没有头绪

      • 林钟寒艳 评论于 回复

        @Bug侠
        好的,谢谢站长,我把防火墙的N2N相关设置都放开了,打开列表失败的机率小了很多,应该是和防火墙设置有关系

  • lucktu 评论于 回复

    其实,不用打开dmz,那个太霸道了:
    1、方法一,edge使用固定端口,上级路由器使用端口转发过来;
    2、最新的支持upnp的edge下,打开路由器的upnp支持。

    • Bug侠 评论于 回复

      @lucktu
      感谢大佬分享方法。我后来换了路由器,里面直接就有FullCone的开关,打开以后就再没管过 :笑哭:

      • 不会蹦的兔子 评论于 回复

        @Bug侠
        请问站长是什么路由器,也想开启远程玩单机大作

        • 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连接,数据经过服务器中转了

  • Siphon 评论于 回复

    tun/tap网卡能共享网络给PS4这类主机使用吗(类似netch),如果主机能加入虚拟局域网,那P2P游戏的延迟能改善好多

    • Bug侠 评论于 回复

      @Siphon
      这个问题还真是第一次遇见……好像也没有直接的方法。不过我倒是有个思路,比较麻烦
      假设:
      A\B是两台不分属两个不同的物理局域网下的PS4
      可以通过N2N的网对网的方法(https://bugxia.com/2228.html),实现两个PS4的物理局域网互通,也就间接的实现了加入同一个虚拟局域网
      但是验证起来不太方便,这里就仅提供个思路。 :咧嘴:

      • Siphon 评论于 回复

        @Bug侠
        想加群找人试验一下

    • 亮一光 评论于 回复

      @Siphon
      PS4或者ns可以用lanplay工具配合n2n进行局域网联机,比如玩高达exvs mb的局域网联机

      • 小狼 评论于 回复

        @亮一光
        lanplay工具无需n2n地址,目前我有多个公网地址组建。

  • svenmax 评论于 回复

    站长 最关键的nat调整你怎么没写啊 :笑哭:

    • Bug侠 评论于 回复

      @svenmax
      牵扯的东西太多了,没法做到一个通用的方案,比如最基本的路由器,大家都不一样,而且也不一定开DMZ什么的就能改善NAT类型。只能写一个大概的东西,我这边是软路由,集成Fullcone的开关……不能让大家都买个软路由吧…… :咧嘴: ,等我折腾明白了,再补充

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