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

  • 超级树 评论于 回复

    光猫里使用dmz功能指向了我自己的台式电脑,然后家里就只有我一台电脑,惨遭厄运,被网络攻击了
    表现为玩游戏的时候突然被锁屏, 上密码。
    然后解开以后所有文件资料全变成了乱码格式,百度了一下是遭遇了勒索病毒,
    心态崩了,这如何是好。

    • Bug侠 评论于 回复

      @超级树
      深感抱歉,是本文的疏漏

  • L6B 评论于 回复

    大佬我尝试了很多方法,也看了你好多文章,目前我已经解决了nat类型,但是还是解决不了ping自己不通,朋友也ping不到我,这个问题怎么解决,麻烦大佬告诉个方法,我该设置的都设置了

    • Bug侠 评论于 回复

      @L6B
      检查是否给予edge(客户端)管理员权限,导致程序无法给虚拟网卡分配IP
      检查本机是否存在多张TAP网卡(比如TeamView就可能会和N2N虚拟网卡冲突),使用 -d “网卡名称” 来指定EasyN2N使用的网卡

    • L6B 评论于 回复

      @L6B
      大佬我现在是手动设置虚拟网卡ip,和小黄鸭ip设置成一样的,然后现在能ping通了,但是这样会有什么缺点吗

  • www 评论于 回复

    老板你好,我想让我的服务器调用我电脑上的接口。服务器公网,我电脑是大内网。能不能实现对接以后服务器调用接口时使用localhost而不是ip地址来调用?因为有跨域问题,所以想用local host

  • jwbwd 评论于 回复

    我两台都是sym nat,但还是能点对点。延迟2ms

  • MOGAMI 评论于 回复

    想咨询下 本来是两台电脑接的同一个路由器下 NAT都是第二种可以显示直连 但我把一台电脑换了个位置之后直接连得光猫不再经过路由器 NAT测试后依然也是2 但是变成了中转 这有什么办法吗

  • 城霖 评论于 回复

    请问大佬 GTFO这样类型的游戏 也是3位玩家加入另一个房主的房间 用另一位羽翼城大佬的某个软件可以连 N2N这个能适用吗 因为不太清楚原理是否一样

  • 不归浪子 评论于 回复

    站长您好,麻烦问一下,我想用这个跟朋友联机老游戏盟军敢死队,问题是同城同区同运营商(移动的)都延迟特别高,都超过300ms了,试了试您说的这两种办法貌似都没什么用,net类型一直没变化,该咋办呢?

  • 大大! 评论于 回复

    BUG侠请问一下如果N2N放在服务器上启动supernode后,在服务器上搭建游戏服务端但是需要他们进行组网游戏,服务器固定IP后【10.1.0.1】玩家使用N2N链接游戏服务端IP填写10.1.0.1:XXXX,请问使用P2P联机稳定还是中转更稳定!

    • Bug侠 评论于 回复

      @大大!
      联机稳定性得具体测试才能判断,比如https://bugxia.com/2071.html
      上述文章就贴出了一个中转反而比P2P更稳定的例子

      • 大大! 评论于 回复

        @Bug侠
        使用N2N服务器中转进行局域网联机,如我之前所说人数10+后,网卡没有关闭但会掉线,WIn系统N2N是否能通过参数来调整虚拟网卡的默认网关,

  • ftxjmhh 评论于 回复

    请教下站长,之前修改了朋友们光猫的Upnp及DMZ主机,都是Full Cone。有阵子没上,最近回来提示端口更改。现在发现我们的NAT类型都变成了Symmetrict NAT。检查光猫的设置并动。

    • Bug侠 评论于 回复

      @ftxjmhh
      N2N服务端的端口改变,不会影响你本地网络的NAT类型(这两者完全不沾边),建议还是排查本地网络情况 :笑哭:

  • jeston 评论于 回复

    不知道2023年還能不能獲得回覆,我現在用tailscale組虛擬局域網用moonlight,所在城市離家300公里左右,電信和聯通組,互相ping是30-40左右,這算是直連嗎?一直沒辦法做到個位數的延遲。而且經常瞬時高到2 300的延遲又恢復,很影響遊戲體驗,不知道有沒有設置什麼是可以緩解呢

    • Bug侠 评论于 回复

      @jeston
      1.通过距离和延迟判断是否P2P还真不好说,tailscale是支持P2P的,它提供的中转服务器应该大概率是国外的,所以如果用它的服务器走中转,那延迟应该至少3位数,你的30~40ms延迟应该就是P2P无疑了,参考https://tailscale.com/kb/1094/is-all-traffic-routed-through-tailscale/
      2.个位数的延迟很理想,我这边是同城(<10km)同运营商下才能做到,更何况你那边距离远还跨了运营商
      3.从几十ms的延迟跨到几百ms,如果这个几百ms是持续性的,那很有可能是从P2P切换到PSP了,说明你的某一方的网络环境出现了波动(原因未知)
      4.为了获得一个稳定的延迟,建议你走中转模式,可以搜索“tailscale自定义中转节点”

      • jeston 评论于 回复

        @Bug侠
        我用系統cmd去ping,ttl是128,我查了一下,好像這就意味著中間沒有中轉路由直連的意思麽,幾百ms倒不是持續,可能幾秒鐘又好了,就這幾秒遊戲會串流卡頓,如果確定是直連我也放棄折騰了,中轉應該更超過30-40ms吧,還是說穩定的延遲,即使比30 40高,玩遊戲體驗反而更好

        • Bug侠 评论于 回复

          @jeston
          1.既然已经判断出是P2P了,如果P2P还不能满足你,那只能走中转模式了
          2.中转的延迟及速度质量取决于那台做中转的服务器,假设两台客户端A\B,那中转情况下【A到B的延迟 = A到服务器的延迟 + B到服务器的延迟】。比如是一台美国服务器,从中国出发,不管是A还是B,它们到美国的延迟最低都120ms左右,所以A到B走美国中转,那延迟大概在200~300ms之间,当然还必须保证A和B到服务端的延迟都稳定,这么高的延迟,玩游戏就别想了
          3.所以,想要中转情况下的稳定延迟,这台中转服务器一般都是选择不管到A和B延迟都很低的服务器作为中转(比如国内线路服务器),这样才能保证中转时,A到B的延迟做到最低

          • Bug侠 评论于 回复

            @Bug侠
            另外,补充一点,如果是中转模式,除了延迟,还有得考虑服务器的带宽,如果中转服务器的带宽太小,比如5M(512KB/s),那高码率的串流也就可以放弃了

      • jeston 评论于 回复

        @Bug侠
        我剛剛查了下,tailscale可以使用tailscale status查看連接的方式,顯示:active; direct 就是p2p直連,我看我已經是了,看來延遲已經是不能再縮短了,已經是直連

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