Windows下使用N2N搭建虚拟局域网联机游戏(客户端)- 小黄鸭
最近在折腾的一件事:朋友天南海北,如何进行局域网游戏?
若干年前,一伙同学约战网吧,CS、红警之类的联机游戏玩的不亦乐乎,如今再想找回当年的感觉已经非常不容易。其中一个比较直接的原因是,不在一个局域网内。
捣鼓了一些很古老的虚拟局域网软件Hamachi和LAN Bridger。问题很多,延迟奇高,放弃……
接着就是各种尝试不同的方案,最终找到了一个比较完美的解决方案:N2N
相对于其他虚拟局域网方案,N2N在网络环境良好的情况下,能够实现P2P直连,有效的降低虚拟局域网的延迟,即便无法直连,通过服务器中转,也能获得不错的延迟
只要支持局域网的联机游戏,N2N都支持。目前我个人已测试成功的有:
CS、红警2、红警3、星际争霸1、魔兽争霸3、DOTA、方舟生存进化、文明6、群星Stellaris
流星蝴蝶剑、人类一败涂地、百战天虫、求生之路1&2、我的世界、火炬之光2、帝国时代2
……
直连状态Ping:
非直连状态Ping(服务器中转):
下载客户端
Windows下的N2N 客户端启动器下载:https://bugxia.com/357.html
使用方法
1.解压上述下载的压缩包
比如解压到 D:\n2n_client_windows 如图:
2.运行
请以管理员权限运行n2n.exe启动器(小黄鸭图标右键 —— 以管理员身份运行)
初次运行时,启动器会自动安装所需要的虚拟网卡驱动
注:安装驱动时如果出现Windows安全提示,请信任即可
3.简单设置
注:设置虚拟局域网IP时,请勿和当前电脑的物理局域网IP段冲突
4.点击启动
点击后可能会弹出Windows防火墙的提示,请将N2N启动器放行即可
如果连接到supernode(服务端)失败,会提示 WARNING: Supernode not responding
如果搜寻到P2P连接(直连状态),会提示 P2P connection established
注:
1)EasyN2N v1.7 内置的Edge组件(版本r523)无法显示P2P连接提示
具体验证是否组网成功,请接着看下文
其他客户端
客户端B,包括后续新加入的客户端,除IP设置不同而外,其他设置均需保持一致。
一句话:同IP段但不同IP,同服务器和端口,同小组和密码,同版本,是成功组网的前提
比如:
朋友A:IP地址:192.168.66.1,组名称:bugxia
朋友B:IP地址:192.168.66.5,组名称:bugxia
……
测试
N2N启动器内置简易连通性测试工具
同理,也可以在两个客户端间建立TCP、UDP连接进行测试
关于延迟
目前常见的N2N传输,有两种方式
直连
当你和朋友的网络环境比较纯净,NAT状态良好(比如同城市同电信宽带)的情况下,N2N会在参与方之间建立P2P连接
所有的通信都不会经过服务器,延迟能够极大程度降到最低
中转
相反,当参与方网络环境相对复杂(比如校园网,有多层交换),就无法建立P2P连接,所有的通信都会经过服务器来中转
中转模式下,A到B的延迟 ≈ A到服务器的延迟 + B到服务器的延迟
测试
A和B为同一个物理局域网的设备,并建立N2N虚拟局域网
理论上讲,物理局域网下,A和B的延迟在1ms左右,而N2N网络下,A和B的延迟也应该在5ms~10ms左右
但实际的ping情况是,一开始A到B的延迟在50ms左右(非直连),在不断ping了200次左右时,N2N自动切换为P2P模式,ping值只有5ms左右,如图:
所以,想要N2N走P2P传输,本地的网络环境很重要。
判断本机网络NAT类型:
引用 lucktu 站长的话:
我认为N2N的边缘节点之间的通讯方式有3种:
一是中转,就是边缘节点(edge)上所有的流量都要通过中心节点,速度最慢;
二是借道,就是边缘节点之间的通讯借用其他的通道来完成。例如当你在两个边缘节点之间运行了多个edge,那么新版的v2.1会借用速度较快的其他edge通道;
三是直连,就是边缘节点之间直接连接通讯,不借助第三方。
在 恩山论坛 也有相关的解释:
1.双方中只要有一方是Full Cone,可以直连
2.双方都是Restricted Cone或Port Restricted Cone,这种情况可以打洞,通过N2N服务器握手以后,双方的数据不再经过服务端
3.一方为Restricted Cone,另一方为Symmetric NAT,可以打洞,通过N2N服务器握手以后,双方的数据不再经过服务端
4.一方为端口Port Restricted Cone,另一方为Symmetric NAT,这种情况无法打洞,数据要走N2N服务器中转
5.双方都为Symmetric NAT,这种情况也是无法打洞的,数据要走N2N服务器中转
常见问题
连接服务器失败:WARNING:Supernode not responding – moving to 0 of 1
成功服务器连接:[OK] Edge Peer <<< ================ >>> Super Node
常见问题解决方法
1.无法ping通
如果出现一方可以ping通,另一方无法ping通,则很有可能为对方开启了防火墙,使用EasyN2N内一键关闭防火墙功能再次尝试
2.无法搜索到对方建立的游戏(房间)
参考:Win10下使用N2N组建虚拟局域网联机游戏(星际争霸)
3.无法连接到服务器
检查客户端填写的服务器端口是否正确
84条评论
关了防火墙还ping不通怎么办,求解
牛B 感谢大佬
请问用了这个之后电脑开热点出问题了咋办,手机连热点一直在验证ip那边连不上
@lst 不好意思,没遇到过这种情况,我这边实测荣耀Magicbook,Win10 2004,开启N2N,并开热点,手机也能连上,小米10
ping不通呀,防火墙都关了,也显示连接服务端成功了,就是俩人谁也ping不通谁
博主,s1一直erro,一直失败是什么问题
@xt 请选择s1而外的其他内置服务器,s1服务器在维护
大佬,现在做了新的实验,发生了如下的问题。
同一局域网里面可以很容易的建立P2P连接,但是不同局域网不行。好奇是否是需要设置路由器的端口映射?如果需要,可以指导一下吗?
该工具对应的客户端上的通信端口是什么?
@111的321 N2N的P2P组网原理,简单来说就是【NAT打洞】,它和组网双方的网络环境复杂程度有很大的关系。
具体的东西可以参考本文上面的【关于延迟】部分,也可以自行搜索相关的东西深入了解一下。
edge.exe默认走的随机端口,有可以使用 -p 参数 来自定义端口,见:https://bugxia.com/n2n_launcher_param
作者大大好~,报告一个现象,现在客户端默认识别虚拟网卡不是安装的,而是UU等加速器的虚拟网卡,不知道这个现象会带来什么后果,所以报告一下
@Yuzu 如果电脑里已存在Tap-Windows Adapter虚拟网卡,就不会安装一个新的了,免得重复引起其他问题
说实话,对这个代码挺好奇的,楼主可以部分开源吗,想连接一下,秋梨膏
@xiaolei 了解,打错字了
@xiaolei n2n是开源的,https://github.com/ntop/n2n,启动器只是套了层壳子罢了
我下载了这个n2n然后复制了一份给朋友,但是我们在网络适配器上显示的网络,就是以太网下面那一行字不一样,而且ping不通他
@Chris 没有Tap-Windows Adapter那个吗?ping不通的原因比较多,不过一般都是windows自带防火墙的问题,再折腾折腾吧~
站长您好,感谢您的教程。我有个问题想咨询下。
单位局域网是个没有连接任何互联网的纯局域网而且网络环境复杂,是否可以搭建服务端?有没有win环境下的服务端linux不会用(=_=)
@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
—————
@Bug侠 谢谢您的回复,单位的局域网虽然复杂,但是,有很多服务器(A)是B,C,D可以访问的。所以我觉得可以尝试下,复杂主要是有很多的端口被屏蔽了。
@svenmax 不用谢,我以为是没法访问到。如果都能互相访问到,那就可以折腾折腾,端口被屏蔽这个也没辙,N2N的Supernode(服务端)到edge(客户端),走的UDP,而且也不支持动态端口,所以确实得折腾一番。
用来红警3联机。我是电信的,有公网IP做服务器,友人A是电信的,友人B是移动。
现在我和友人A测试联机正常,友人B同样设置却无法在房间里看见我和友人A(我们同样看不见他)。友人B的N2N应该是正确配置了的,Log显示也正常,而且也能互相 Ping 通。
所以这是什么问题呢?
@Asttear 呃,出现这种问题的朋友还是挺多的,得逐一分析,我列一下我的思路:
1.任意两方如果可以通过N2N组网联机,说明N2N网络是正常的,可以排除服务端supernode的问题
2.一般来说,搜不到对方的时候,也可以尝试使用CS等游戏,看看是否可以通过这些游戏自带的命令行的连接到对方
3.能ping通,却无法搜索到对方,大多数还是Windows或者安装的第三方防火墙软件导致的,建议从这方面下手
@Bug侠 和友人C试了下,关了友人C的防火墙,结果出现了和友人B一样的问题,最后还是被逼着去用了浩方
没有尝试别的游戏,毕竟红警的局域网联机并不能手动指定IP加入。
我想不出别的原因了→_→再排查的话只能怀疑国产杀毒软件了……
@Bug侠 另外服务端 supernode_v2 在我这里经常出现莫名崩溃消失的情况,不知道博主有没有遇到过?
@Asttear 哈,关了防火墙还是问题依旧的话,那我也没什么思路了,只能花点功夫多研究研究。
玩N2N就是个折腾的过程,可能会遇到很多奇奇怪怪的问题。
我这边没有遇到过崩溃的情况,我这边一直很稳定。
@Bug侠 又试了下,发现双方都能 ping 通,然而虽然我能 TCP/UDP 测试通对方,对方却无论如何也接收不到我的返回状态,TCP测试就直接提醒我检查地址或端口了……防火墙什么都关掉了,真不知道是什么原因了……
@Asttear 这个情况我之前也遇到了,但是是和一方的防火墙有关

