使用N2N搭建虚拟局域网联机游戏

分享, 折腾 2018/04/14

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

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

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

—————————————

傻瓜教程:

Windows下使用N2N搭建虚拟局域网联机游戏(重写)

—————————————

今天就介绍一下使用Linux做服务端,Windows使用客户端建立N2N网络的方法。以下过程均基于CentOS 7 64bits

原理

和传统的中转传输不太一样的是,n2n的超级节点(可以看做是服务器)在边缘节点(Edge)完成首次握手后,中心节点不再起主要作用,edge之间的通信发生在两个edge node之间,不经过supernode中转。

准备

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

N2N的服务端与客户端的编译与安装,见:https://bugxia.com/327.html

服务端(Linux)

首先搭建服务端,Linux下建服的方法很简单,一行命令的事

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下的服务端搭建方法类似,不再啰嗦,服务端下方链接有提供。

客户端

更新:

由于我自己也需要用到N2N,所以写了个Windows下的N2N客户端GUI工具,Windows下的N2N 客户端启动器

win下的客户端(包含服务端)下载:https://file.bugxia.com/s/b6MAp6LS78b6XBp

压缩包中包含了v1、v2版本的客户端(edge_v1\edge_v2)和服务端(supernode_v1\supernode_v2),还有客户端必须安装的虚拟网卡TapV9

注:如果之前使用过其他TAP类软件,已经安装过TAP-Windows Adapter V9,则直接跳过本步骤

安装虚拟网卡

安装的时候仅选择第一项即可,安装过程中可能会有安全提示,选择[安装]

安装完毕后会在网络适配器界面出现TAP-Windows Adapter V9

启动客户端

客户端(edge_v1和edge_v2)均需要给与管理员权限运行

以管理员权限启动CMD

在命令行下启动N2N客户端(edge),如果出现错误,见本文末说明

注意:

1.不同的客户端需要指定不同的IP,但需要同段,比如有4个客户端,则可以分别指定192.168.100.100~104,成功连接到中心节点(supernode)后4个客户端可以任意互通。如果连接成功,但是ping不通或者搜索不到对方建立的游戏,请确认是否关闭防火墙。

2.客户端需要管理员权限执行,因为要给虚拟网卡写入网络信息

3.需要和服务端版本保持一致,如:服务端使用supernode_v2,则客户端也需使用edge_v2

4.确保需要组网的客户端所设置的小组名称和密码一致

edge.exe -a 指定的虚拟局域网IP -c 小组名称 -k 小组密码 -l 服务器:端口
#如:
C:\desktop\edge_v2.exe -a 192.168.100.100 -c bugxia -k 123456 -l n2n.s1.bugxia.com:9527

参数说明

-d 虚拟网卡名
-a [static:|dhcp:]虚拟网段(IP),static模式其实可以不用加那个static: 直接写IP就行
-c 用于区分节点的社区(组)名
-k 用于加密的字符串
-K 用于加密的Key文件,和-k不能共存
-s 子网掩码
-l supernode的IP:端口,可以指定多个supernode的
-i NAT打洞间隔
-b 当使用DHCP时定期刷新IP
-p 指定本地端口
-u 指定运行所用的UID(windows不适用)
-g 指定运行所用的GID(windows不适用)
-f 前台运行(windows不适用)
-m 为虚拟网卡指定MAC地址
-r 启用包转发,当-a指定DHCP时需要启用
-E 接收组播MAC地址
-v 输出比较详细的log
-t 指定用于管理的UDP端口

PING

本机是192.168.100.100,朋友是192.168.100.101

CS

常见的连接提示

v1

无法连接服务器时会重复提示Registering with supernode

成功连接Received REGISTER_ACK from remote peer

v2

无法连接服务器时会重复提示WARNING:Supernode not responding – moving to 0 of 1

成功连接Rx REGISTER_SUPER_ACK myMAC=

常见问题解决方法

1.无法ping通

如果出现一方可以ping通,另一方无法ping通,则很有可能为对方开启了防火墙,关闭防火墙即可

2.无法连接到服务器

检查客户端填写的服务器端口是否正确

检查服务器端口是否在iptables等防火墙中放行

检查客户端是否以管理员权限运行

3.客户端不断重复ERROR等信息

若能正常联机,则可以忽略错误提示

4.待补充



18条评论

  • 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

    评论(*号为必填项)