官方服务器联机卡顿掉线?来用n2n组建远程局域网来愉快玩耍吧!

此文章仅为对一次问题解决经历的记录,旨在以后遇到相同问题时能快速找到解决方案,并非权威教程。
感谢 @醉舞倾歌 的测试协力!
一、起因
今天和朋友一起联机游玩《神界:原罪2》,被steam的狗屎网络狠狠折磨了一晚上。不是掉线就是连接失败,到最后也没能成功进行游戏。偶然发现这个游戏是支持局域网联机的,这样就不需要通过不稳定的官方服务器来联机了。

经过查找资料,我选择了n2n这个开源的远程局域网方案。

多个边缘节点客户端通过架设在公网上的超级节点实现数据互通,组成局域网。既然原理上可行,那就直接行动。
二、准备工作
所需硬件如下:
拥有公网IP的服务器一台
三、下载n2n
项目地址
在release中下载适合自己服务器系统的安装包
笔者使用的是64位Ubuntu,所以下载这个

如果服务器是Windows系统,则从下面链接选择并下载别人预编译好的win版二进制文件

四、安装并配置supernode
安装完成后更改配置文件

将-p后面的数字修改成你想要使用的端口并保存
五、supernode的启动与关闭
启动后,通过查看状态能看到这样的log没有Error,就说明启动成功了

启动后不要忘记到服务器控制台的安全组或防火墙开启你指定的TCP和UDP端口

六、下载n2n客户端
从这个地址选择并下载Windows edgenode客户端到你要联机的电脑上
没错,和上面Windows版supernode地址一样,因为supernode服务端和edgenode客户端是同在一个压缩包里的

然后解压到你常用放软件的目录(笔者是D:\n2n)
解压后应该有这样四个文件

需要用到的就是edge.exe
七、编写启动脚本
在解压目录新建一个名为 start.cmd 的文本文件
编辑内容
将其中的方括号按需求填写
举个例子,假如我想建立一个名为aquadeer的局域网,密码为aquadeer123,supernode公网IP为101.101.101.101,开放端口为7777
联机电脑1(edgenode1)你想让他的局域网IP为192.168.100.1,则内容应为
联机电脑2(edgenode2)你想让他的局域网IP为192.168.100.2,则内容应为
有多台电脑就以此类推
保存好脚本后,右键,以管理员身份运行(非常重要!)
运行后如果能看到这样的信息
则说明连接成功。
使用ping命令来测试局域网是否互通
没有丢失则组网成功。
接下来就能在游戏里愉快联机了。
游玩结束后关闭edgenode,只需要在cmd窗口按ctrl+c等待一会就能退出了。
记得一定不要直接叉掉,直接叉掉可能会导致下次启动报错
Q&A
Q:启动edgenode的时候报错
怎么办?
A:这说明你上次关闭的时候是直接叉掉的,没有用ctrl+c的方式正常退出。猜测可能是因为supernode没有收到退出消息所以并未释放掉本机的MAC地址和IP,导致第二次启动edgenode时MAC地址和IP被占用,鉴权失败。解决方案有三:
1、重启服务端
2、稍等几分钟后再连接
3、在服务端的 supernode.conf 配置文件末尾加上 -M 参数来禁用MAC地址校验

Q:我使用n2n gui和happynet这两个n2n客户端为什么无法连接
A:可能是因为n2n gui和happynet并未支持到3.0的版本所以连接失败。教程中使用的supernode服务端为3.0,相较于2.0改了很多东西。所以还是乖乖用3.0的edgenode连接吧