简单分析一下,Ping通,说明ICMP协议正常,也可以说明N2N组网是OK的,但是TCP\UDP协议不通,我猜测有可能是windows的防火墙或者是其他安全类软件进行了拦截……没办法,只能一点点的排查了
只有客户端下载链接没看到服务端的链接怎么建自己的服务器
@帝国时代2 在这里:https://bugxia.com/336.html
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
搭建局域网后的确会看见,因为他就是在回环里。
希望站长能够完善一下该方面的教程。
@LXJlin 有几个不明白的地方,大概梳理一下:
1.意思是Server同时搭建了N2N服务器(中心节点 supernode)和MySQL数据库服务?
2.PC和Server没有在同一个局域网网段下吗?
3.然后你要具体实现什么功能呢?是想利用N2N服务,打通PC和Server?
不好意思,我理解能力差……
@Bug侠 >目前有一台服务器,称其server
>一台普通的家用电脑,称其为pc
server下有一个数据库,他位于192.168.200.131下
pc 与server打洞并且互相都ping通了,我现在遇到的问题是,不论跨网段还是同一网段均无法在pc上实现访问server下的数据库。
@LXJlin 哦哦哦,大概明白了,意思是你想通过N2N实现类似于内网穿透的功能?
能Ping通,说明N2N是隧道是没问题的,但是无法通过PC连接到Server,是不是MySQL绑定的监听端口(比如3306)没有对N2N的IP放行?另外要实现内网穿透,也可以搭建Frp服务,它的内网穿透要比N2N好用一些。
和朋友打红警2,第一玩儿的时候联机正常,后来再玩儿就不行了。机器网络环境都没变,也不知道啥原因。。。。郁闷!!
@hsdnmm 再试试其他游戏,CS 魔兽3什么的,没法搜到对方的原因比较多
@Bug侠 感谢回复,我再试试。
站长,两台win10都连接上了centos7的supernode,但是都ping不通对方,显示请求超时,supernode is listening on UDP 9527 (main),两台win10 都关闭了防火墙,都是用的自己家的路由器,没有公网ip,您能帮忙分析一下问题可能出在哪么~~谢谢
@许彪 supernode is listening on UDP 9527 (main)是服务器开启supernode的提示,windows这边ping对方只显示请求超时,表述不清,见谅~~
@许彪 确定成功连接到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只有最后一位不同,应该是处于同一段的,后续我再多找几台电脑试一下,如果有小伙伴遇到一样的问题,欢迎一起讨论~~~
@许彪 站长好,我又来麻烦您了,
这是我最近看到的一个项目
不知道您能不能帮忙测试下,
小白也不会编译这个,万分感谢。
https://gitee.com/gnbdev/gnb
bugxia.com 的服务器连不上啊
WARNING: Supernode not responding – moving to 0 of 1
或许是我想的比较天真,有没有可能,可以增加一个设置。强制直连。强制走中转这样!!!
@安抚 又找了一下,这里有比较直观的直连条件说明:
====================
关于打洞的问题,这取决于网络环境了,简单说下:
1、双方中只要有一方是完全锥形NAT(NAT1),可以直连;
2、双方都是非对称型的NAT(受限型NAT:NAT2和端口受限型NAT:NAT3),这种情况可以打洞,通过supernode握手以后,双方的数据不再经过服务端;
3、一方为受限型NAT(NAT2),另一方为对称型NAT(NAT4)可以打洞,通过supernode握手以后,双方的数据不再经过服务端;
4、一方为端口受限型NAT(NAT3),另一方为对称型NAT(NAT4),这种情况无法打洞,数据要走supernode中转;
5、双方都为对称型NAT,这种情况也是无法打洞的,数据要走supernode中转。
====================
https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=260898
楼主的东西很方便,就是报毒太厉害!这个就不说了。我想问下楼主,理论上N2N应该是IP直连的。为什么实际使用下来,都是过中转服务器的。就好像我本地两台真局域网主机的电脑。我用别的一些虚拟网工具或者是STEAM的话直接就是局域网延迟了。用了N2N还要绕一圈服务器导致,延迟很高。不知道有没有办法解决这个问题?
@安抚 嗯~~毕竟是易语言写的,难免报毒……我用的火绒,很安静。
—————-
n2n确实是支持直连,但仅仅只是多种连接方式的一种,n2n在无法直连的时候会切换为中转模式。想要直连,还需要视本地的网络环境而定。具体的知识可以参见这里:http://www.lucktu.com/archives/767.html
楼主过年好,我用的你这个,我是直接搭建的服务器 ping都可以ping通 就是玩魔兽的时候可以看到房间但就是没法加入进去

