使用N2N搭建虚拟局域网联机游戏(服务端)

分享, 折腾 2018/04/14

最近在折腾的一件事:如何在没有公网IP的情况下进行局域网游戏?

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

前段时间不知怎么的,一群奔三的人居然想要联机CS。第一时间想到的是对战平台,可是总有几个强迫症,不想让电脑里再多安装一个软件。没办法,转而研究很古老的虚拟局域网软件Hamachi和LAN Bridger。Hamachi的小问题很多,个别机器无法成功连接,就算能ping通对方,延迟也是奇高。而LAN Bridger干脆是客户端都无法下载……接着就是各种尝试不同的方案,最终找到了一个比较完美的解决方案:N2N

客户端

本站已搭建免费公益N2N服务端,并制作了简易的N2N的启动器,如需直接联机游戏,请参考:

使用N2N搭建虚拟局域网联机游戏(客户端)

准备

一台有公网IP的服务器、VPS等,作为服务端

服务端(Linux)

N2N根据功能特性不同,分为官方版(v2)和分支版(v2s),官方版v1和分支v2s由于年久缺更,已经不再推荐使用

所以这里仅列举官方最新源码编译的N2N

git clone https://github.com/ntop/n2n.git
cd n2n
./autogen.sh
./configure
make && make install

启动服务端,一行命令的事

supernode -l 端口号 -f

参数说明

-f 前台运行(此参数只有N2N v2版本有效,若不加该参数,则为前台运行)
-u 指定运行所用的UID(可选)
-g 指定运行所用的GID(可选)
-v 输出比较详细的log(可选)

服务端如开启iptables\firewalld\ufw等防火墙,需要放行supernode所设置的端口,否则客户端无法连接

#firewalld
firewall-cmd --zone=public --add-port=9527/udp --permanent
firewall-cmd --reload
#iptables
iptables -I INPUT -p udp --dport 9527 -j ACCEPT
service iptables save
service iptables restart
#ufw
ufw allow 9527/udp

服务端(Windows)

win下的客户端(包含服务端)下载:https://github.com/lucktu/n2n/tree/master/Windows

解压到任意目录,比如:E:\SystemFile\Desktop\n2n_win

管理员模式打开CMD,运行

cd E:\SystemFile\Desktop\n2n_win
supernode_v2.exe -l 9527 -v

和Linux端类似,开启了防火墙的机器请注意放行指定的端口



