使用N2N搭建虚拟局域网联机游戏(EasyN2N\小黄鸭)

N2N, 折腾 2018/08/02

最近在折腾的一件事:朋友天南海北,如何进行局域网游戏?

若干年前,一伙同学约战网吧,CS、红警之类的联机游戏玩的不亦乐乎,如今再想找回当年的感觉已经非常不容易。其中一个比较直接的原因是,不在一个局域网内。

捣鼓了一些很古老的虚拟局域网软件Hamachi和LAN Bridger。问题很多,延迟奇高,放弃……

接着就是各种尝试不同的方案,最终找到了一个比较完美的解决方案:N2N

相对于其他虚拟局域网方案,N2N在网络环境良好的情况下,能够实现P2P直连,有效的降低虚拟局域网的延迟,即便无法直连,通过服务器中转,也能获得不错的延迟

只要支持局域网的联机游戏,N2N都支持。目前我个人已测试成功的有:

CS、红警2、红警3、星际争霸1、魔兽争霸3、DOTA、方舟生存进化、文明6、群星Stellaris

流星蝴蝶剑、人类一败涂地、百战天虫、求生之路1&2、我的世界、火炬之光2、帝国时代2……

下载客户端

EasyN2N

使用方法

1.解压上述下载的压缩包

2.运行

