火炬之光2吧 关注:125,954贴子:1,923,371

【联机】火炬之光2互联网连不上?虚拟局域网联机教程+转发工具

只看楼主收藏回复

最近和好友一起联机火炬之光Torchlight 2,发现官方的互联网模式有些问题,虽然能搜到房间,但如果网络运营商不同或地域不同,即使关闭防火墙,仍有很大概率连接不上。因此研究了一下如何搭建虚拟局域网(vlan),从而使用局域网模式联机。联机方法简单,体验十分顺畅,在这里分享给大家。
本来写了一个非常详细的教程贴,结果可能因为里面有链接,大号直接被全吧制裁了。特地注册了一个小号,这次只能简单讲下方法,细节请大家自己探索
二楼放内容


IP属地:北京1楼2022-02-27 09:41回复
    这里直接提供3种解决方案:
    【1】蒲公英+自编开源转发工具
    【2】ZeroTier+修改网络跃点数为1或用转发工具
    【3】公网IP(或校园网?)使用转发工具联机


    IP属地:北京2楼2022-02-27 09:44
    收起回复
      方法中前两个的优劣在于:
      蒲公英:【优点】国内服务器,网络稳定,操作较便捷。【缺点】免费版最多3人联机(如果第4人有公网ip或做了端口映射也行)。过滤了广播消息,需要配合我编写的转发工具一起用。
      ZeroTier:【优点】免费支持50人网络。能发广播消息,因此只需要修改跃点数就能联机(或者也可以配合我写的转发工具一起用)。【缺点】外国工具。服务器可能在外国(但本人测试联机体验还不错)。界面英文,使用较复杂。


      IP属地:北京3楼2022-02-27 09:46
      收起回复
        详细的内容本来都写好了,但是抽楼实在厉害,后面我会把内容发到csdn。没法描述的很细致,只能靠大家自己探索了。该方法理论上适用于各种情况的联机,不限于st正版,可以跨平台,各种版本。希望可以对互联网死活连不上的各位有所帮助


        IP属地:北京6楼2022-02-27 09:56
        收起回复
          原理分析。torchlight2局域网联机,是基于建房主机发送broadcast包到局域网,告知其他玩家房间信息,从而连接。大家可以尝试使用wire-/。shark抓包udp.port == 4549来探索。


          IP属地:北京7楼2022-02-27 09:58
          回复
            而为什么大家看不到彼此的房间呢?原因可能有两个:
            (1)broadcast包发送到了错误的网络(接口、网卡)上,因为搭建的局域网不是代价(跃点数)最小的。默认可能发送到了家庭局域网中。
            (2)broadcast被虚拟局域网过滤。
            如果是情况(2),必须配合我写的转发工具,方可正确发送房间信息给其他玩家。如果只有情况(1),可以通过修改网络跃点数为1,提升网络优先级。或是配合转发工具使用。


            IP属地:北京8楼2022-02-27 10:01
            回复
              希望可以置顶或加精,帮助更多玩家。@我是楼上的dad


              IP属地:北京13楼2022-02-27 10:17
              收起回复
                帖子原文上传到tx文档了,大家可以查看详细说明。link后缀是doc/DZVZKTkNFb3NvZVZS


                IP属地:北京16楼2022-02-27 10:51
                回复
                  【1蒲公英组网+自编转发工具使用教程】
                  使用蒲公英组网:【优点】国内服务器,网络稳定,操作较便捷。【缺点】免费版最多3人联机(如果第4人有公网ip或做了端口映射也行)。过滤了广播消息,需要配合我编写的转发工具一起用。
                  【蒲公英组网步骤说明】
                  (1)首先,注册并下载蒲公英访问端个人版。
                  (2)创建网络。创建和管理网络需要在蒲公英官网界面,点击“管理平台”(注册登录按钮的边上)。此时可能已有网络,可以查看或删除网络。如果没有网络,选择“对等网络”创建即可(免费版只能创建对等网络)。创建后记住网络ID,并注意修改“入网方式”,如下图:

                  如果设置了入网审核,可在“消息”中查看入网申请。使用中如果遇到问题,例如删除成员再添加后依然显示3人已满,可以随时删除网络重新创建。
                  (3)加入网络。所有电脑都需要下载运行蒲公英访问端,初始可能自动加入了一个网络。现在需要所有人加入同一个网络,点击上方的大星星,选择“加入其他网络”,输入上一步中的网络ID即可,如下图:

                  如果显示“禁止入网”请检查上一步的入网方式是否设置。入网后可以看到网络中的电脑和ip地址。创建游戏房间的主机需要记住其他人在vlan中的ip地址。右键点击可以ping其他人,但需要关掉防火墙才能ping通。
                  至此,蒲公英搭建vlan完毕。但此时游戏中是看不到建立的房间的,原因在于:(1)房主通过广播方式向局域网发送房间信息,但是信息没有发送到我们建立的vlan中,而是有可能发送到了“跃点数”更小的家庭局域网中;(2)经过和技术人员确认,蒲公英会过滤组播或广播消息。因此即使将广播消息发送到了vlan中,其他人依然收不到,看不到房间。有关游戏联机的原理,在【4 原理分析】部分我将详细介绍。
                  如何解决收不到消息的问题呢?在蒲公英vlan中,指定ip直接通信是允许的,那么我们就可以将广播消息中的内容,直接发送至其他人的电脑,这样其他人就能在游戏中看到房间了。我编写的简单的转发工具Torchlight 2 Lan Game Server Tool,就是读取游戏发送的广播房间信息,直接发送到指定ip。下面将介绍使用方法。


                  IP属地:北京20楼2022-02-27 12:41
                  收起回复
                    【Torchlight 2 Lan Game Server Tool转发工具使用方法】
                    (1)注意:只有建房的主机需要开启此软件。软件和游戏开启的先后顺序,经测试应该没有影响。
                    (2)建房主机打开软件,提示输入其他玩家的ip。多个ip用“空格”或“英文逗号”分隔,需要在一行内输入。例如,上面的例子里另一名玩家的蒲公英ip是172.16.0.137,输入并回车即可,如下图:

                    (3)回车后,软件开始探测局域网游戏的广播消息。房主可以此时游戏建房。抓包发现游戏房间消息每30秒广播一次,因此等待不超过30秒,软件就能探测到消息,并转发给其他人,如下图:

                    此时其他人应该就能看到房间并顺利加入了。后续连接和数据传输由游戏负责,可以将软件关闭了。也可以留着软件,一直向目标发送房间信息。运行不占cpu、内存或网络资源。
                    蒲公英的缺点在于,免费版最多支持3人联机。如果是4人联机的话,就需要其中一人有公网ip,或对4549端口进行了映射,从而房主可以使用转发软件将消息发送给第4人。如果不能满足以上条件,就需要使用下面介绍的ZeroTier软件进行组网。


                    IP属地:北京21楼2022-02-27 12:44
                    收起回复
                      【2 ZeroTier组网+修改跃点数教程】
                      ZeroTier:【优点】免费支持50人网络。能发广播消息,因此只需要修改跃点数就能联机(或者也可以配合我写的转发工具一起用)。【缺点】外国软件,服务器可能在外国(但本人测试联机体验还不错)。界面英文,使用较复杂。
                      【ZeroTier组网步骤说明】
                      (1)首先依然是注册(Sign Up)并下载(Download)客户端。ZeroTier目前只需要建立网络的人注册,加入网络只下载客户端即可。安装客户端的时候,好像选不了安装位置就直接安完了,稍微有点流氓,不过为了不受限的免费联机人数(50人),还是值得一试。
                      (2)建立网络。注册并登录后,网页端会有一个详细的建网指引,按照默认设置建立即可。点击Networks,点击Create a network一键创建网络,之后点击下方的网络信息进入管理,如图:

                      进入网络的管理界面后,记住网络ID,可以起一个名字,设置Access Control访问控制模式时,如果选择了private私人模式,他人加入后需要点击授权才能连接;如果选择的是public公共模式,则任何人都可以直接连接。其他设置不用变。如下图:

                      如果选择的是private模式,在Members栏,注意他人连接后需要勾选Auth授权,并记住他人的vlan IP,如图:

                      (3)加入网络。所有人都需要安装客户端。安装后软件没有在桌面创建快捷方式,首先查看ZeroTier是否已经启动(右下角程序栏是否有新图标),如果没有,点击左下角windows图标,直接输入zerotier搜索、启动即可。启动后不会自动打开软件界面,需要在右下角找到图标,并右键点击,选择Open Control Panel…启动,如下图:

                      之后在下方输入网络ID即可,无需修改其他设置,如下图:

                      如果网络设置的是private模式,需要在网页管理界面勾选Auth授权才能成功连接。
                      至此,ZeroTier搭建虚拟局域网就完成了。但此时大家创建游戏后可能依然看不到彼此的房间,抓包发现游戏房间信息并没有发送到正确的网卡上。游戏发送广播消息(目标ip为255.255.255.255)时,是根据路由表自动选择网卡,因此可能将消息发送到了家庭局域网(如平时用的wifi)中,而没有发到我们创建的vlan中。
                      如何解决看不到彼此的问题呢?这里提供两个方法:(1)使用我编写的转发工具,用法参见前面;(2)修改网络跃点数,只需简单修改系统设置即可,接下来会讲。


                      IP属地:北京22楼2022-02-27 12:47
                      回复
                        【修改网络跃点数教程】
                        在使用ZeroTier搭建vlan网络后,网络可能优先级较低,导致游戏中看不到房间。
                        这一步的目的,是希望更改网络优先级,使得游戏广播包优先走vlan网络,而非其他局域网。之前有吧友使用ForceBindIP强制游戏走指定网卡,也是一个办法,但需要下载软件且使用起来比较麻烦,而且可能不支持mod版本游戏。其实更改优先级可以简单通过修改系统设置实现,下面进行介绍。
                        (1)右下角程序栏,右键点击网络图标,打开“网络和Internet”设置,弹出的设置中点击“更改适配器选项”(win7右键网络应该直接有适配器选项),如下图:


                        (2)在弹出的网络列表中,找到ZeroTier对应的网络,右键打开“属性”。选中“Internet协议版本4(TCP/IPv4)”,点“属性”。(此时假如选择的是“使用下面的IP地址”,但底下都是空的的话,需要点“自动获得IP地址”,否则下一步无法点确定保存。如果IP不是空的就不用管。有小概率出现空的的情况。)点“高级”,如下图:

                        (3)在高级设置中,将“自动跃点”取消,下面手动输入跃点数为一个较小的数,比如1。修改后一路确定保存即可,如下图:


                        IP属地:北京23楼2022-02-27 12:52
                        回复
                          【检查修改跃点数是否生效】
                          修改跃点数后,游戏中应该就可以看到房间了。如果还是看不到,可以检查一下修改跃点是否起了作用,方法如下。
                          (1)按键盘的win+R打开运行,输入cmd并回车打开windows命令提示符(命令行),输入route print打印路由表。找到其中的IPv4路由表,如下图:

                          (2)找到网络目标(第一列)为255.255.255.255的路由,可能有多行。这时候看右侧的接口(倒数第二列),找到vlan相关ip的那一行。如上图中172.29开头的是我创建的vlan网络范围内的ip,而10.187开头的是家庭局域网ip(更常见的是192.168.x.x),127.0.0.1是本地回环ip。确保vlan对应的跃点数(最后一列),是这几行里最小的即可。
                          跃点数越小,代表网络代价越小,优先级越高。在前面的修改前,可能家庭局域网跃点数更小,因此游戏广播包优先走家庭局域网。修改后vlan跃点数更小,就优先走vlan了。
                          这样,我们使用ZeroTier配合修改跃点数就可以实现局域网游戏联机了。如果修改跃点数后,广播路由中vlan对应的跃点数仍然不是最小的,那么就依然需要【使用前面的转发工具】进行发包。或者可以尝试使用route命令直接修改路由表,但这样做有一定风险。如果使用蒲公英组网,修改跃点数是无效的,因为即使优先使用对应网卡,广播包也会被蒲公英过滤掉,其他人是收不到的。


                          IP属地:北京24楼2022-02-27 12:53
                          回复
                            【3 公网IP(或校园网?)使用转发工具联机教程】
                            如果联机的所有人(理论上只要求主机外的所有人)都有公网IP,或者对4549端口进行了端口映射(火炬之光2局域网联机默认使用4549端口),那么可以不用vlan组网工具,直接使用我编写的转发工具,在公网上通信。校园网环境可能也适用(假如校园网过滤了广播消息,但是没有禁止点对点通信)。
                            这种条件下,只需要主机开启转发工具,输入其他人的公网ip(或校园网ip)即可。软件使用参考前面的教程。


                            IP属地:北京25楼2022-02-27 12:53
                            收起回复
                              【4原理分析】
                              接下来将简要分析Torchlight 2局域网联机原理,以及自编转发工具原理
                              【Torchlight 2局域网联机原理】
                              (1)确定程序占用的网络端口。可使用windows资源监视器,或者在控制台中组合tasklist、netstat –nao、findstr命令查询Torchlight2.exe占用的端口号,其中局域网游戏房间信息传输端口是固定的4549,UDP协议。
                              (2)使用wireshark抓包。确定端口后,就可以设置过滤条件udp.port == 4549进行抓包分析。抓不到的可能是没有选对发送信息的网卡。主机创建房间后,可以发现每隔30秒发送一条len=50的广播消息(len长度和房间名有关),可以看到里面解析出了房间名(testroom)。Len=7的包暂时不知道是什么作用,猜测可能是保持NAT环境下端口占用用的吧。如下图:

                              而进行搜索的玩家,抓包发现,会在打开局域网菜单时,以及点击刷新按钮后,发送len=18的广播报文,如下图:

                              我们可以把数据复制下来,主动构造包发给主机电脑进行测试。发现主机除了每30秒广播一次房间信息外,如果收到其他玩家发送的len=18请求,会再广播一次房间信息。这样其他玩家进入局域网时,可以无需等待立即搜到房间。
                              不过可惜的是,即使是收到请求,主机此时发送的依然是广播消息而非点对点消息,如果网络无法广播,就需要转发工具。
                              关于主机广播房间信息的报文内容,我没有做详细的探究,感兴趣的可以尝试解析一下对应字段,目前只确认了房间名的字段。


                              IP属地:北京26楼2022-02-27 12:55
                              回复