78条评论

  • wjk 评论于

    有没有玩文明6的,找不到房间

    • jock 评论于

      @wjk 测试了一下可以看见局域网房间,就是要不断退到菜单重进才能看到,不一定什么时候刷出来

  • GH 评论于

    站长你好,我在自己服务器上搭建完以后,客户端连接会一直跳出WARNING: Supernode not responding, now trying ****(我的服务器ip),在服务端也会重复Purging old registrations; Remove 0 registrations 实际上好像没有连接成功 这该怎么办

    • Bug侠 评论于

      @GH 客户端提示 Supernode not responding 表示没有连接到N2N服务端,需要检查服务端supernode端口是否放行或者关闭防火墙等组建再试试

      • GH 评论于

        @Bug侠 重装了一遍,解决了,谢谢站长。还有一个问题就是虚拟网卡名字如果带下划线的话,启动器会报warning:Unable to set device IP address 和 MTU,文件名、目录名或卷标语法不正确。不知道是n2n 还是启动器的问题(似乎对联机没影响)

  • msty 评论于

    提示:“找不到接受实际参数“-1”的位置形式参数”咋办啊,GitHub下载的

    • Bug侠 评论于

      @msty 啊?这么还有中文的提示?

      • msty 评论于

        @Bug侠 是的啊 我是Windows server 2012r2的系统,百度云的服务器,用的cmd窗口,下载了官网的链接。但是没有用呢

        • Bug侠 评论于

          @msty 哦哦,明白了,我以为是n2n提示的,原来是windows cmd窗口提示的。
          检查一下运行路径有没有带空格,有的话,用双引号括起来
          比如 cd “C:\Program Files\n2n\”

  • Yuzu 评论于

    非常感谢巨佬的文章以及工具,终于找到个饥荒也能用的联机工具,感激不尽!!!!!!

    • Bug侠 评论于

      @Yuzu 不用客气,能帮到你就是我荣幸~ :咧嘴:

  • 小小崽 评论于

    站长好,请问cmd客户端下的操作,能做到一个程序里填点基本参数直接傻瓜运行吗?没有电脑基础的表示有很大的困难。。。

    • Bug侠 评论于

      @小小崽 本站做的N2N启动器就是edge命令行的傻瓜式操作……不知道是不是你想要的……https://bugxia.com/357.html

  • 小小崽 评论于

    楼主你好,请问有windows版的N2N服务器吗?我处于公司的内网环境下,想跟其他的处于内网环境下的同事一起游戏,但是找不到方法。我们没有Linux的电脑、、、

    • Bug侠 评论于

      @小小崽 有的啊,就在本页,请往上翻翻……

      • 小小崽 评论于

        @Bug侠 今天的网站怎么回事,图片都打刷不开了,已经刷新N次了。。。想看看图片教程的。。

  • 扇子 评论于

    Bug侠 你好(听说你能立刻收到通知,,)
    我准备用N2N联机星际争霸1,游戏局域网采用UDP联机
    WIN7用V1 网络搭建并能 PING通,和实现共享文件
    无法搜索到游戏(双方均关闭防火墙,无第三方防御软件)

    • Bug侠 评论于

      @扇子 不好意思,这两天没注意到消息……
      星际我还没试过,但是理论上来说,一般没有N2N搞不定的联机游戏,出问题基本都是客户端这边的问题。
      我晚上下个星际1,试试以后再回复你 :笑哭:

      • 扇子 评论于

        @Bug侠 :笑哭: 谢谢大哥,等你消息啦

        • Bug侠 评论于

          @扇子 晚上记录一篇折腾的教程……

          • 扇子 评论于

            @Bug侠 如果需要我可以配合你 测试

    • Bug侠 评论于

      @扇子 嗨~我这边测试了,两个版本,一个3G多的什么官方原版(可以选择UDP和IPX),和一个100多M的那个1.08中文版(只可以选IPX),配和【Win10免IPX补丁】,前者无论UDP和IPX都无法搜索到对方,后者打上补丁,就可以使用IPX方式搜到对方,可以正常联机。

      • 扇子 评论于

        @Bug侠 3G 是重置版,,1.09版本可以用UDP 连吗 ? 什么补丁有链接吗,WIN7 有相关补丁吗?

        • Bug侠 评论于

          @扇子 UDP协议后续我再折腾看看,我这边试了,也是无法搜到
          不过IPX协议已成功,请参阅 https://bugxia.com/1749.html

  • 墨绿 评论于

    你好站长 我想问一下能ping通对方而且防火墙也关了 但在 无主之地3 还是搜不到对方,其他游戏又可以

    • Bug侠 评论于

      @墨绿 不好意思啊,我也没细研究过无主之地3的联机,我猜想很多游戏联机机制可能不太一样,导致无法搜到。如果其他游戏可以的话,那说明n2n组虚拟网是没有问题的,所以还得从游戏这边排查一下。 :害羞:

  • Hosigus 评论于

    站长好,首先感谢您的教程,非常有用。
    想向您询问一个特殊情况:我的服务端是ubuntu,启动了服务。客户端是windows。两个都是我自己用ntop/n2n的dev分支编译(交叉编译)的。服务端端口能正常通信(使用nc测试连接),服务端启动服务后客户端连接在”edge started”过后没有日志输出,即没有正常连接,也没有报错信息。当客户端连接一个错误的端口时,有错误信息输出。
    请问您可以给我一些提示或建议吗?

    • Bug侠 评论于

      @Hosigus 唉,我也是一知半解,所以只能是盲猜一番了。
      =============
      1.有没有尝试使用其他人编译的?或者是meyerd的n2n?同样是没有输出吗?
      2.拿着你编译的edge,换到别人的电脑或者其他网络环境再测试一次呢?
      3.nc是通的,应该是只能说明端口没有问题,问题还是发生在edge和supernode通信的过程中导致打洞不成功,这个得翻源代码逐行分析。

  • 有信 评论于

    站长你好,问题是这样的,能ping通,我的外网ip是192.168.0.105,在本机上创建游戏服务器,房间名称是192.168.0.105:7777,我设的n2n是192.168.10.4,小伙伴是192.168.10.1,小伙伴搜不到服务器。

    • Bug侠 评论于

      @有信 有几个不太明白的地方:
      1.外网ip是192.168.0.105?是你的路由器给的地址对吧,192.168.10.4是N2N指定的地址,然后房间名称是192.168.0.105:7777?7777是什么端口?这里有点不太明白
      2.你和朋友在不同的网络环境下,需要通过N2N联机对吧

      • 有信 评论于

        @Bug侠 1.是路由器ip,7777是游戏的端口,应该可以忽略,感觉上猜测需要connect 192.168.0.105才能连上游戏
        2.不在同一个地方,他家和我家的样子。

        • Bug侠 评论于

          @有信 明白了,也就是使用N2N组网的时候无法搜到对方,我把问题好像想复杂了。
          几个排查步骤:
          1、确认双方的N2N客户端均出现” Rx REGISTER_SUPER_ACK myMAC=……“的字样,表示连接上supernode服务器
          2、尝试ping对方的虚拟IP,如果确认已连上supernode服务器,并且双方都在同一个虚拟局域网网段内,但无法ping通,建议关闭windows防火墙再试。
          3、如果能ping通,但搜不到,可以尝试使用CS之类的自带调试台的游戏,使用connect命令手动连接到对方房间

          • 有信 评论于

            @Bug侠 1,2没问题,能ping通的,有一些其他游戏可以玩。
            3,问题在于不是所有游戏都能调出控制台,connect。假如可以connect,猜测这个游戏需要connect 192.168.0.105才可以。
            4,有没有可能让游戏只使用n2n的虚拟网卡
            (war3搜不到房间,晚上用cs试试。)

            • Bug侠 评论于

              @有信 我也不清楚有些游戏搜寻房间的机制
              之前有个评论和你的情况类似,当时我对war3也测试了一下,情况如下:
              ============
              我这边和朋友下了魔兽3测试了一下,同时也测试了CS、流星,都是可以正常联机的。见图:
              https://s2.ax1x.com/2019/02/07/ktQu4J.png
              https://s2.ax1x.com/2019/02/07/ktQmEF.png
              https://s2.ax1x.com/2019/02/07/ktQnN4.png
              不过测试过程中,发现一个问题:
              A建立的房间,B能看见也能加入;而B建立的房间,A无法看见也无法加入,但是双方都能ping通。
              于是就尝试把B的电脑防火墙关闭,重启游戏,再次建立房间,A就可以看见B的房间并成功加入游戏。
              ============

              • 有信 评论于

                @Bug侠 我想知道你用的是什么系统测试的,win7还是win10。
                可以确定不是防火墙的问题,试过双方都关闭防火墙,war3依旧搜不到房间,互相看不见
                cs是connect连上的,不是搜到的
                有没有可能让电脑以虚拟网卡为主

                • Bug侠 评论于

                  @有信 这是当时的截图,Win10 1803,我和我朋友都是Win10。
                  自定义程序使用指定网卡,这个路子我还没研究过,不过我这边确实是折腾了半天防火墙、路由器什么的就能搜到了,具体是不是防火墙导致的,还不能下定论。
                  不过既然能connect连上,说明N2N是通的,服务端是没问题的,更多的还得从客户端这边下手研究研究。

                • Bug侠 评论于

                  @有信 对了,还有一位博主对N2N有很深的研究,你可以参考参考他博客里的文章:http://www.lucktu.com/archives/783.html

  • 阿杜 评论于

    站长你好,我的意思是V2版本的那个管理端口怎么用(默认是5645),如何管理?这个端口能否修改?

    • Bug侠 评论于

      @阿杜 不好意思,这个参数我也没细研究过 :笑哭:

  • 阿杜 评论于

    您好,请问这个服务端在WIN7 命令行下如何运行?能详细说下吗?本人菜鸟,您上文只说了一句很简单带过,不懂:((

      • 阿杜 评论于

        @Bug侠 非常感谢,!!测试成功。另外问下如果我要自己定义管理端口的话,是不是就需要自己重新编译服务端,自己定义端口了?

        • Bug侠 评论于

          @阿杜 -l 可以指定端口,比如上面命令的9527,可以任意替换其他未被占用的端口

  • 许彪 评论于

    客户端是win10 1903系统,服务端centos7,端口无误,防火墙已关,都是用的V2。centos7启动成功了,windows客户端一直报WARNING: Supernode not responding – moving to 0 of 1

    • Bug侠 评论于

      @许彪 其他win客户端呢?出现这个提示,表示客户端连不上服务端,要么就是服务端的防火墙(iptables\firewalld),要么就是客户端win的防火墙,或者就是运营商UDP封锁,不过这个可能性较小,建议再多排查,我这边无法给你一个准确的解决方法,抱歉了~

      • 许彪 评论于

        @Bug侠 感谢站长~找到一个原因了,服务端开放的端口不能走TCP,走UDP就连接上了,但是很奇怪,服务端明明是编译的V2版本,客户端要用V2s才能连接上,下班试试能不能愉快游戏。再次感谢站长创作的优质内容!祝好

        • Bug侠 评论于

          @许彪 不用客气,找到原因就好,N2N只有v1和v2存在大版本的差异,V2s只是其一个分支 :萌:

  • Gene 评论于

    你好,我想问一下。不关闭windows防火墙的话,开放哪些端口才能ping通

    • Bug侠 评论于

      @Gene 单独设置放行ping的话可以参考:https://blog.csdn.net/wy_bk/article/details/85013933
      =====
      p.s 放行ping而外,如果还要联机游戏,还需要再新建游戏的tcp\udp入站出站规则,略微麻烦

  • 林半仙 评论于

    你好想问一下 centos可以用客户端吗? 有具体方法吗?

    • Bug侠 评论于

      @林半仙 可以的,CentOS下使用n2n比Windows下还简单。不过很抱歉,我这边没有教程。

      • 林半仙 评论于

        @Bug侠 我自己试过 总是PING不通

        • Bug侠 评论于

          @林半仙 是两个edge之间不通吗?有没有检查防火墙firewalld或者iptables相关的设置。我这边不太方便,明晚回去可以折腾折腾CentOS下的客服端。

      • 林半仙 评论于

        @Bug侠 两台win 一台centos 用V2所有都ping不通 V1两台win可以ping通 CENTOS所有都不通。。

        • Bug侠 评论于

          @林半仙 好吧,这个情况我也没遇到过,所以暂时没法帮到你。明天我先在我这边部署一下Win和CentOS下v1和v2的环境,再分析分析,这会儿电脑没在手边……

        • Bug侠 评论于

          @林半仙 我这边搭建了2台Win和2台CentOS,都没有出现Win和CentOS无法互通的问题。
          https://bugxia.com/1342.html
          :笑哭:

  • shrek 评论于

    您好,我的情况是双方都能ping通,防火墙没有关闭,但是minecraft局域网游戏服务器搜寻不到对方,请问这可能是哪方面的原因呢?

    • Bug侠 评论于

      @shrek 不好意思,我的世界我没尝试过。不过如果双方都能ping通对方的话,可以试试用其他游戏测试连通性。
      比如我之前在联机CS时也是出现搜不到对方的问题,但是通过cs内置的控制台命令connect 192.168.*.* 就可以连接到对方建立的游戏里。

      • shrek 评论于

        @Bug侠 好的,谢谢您了。实在不行的话我直接用游戏对战平台了。

  • linmo 评论于

    能不能出个关于手机hin2n的配置教程呢,

  • whitedew 评论于

    老哥我的debug窗口没有东西https://i.loli.net/2019/01/01/5c2acff3a1e78.jpg
    ,ping不通朋友防火墙都关了

    • Bug侠 评论于

      @whitedew 不好意思,目前 win10 1809 下会有这个bug,正在修复

  • 帝国 评论于

    我参考您的文章和其他一些教程搭建好了n2n,连接信息也是成功的,但是游戏里还是看不到对方。游戏是文明6,steam正版,有局域网模式。

    • Bug侠 评论于

      @帝国 双方都能ping通对方吗?

  • 冰皇 评论于

    emmmm,我在联机工具上好像出现了些问题,一个人连进房间另外一个人就进不去了,只要那个人退出,这个进不去的人就可以进去,ip没有冲突,不知道为什么

  • 大头 评论于

    你这个还是两两连接啊?怎么组成局域网呢?

    • Bug侠 评论于

      @大头 怎么是两两连接呢……不同的客户端(edge)自定义同段但不同的IP,加入相同的小组,再连接相同的中心节点(supernode),就可以组网了啊。

      • 大头 评论于

        @Bug侠 必须连接相同的小组才行啊? 用这个吗?
        -c 用于区分节点的社区(组)名

        • Bug侠 评论于

          @大头 对,同IP段不同IP、同小组、同密码、同中心节点,否则即使连上中心节点,也是无法互通的。

          • 大头 评论于

            @Bug侠 谢谢大牛牛,有qq吗

            • Bug侠 评论于

              @大头 QQ万年不在线一次,有事直接留言就行,我能立刻收到通知。 :二哈:

  • 猫头鹰 评论于

    您好,请问N2N是否可以帮助电信和网通的玩家顺利的p2p联机(一款叫做欧陆风云的游戏,通过steam联机,全国各地共19个人)?我是个新手,在挑选工具上犹疑不决,N2N跟Softethen VPN哪个更合用呢?

    • Bug侠 评论于

      @猫头鹰 欧陆风云有局域网联机模式吗?如果有的话,N2N就可以帮助你和其他朋友组成一个虚拟的局域网。
      softether v*p*n和n2n的原理不一样,n2n组成的虚拟局域网数据传输可以不经过中转服务器,所以能获得更好的延迟,并且部署比较简单。
      如果只是为了联机游戏,还是推荐n2n

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