请以管理员权限运行n2n.exe(小黄鸭图标右键 —— 以管理员身份运行

初次运行时,启动器会自动安装所需要的虚拟网卡驱动

注:安装驱动时如果出现Windows安全提示,请信任即可

3.启动

需要选择或操作的几个选项

服务器:提供N2N组网的服务器(EasyN2N内置,请根据软件内指引免费获取)

小组名称:指定一个虚拟网小组名称(请尽量复杂,以便和公共N2N服务器上其他小组区分开)

虚拟IP:指定一个虚拟的局域网IP(或者让软件自动分配,但可能存在一些未知问题)

准备就绪后,点击启动

注:可能会弹出Windows防火墙的提示,请放行

4.查看状态

其他客户端

当需要让更多朋友加入你的虚拟小组时,可以使用以下方法

方法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连接进行测试

关于延迟

目前常见的N2N传输,有两种方式

中转

当参与方网络环境相对复杂(比如校园网,或存在多层交换),无法建立P2P连接时,所有的数据传输都会经过服务器中转

中转模式下,A到B的延迟 ≈ A到服务器的延迟 + B到服务器的延迟

直连

当组网参与方网络环境比较纯净,NAT状态良好的情况下,N2N会在参与方之间建立P2P连接

此时所有的数据传输不会经过服务器中转,延迟能够极大程度降到最低

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

常见问题

一些常见的问题汇总

本文标签:


381 条评论

  • xiaolei 评论于 回复

    说实话,对这个代码挺好奇的,楼主可以部分开源吗,想连接一下,秋梨膏

    • xiaolei 评论于 回复

      @xiaolei
      了解,打错字了

      • Bug侠 评论于 回复

        @xiaolei
        n2n是开源的,https://github.com/ntop/n2n,启动器只是套了层壳子罢了 :汗:

  • Chris 评论于 回复

    我下载了这个n2n然后复制了一份给朋友,但是我们在网络适配器上显示的网络,就是以太网下面那一行字不一样,而且ping不通他

    • Bug侠 评论于 回复

      @Chris
      没有Tap-Windows Adapter那个吗?ping不通的原因比较多,不过一般都是windows自带防火墙的问题,再折腾折腾吧~

  • Sveax 评论于 回复

    站长您好,感谢您的教程。我有个问题想咨询下。
    单位局域网是个没有连接任何互联网的纯局域网而且网络环境复杂,是否可以搭建服务端?有没有win环境下的服务端linux不会用(=_=)

    • Bug侠 评论于 回复

      @Sveax
      呃,我给你捋一下吧。
      —————
      单位局域网服务器,比如A;
      该局域网外的某客户端,比如B、C、D;
      如果在A上面搭建n2n,因为B\C\D到A都不通,所以各个客户端之间也就无法组建n2n虚拟网;
      Win下的服务端见这里:https://file.bugxia.com/s/b6MAp6LS78b6XBp
      里面的 supernode_v*.exe 即为服务端,用法就一行命令:
      —————
      supernode -l 端口号 -f
      —————

      • svenmax 评论于 回复

        @Bug侠
        谢谢您的回复,单位的局域网虽然复杂,但是,有很多服务器(A)是B,C,D可以访问的。所以我觉得可以尝试下,复杂主要是有很多的端口被屏蔽了。

        • Bug侠 评论于 回复

          @svenmax
          不用谢,我以为是没法访问到。如果都能互相访问到,那就可以折腾折腾,端口被屏蔽这个也没辙,N2N的Supernode(服务端)到edge(客户端),走的UDP,而且也不支持动态端口,所以确实得折腾一番。

  • Asttear 评论于 回复

    用来红警3联机。我是电信的,有公网IP做服务器,友人A是电信的,友人B是移动。
    现在我和友人A测试联机正常,友人B同样设置却无法在房间里看见我和友人A(我们同样看不见他)。友人B的N2N应该是正确配置了的,Log显示也正常,而且也能互相 Ping 通。
    所以这是什么问题呢?

    • Bug侠 评论于 回复

      @Asttear
      呃,出现这种问题的朋友还是挺多的,得逐一分析,我列一下我的思路:
      1.任意两方如果可以通过N2N组网联机,说明N2N网络是正常的,可以排除服务端supernode的问题
      2.一般来说,搜不到对方的时候,也可以尝试使用CS等游戏,看看是否可以通过这些游戏自带的命令行的连接到对方
      3.能ping通,却无法搜索到对方,大多数还是Windows或者安装的第三方防火墙软件导致的,建议从这方面下手

      • Asttear 评论于 回复

        @Bug侠
        和友人C试了下,关了友人C的防火墙,结果出现了和友人B一样的问题,最后还是被逼着去用了浩方 :二哈:
        没有尝试别的游戏,毕竟红警的局域网联机并不能手动指定IP加入。
        我想不出别的原因了→_→再排查的话只能怀疑国产杀毒软件了……

      • Asttear 评论于 回复

        @Bug侠
        另外服务端 supernode_v2 在我这里经常出现莫名崩溃消失的情况,不知道博主有没有遇到过?

        • Bug侠 评论于 回复

          @Asttear
          哈,关了防火墙还是问题依旧的话,那我也没什么思路了,只能花点功夫多研究研究。
          玩N2N就是个折腾的过程,可能会遇到很多奇奇怪怪的问题。
          我这边没有遇到过崩溃的情况,我这边一直很稳定。 :笑哭:

          • Asttear 评论于 回复

            @Bug侠
            又试了下,发现双方都能 ping 通,然而虽然我能 TCP/UDP 测试通对方,对方却无论如何也接收不到我的返回状态,TCP测试就直接提醒我检查地址或端口了……防火墙什么都关掉了,真不知道是什么原因了……

            • Bug侠 评论于 回复

              @Asttear
              这个情况我之前也遇到了,但是是和一方的防火墙有关
              简单分析一下,Ping通,说明ICMP协议正常,也可以说明N2N组网是OK的,但是TCP\UDP协议不通,我猜测有可能是windows的防火墙或者是其他安全类软件进行了拦截……没办法,只能一点点的排查了
              :笑哭:

  • 帝国时代2 评论于 回复

    只有客户端下载链接没看到服务端的链接怎么建自己的服务器

    • Bug侠 评论于 回复

      @帝国时代2
      在这里:https://bugxia.com/336.html

  • LXJlin 评论于 回复

    dalao,我的Server 用N2N搭建了虚拟局域网,
    Server 的设置是 177.77.77.0
    PC 的设置是 177.77.77.1
    但是Server 中的MySQL数据库需要使用 192.168.200.131进行访问,因为他是虚拟机。
    简单的来说如何实现 PC访问Server中的 192.168.200.131
    目前百度了很多的教程,他们都没有详细的提及,包括类似于MC服务器的功能
    MC服务器是 127.0.0.1回环IP
    搭建局域网后的确会看见,因为他就是在回环里。
    希望站长能够完善一下该方面的教程。

    • Bug侠 评论于 回复

      @LXJlin
      有几个不明白的地方,大概梳理一下:
      1.意思是Server同时搭建了N2N服务器(中心节点 supernode)和MySQL数据库服务?
      2.PC和Server没有在同一个局域网网段下吗?
      3.然后你要具体实现什么功能呢?是想利用N2N服务,打通PC和Server?
      不好意思,我理解能力差…… :汗:

      • LXJlin 评论于 回复

        @Bug侠
        >目前有一台服务器,称其server
        >一台普通的家用电脑,称其为pc
        server下有一个数据库,他位于192.168.200.131下
        pc 与server打洞并且互相都ping通了,我现在遇到的问题是,不论跨网段还是同一网段均无法在pc上实现访问server下的数据库。

        • Bug侠 评论于 回复

          @LXJlin
          哦哦哦,大概明白了,意思是你想通过N2N实现类似于内网穿透的功能?
          能Ping通,说明N2N是隧道是没问题的,但是无法通过PC连接到Server,是不是MySQL绑定的监听端口(比如3306)没有对N2N的IP放行?另外要实现内网穿透,也可以搭建Frp服务,它的内网穿透要比N2N好用一些。

      • 明日 评论于 回复

        @Bug侠
        楼主你好n2n开启后能和朋友联机玩红警了 但是这时候其他软件就无法联网了,怎么办?

  • hsdnmm 评论于 回复

    和朋友打红警2,第一玩儿的时候联机正常,后来再玩儿就不行了。机器网络环境都没变,也不知道啥原因。。。。郁闷!!

    • Bug侠 评论于 回复

      @hsdnmm
      再试试其他游戏,CS 魔兽3什么的,没法搜到对方的原因比较多 :害羞:

      • hsdnmm 评论于 回复

        @Bug侠
        感谢回复,我再试试。

  • 许彪 评论于 回复

    站长,两台win10都连接上了centos7的supernode,但是都ping不通对方,显示请求超时,supernode is listening on UDP 9527 (main),两台win10 都关闭了防火墙,都是用的自己家的路由器,没有公网ip,您能帮忙分析一下问题可能出在哪么~~谢谢

    • 许彪 评论于 回复

      @许彪
      supernode is listening on UDP 9527 (main)是服务器开启supernode的提示,windows这边ping对方只显示请求超时,表述不清,见谅~~

      • Bug侠 评论于 回复

        @许彪
        确定成功连接到supernode了吗(调试窗口返回Rx REGISTER_SUPER_ACK myMAC=)?
        如果连不上supernode,排查建议:
        1、supernode端防火墙是否关闭或放行N2N端口
        2、运营商对UDP数据包是否封锁
        如果能连上supernode,但ping不通,排查建议
        1、检查edge双方组名称、密码、IP段是否一致
        2、更换网络环境、增加edge
        ============
        抱歉,暂时只能想到这么多了,一步一步的排查问题

        • 许彪 评论于 回复

          @Bug侠
          谢谢站长,确实已经正常连接到了supernode,CMD窗口:
          Rx REGISTER_SUPER_ACK myMAC=00:FF:36:72:BC:70 [IP:端口号] (external IP:端口号)
          ,edge的IP只有最后一位不同,应该是处于同一段的,后续我再多找几台电脑试一下,如果有小伙伴遇到一样的问题,欢迎一起讨论~~~

      • svenmax 评论于 回复

        @许彪
        站长好,我又来麻烦您了,
        这是我最近看到的一个项目
        不知道您能不能帮忙测试下,
        小白也不会编译这个,万分感谢。
        https://gitee.com/gnbdev/gnb

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