@linbanxian 老哥,我也是弄来玩魔兽的,我们连看都看不到对方,你是怎么弄的?
@war3 要保证都连接上自己的内网
@linbanxian 正好楼下的哥们跟你的问题差不多,我也测试了一下,你可以尝试关闭Windows的防火墙来测试。过程见楼下。
@Bug侠 好点老哥,关了防火墙果然好使 ,但是这个延迟有点高啊
@linbanxian
搞定就好,n2n组网毕竟没有第三方平台稳定,延迟的话,只能将就了,我自用的是第三个服务器,相对比另外两个要低一点。
大佬 我按你办法弄了两台电脑能PING通 但是我们联机打魔兽在局域网里看不到对方啊
@war3 呃……魔兽3我没测试,我们当时玩了CS和流星蝴蝶剑,这两个是可以的。如果一定要使用N2N组虚拟网,可以试试别的游戏可不可以联机,比如CS1.6。如果只是为了联机,现成的平台就挺好了。
@Bug侠 大佬 就是因为不想在平台打才自己弄的 我们自己改的图和自己做的图在平台没法玩~那个连接端口9527有影响么?我在百度查魔兽端口是6112 需要怎么调试么?
@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的房间并成功加入游戏。
所以你可以尝试关闭windows防火墙来测试一下,我和朋友均为Win10 1803,关闭防火墙方法:https://jingyan.baidu.com/article/17bd8e52083ce685ab2bb839.html
@war3 对了,我测试用魔兽3的是游侠的这个:
http://down.ali213.net/pcgame/War3FT.html
博主,win10更新1809之后,我的启动器调试窗口就什么都不显示了(本来是控制台的地方什么都没有),朋友也ping不通,更新之前还是正常的,这种情况该怎么办呢
@closer_ex 我先更新到1809看看,应该是Bug了,待修复
@Bug侠 博主更新后有这个问题吗?另外在启动时弹出来的cmd窗口里显示的是连接成功的提示,ping自己也能通
@closer_ex 嗯,我更到1809了。确实有这个问题,不过还没时间研究怎么解决。可以先用命令行的方式连接,命令行日志在n2n_client\commandline.log
感谢感谢,也是想和几个朋友搞一下局域网游戏,试试,还没成功,继续试试,感谢博主!
@Ieven n2n组网还是很方便的,有需要的帮助的话尽管说
写得不错,我准备搬到zeronet中去啦
无意当中发现楼主研究N2N自成一派,非常不错,学习到不少东西,感谢!!我们N2N有一个群的:256572040。
试用楼主的N2N客户端,提点建议可以吗?
1、可选服务器,建议从一个文件读取,这样我们可以自定义服务器。因为N2N不总是直连,都大面积用你的,会卡的。
2、你编辑的v2,被我们群定义为v2s了,以便与官方的v2作区别,中心节点不通用,所以请再设计一个v2s的界面,我们也可以用。
感谢您的文章和软件!
@lucktu 感谢感谢,去你的网站转了一圈,发现你才是职业N2N玩家啊……我只是小打小闹一下,几个朋友偶尔联机的时候用一下。我做的那个启动器也只是套了个壳子,方便使用罢了。针对你说的几点:
1、服务器列表可以做成从本地文件读取,但是也可以做成可选择是否从远端更新服务器列表文件,保证可用性。
2、新的官方n2n我还没研究,不过要是启动的命令行差不多的话,那实现起来也很快。
@Bug侠 没想到博主回答挺及时的!
我只是用得早一点,其实不懂编程,只是一个使用者而已。还是你厉害,一个人创造了这么多!!
我目前在windows7x32位上测试,实际上这个程序是运行不起来的,点击后显示“启动失败”,而且Debug按钮也是无效的,希望能修复一下。
关于你的回答,我觉得很好,
1、服务器列表你的方法很好,方便自定义即可。注意可以从列表上读取到版本。例如,我们同一个IP提供 3 个版本的n2n,希望能自动与下面的版本号对应。
2、官方的2.5与官方以前的2是完全兼容的,你现在编辑的(我们叫v2s),属于非官方的版本(但这个目前直连成功率是最高的),他与官方的v1、v2都不能共用中心节点。他们的使用方法都差不多,v2s多-L、-i两个参数而已。如果方便做,可以在现在的基础上增加一个v3(现在还没有,也许不久就有了)。反正后台替换主程序即可。
@lucktu 去git上看了一下,官方新发布的这个2.4版本(2.5我没看到,只看到stable是2.4,还有个dev开发版)没有增加新的功能,只是对代码做了一些优化和删减,不过他们承诺后续还有新功能,很期待啊。
—————————
但是……我尝试了一下编译,貌似这个版本的Windows下的Edge编译还是有点些问题(或是我的问题),还没法正常编译。所以这个等待官方后续更新,我继续研究。
————
我做的那个启动器,因为只是简单用用,所以没怎么做测试。我去装个Win7 32的虚拟机再研究研究是哪儿出问题了。感谢反馈!
@Bug侠 嗯,官方的说明里说的是2.4,下一个版本2.5里面会有新功能,没错。但是我们编辑出来居然是2.5,有点奇怪,而且更重要的是,我发现貌似比以前的更容易直连,因为还缺少一个windows版本的对应,所以比较期待编辑出来做测试。如果有幸编出来的话,不妨共享一下方法。我自己后来搜索到一个window下的编辑方法,可以编辑出来v2s版本的了,利用的是cmake,但是使用make命令编辑v2.4/2.5时出错。
这是我整理出来的一些主程序,感兴趣的话,欢迎下载
https://pan.baidu.com/s/1nwuKlvj key: 9nfi
非常期待你的下一个windows启动器!!
@Bug侠 博主如果有新的程序了,可以联系我来测试啊:在此评论里有我的QQ及邮箱(这个快),可与我联系。
另外,能否把你编辑的 n2n 程序的 supernode 给我一份?我还缺少64位的呢,先谢过了!
@Bug侠 博主请回QQ看一下吧,有信息给你呢
@lucktu 现在发现是系统的问题,我的系统是windows7-32位的,需要32位的edge来支持,我将后台的edge-v1、v2换了,基本可以正常工作,但是v2s换上去不行。但在dos下测试又没有问题。我提供的共享链接里有64/32位的版本。
另外,右边的那个debug窗口,有点小bug:显示不大完全,甚至还有外部的背景进去,请适当调整一下,谢谢!!
博主的所有文章我都看了,很详细,很用心。这种博客真心喜欢。希望网站能一直维持下去。
@爱美爱魅 哈哈,过奖了。都是记录一些我平时正好用到的东西,乱七八糟的一个小博客。