[LUCKY」在Windows下使用STUN穿透实现Minecraft联机并设置SRV记录

news/2025/10/6 14:18:25/文章来源:https://www.cnblogs.com/ie123610/p/19127590

[LUCKY」在Windows下使用STUN穿透实现Minecraft联机并设置SRV记录

2024.02.18

本教程目标

在无公网环境低成本的实现较为稳定的 Minecraft Java版联机(服务器)
目前常见的联机(服务器)方法及其问题(针对好友联机和小/微型服务器)

  • 家庭宽带 公网直连(IPv4或IPv6)
    优点:完全原生 网络效率和稳定性上不存在问题
    缺点:IPv4公网难获取 而IPv6普及率仍然不够高 玩家不一定有IPv6

  • 组网方案 (比如EasyN2N)
    优点:对玩家网络要求不是很高可以实现P2P直连即使P2P直连不成功也可以走服务器中转
    缺点:中转状态下速度和稳定性受限于中转服务器 同时需要在设备上额外安装客户端

  • 租用高性能VPS直接开服
    优点:网络方面相当于原生公网
    缺点:高性能服务器价格较高 对于好友联机和微型服务器来讲

  • 租用低性能VPS+frp穿透 在个人电脑上开服
    优点:网络方面相当于原生公网(算是是买了个公网IP) 缺点:即使是低性能服务器依然要些花钱(主要是带宽) 如果VPS离开玩家和mc服务端较远延迟可能还是较高毕竟比直接部署在VPS上要多绕一些路径

  • 免费frp穿透服务
    优点:对玩家网络要求不高
    缺点:和组网方案类似 稳定性和速度等受限于穿透节点


STUN穿透法

本教程将介绍STUN穿透法

  • 优点: 几乎相当于原生公网并有较大的带宽其上限为家庭宽带本身的上限
    ( 即使是一般的100M家庭宽带都有30Mbps的上传 )
  • 缺点: 端口号不定期变化
  • 解决方法: 设置srv记录(其可以记录端口号)Minecraft Java 版 支持解析srv记录 无需手动输入端口号

这是除了租用VPS外最接近公网直连的方法


配置思路

得益于lucky将 stun穿透 端口转发 webhook 以及DDNS更新 等功能整合在一起
我们可以轻松的实现stun穿透联机的设想

  1. 在dynv6上创建免费动态域名 并添SRV记录
  2. 使用lucky 的stun穿透和端口转发功能打开端口并将流量导向服务端
  3. 在stun传穿透的IP或者端口发生变化时可以触发webhook请求 使用其向dynv6的更新api发送请求更新srv记录中的端口
  4. 玩家输入仅需动态域名 客户端将自动解析srv记录中的地址和端口即可登入游戏

网络环境检测和优化

尽管大部分stun穿透教程都会强调必须是全锥型NAT才能穿透
但这其实指的是最外面一层的运营商NAT 而大部分的运营商NAT都是全锥型的

不过现在的家庭网络环境中 几乎都存在多层NAT 而NAT类型测试只能测出其“最差”的一层 其很可能显示为“端口受限(锥)型NAT” 这其实是由于 路由器/光猫上的NAT造成的

不过这并不会影响我们使用stun穿透 可以按照这篇教程进行网络优化 教程:网络环境检测和优化

优化到只剩一层运营商NAT和 和一层光猫/路由器 NAT 共两层NAT 且NAT类型检查结果不为对称型即可进行穿透


下载和安装lucky

在之前的教程中已经讲解过
LUCKY STUN穿透在Windows上使用UPnP工具为BT客户端自动添加内外端口号不同的映射规则


注册dynv6

访问 dynv6.com 点击右上角的 sign up 填写邮箱和密码后即可

邮箱中会收到一封确认邮件要点击邮件内的链接确认账户
值得注意的是确认页面有谷歌人机验证可能需要代理才能正常显示

如果没有代理可以使用下面链接中的方法使验证显示出来
链接


设置 动态域名和srv记录

登录账户 点击右上角的 My Zones 选择 More

再点击右侧的 Create new Zone

  1. 名称可以设置 你喜欢的名字 只能为数字和字母
  2. 选择一个方便记忆的一级域名这里选择 dynv6.net
  3. IP地址先不设置 之后会设置解析
  4. 创建

创建完成后会自动切换到该域名的配置页面
选择 Records 选项卡
添加 记录类型选择 SRV

填写 Name Server Port 这几个选项(后面会解释为什么这样填)

Port:任意填写之后还要修改 这里使用25565
Name: _minecraft._tcp.mc
Server 中填写的则是之前创建的域名(注意最后有一个点)
例如:ie12test.dynv6.net.

配置效果

检查解析效果

命令提示符运行命令 nslookup -q=srv 你的域名
例如: nslookup -q=srv _minecraft._tcp.mc.ie12test.dynv6.net

注意前面的 _minecraft._tcp. 不能少
看到如下中的内容表示设置正确


关于SRV记录

其中的 _minecraft._tcp 表示服务类型为 Minecraft 协议为TCP
这个部分是必须要有的且不能修改的

而后面的 .mc 相当于一个三级域名可以自由修改 游玩时在地址栏里输入 mc.ie12test.dynv6.net

若改为 .abc 那游玩时就要输入 abc.ie12test.dynv6.net

前面的 _minecraft._tcp 在游玩时不用输入
mc客户端会在你输入的域名前面自动加上 进行查询

server 选项 表示使用的实际域名或者IP 这里直接使用的是它的上级域名即 ie12test.dynv6.net 也可以使用任意的其他域名
填写的时候别忘了后面要加上一个点即英文状态下的句号

一些教程会说srv记录可以隐藏地址 但这其实是不准确的

之所以srv看起来可以隐藏地址是因为在服务器地址栏中输入的是
mc.ie12test.dynv6.net

而实际客户端查询的是 _minecraft._tcp.mc.ie12test.dynv6.net
mc.ie12test.dynv6.net 这个地址不需要设置IP地址 自然解析不出IP来

而且实际使用的地址是 _minecraft._tcp.mc.ie12test.dynv6.net 中srv记录里指定的地址 直接解析这个地址也是解析不出来IP的
因为DNS解析一般默认解析的都是 A(IPv4地址)和AAAA(IPv6地址)记录

必须要像刚才检查解析效果时那样指定查询记录类型为srv才行
所以这 只能算是一种障眼法 对不了解srv记录的人有一定效果 不能真的隐藏服务器的源IP地址


文中更新SRV记录的方法已经过时 lucky在2.15版本后已经支持SRV记录
这使得配置方法极大简化 请移步至此教程: 链接


获取域名ID和记录ID以及token

通过dynv6的 REST API 我们可以更新srv 记录中的端口号
API定义:https://dynv6.github.io/api-spec/

但是在这之前我们需要先获取两个ID号和一个Token
一个是域名ID即zoneID另一个是记录ID(srv记录的)即recordID
而Token 相当于是一串密码用来进行身份验证

我们先从token开始
点击右上角的账户名选择 keys

在HTTP Tokens 应该已经有了一个默认的Token
点开 details 查看内容
注意不要泄露token 如果泄露应马上更换

将token复制下来获取ID的时候要用到
ID的获取相对麻烦一些 dynv6的文档中用的是curl
我们直接使用lucky中的 webhook 功能就不用再去下curl了

打开lucky 点击左侧的 计划任务 添加计划任务

设置内容如下:

  • 开关:关闭
  • 执行周期和时间:任意 这个只是测试用的
  • 添加子任务
    类型 callweb
    接口地址:https://dynv6.com/api/v2/zones
    请求方法:GET
    请求头:
    Authorization: Bearer 之前获取的TOKEN
    Accept: application/json
    
    启用 禁用成功字符检测
    保存任务

点击手动触发

查看日志中输出的信息
如果配置正确会 返回域名和ID
这里的ID就是域名ID即zoneID 有了这个我们才能获取记录ID

接下来获取record ID

修改计划任务中的内容 将请求地址修改为:
https://dynv6.com/api/v2/zones/刚才获取的ID/records

其他都不变 保存规则再次点击手动触发 查看日志中的返回内容如果配置正确会返回域名和ID

这次的ID就是 记录ID 了即recordID
现在我们就可以进行srv记录的端口更新了
这个要到stun穿透里面设置不过 我们可以先在这测试一下

再次修改任务

接口地址改为:https://dynv6.com/api/v2/zones/你的域名ID/records/你的记录ID

请求方法:PATCH

请求主体填写:

{
"name": "记录名称",
"port": 1024
}

记录名称是刚才获取记录ID时返回的 Name的值
端口号任意 仅用于测试

例如

{
"name": "_minecraft._tcp.mc",
"port": 1024
}

保存规则点击手动触发
查看日志中的返回内容如果配置正确会返回srv记录的详细信息 同时查看端口是否已经更新

记录下刚才填写的配置一会儿要在stun穿透里面设置
(这里踩了个坑 name 必须要有不然会报错 之前没加上导致一直报错 还在QQ群友帮助测试后才发现这个问题)


设置DDNS解析

选择左侧的动态域名解析

添加任务

  • 名称: 任意
  • **托管服务商:**dynv6
  • Token: 填写之前获得的token
  • 类型: 选择IPv4
  • 域名列表: 填写 之前SRV记录指向的域名
  • 保存规则

配置效果
等待片刻后显示 公网IP未改变更新成功 即设置正确


设置STUN穿透

选择左侧的stun内网穿透 添加穿透规则

名称: 任意
穿透类型: IPv4 TCP
监听端口: 可自定义 不和其他程序冲突即可 这里使用 22333
目标地址: 设置为mc服务端运行的地址 如果和lucky运行在同一设备上使用127.0.0.1即可
目标端口: 设置为mc服务端监听的端口 这里用的是25678

打开webook开关

填写的内容和之前在计划任务中测试时的基本相同

接口地址:https://dynv6.com/api/v2/zones/你的域名ID/records/你的记录ID
请求方法:PATCH

请求头:

Authorization: Bearer 之前获取的TOKEN
Accept: application/json

请求主体:

{
"name": "记录名称",
"port": #{port}
}

记录名称是之前获取记录ID时返回的 Name 的值

例如

{
"name": "_minecraft._tcp.mc",
"port": #{port}
}

调用成功字符串检检测:SRV(要大写)

填写完成后点击 右上角的手动触发 查看是否调用成功
成功 会返回记录的详细信息 注意这里的端口号变成了 6666 保存规则

最终效果

至此我们已经完成了配置
当stun穿透的端口或者IP发生变化时DDNS记录会自动更新

玩家无需从新输入地址和端口 只不过在变化瞬间会掉线 重新登录一下即可
当然这种变化一般不会太频繁 不过这要看地区和运营商 毕竟运营商NAT配置方式各不相同

不过有时候DNS缓存及时没有更新 可以使用下列命令刷新 Windows DNS 缓存
ipconfig /flushdns

或者制作成批处理使用起来更方便

@echo off
ipconfig /flushdns
pause

游戏测试环节

游戏版本:Minecraft 1.16.5 Java Forge 36.2.41
使用 自定义局域网联机(Lan Server Properties) mod固定端口

值得注意的是在1.16.5下有一个bug
离线登录玩家无法进行多人游戏即多人游戏按钮被禁用 加个Mod即可修复


参考资料

  • https://www.bilibili.com/read/cv25389887/
  • https://dusays.com/383/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统管理员的日常困境与幽默自嘲

这篇文章通过Reddit论坛上系统管理员们的真实讨论,展现了IT专业人员面对"请联系系统管理员"这类提示时的无奈与幽默,揭示了技术支持工作中的常见困境和职业共鸣。这篇文章通过Reddit论坛上系统管理员们的真…

46设计网站官网网站开发项目团队人员

前言 如果你被hutool坑过、被fastjson坑过,nicetool帮你解脱! 如果你想用稳定、Spring原生的工具类,nicetool已帮你封装! nicetool不生产工具,只是JDK和Spring的封装侠! 介绍 nicetool:超好…

实用指南:Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化

实用指南:Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

电子商务网站类型培训学校 网站费用

处理域名连接nacos读取配置异常 1 项目启动报错2 问题处理3 刷新依赖重启问题解决 1 项目启动报错 使用ip可以正在启动,但是使用域名报下面的错误 2024-06-15 17:37:22.981 ERROR 29268 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : parse …

视频素材网站建设有没有专门做印刷图的网站

前言 对于使用jmeter工具完成接口测试的测试工程师而言。在工作中,或者在面试中,都会遇到一个问题。 CSV文档做了一大笔测试数据后,怎么去校验这个结果呢? 现在大部分测试工程师可能都是通过人工的方法去查看结果,十几…

AI数据标注平台获融资挑战行业巨头

一家AI数据平台公司获得1300万美元融资,专注于为开发者提供数据标注、管理和模型评估工具,帮助构建高质量AI训练数据集,客户包括多家知名科技企业。AI数据平台获得1300万美元融资挑战行业竞争对手 人工智能数据平台…

详细介绍:如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)

详细介绍:如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

广州网站ui设计贵港免费的网站建设

我是个前端菜鸡,最近准备学习一点前端知识,先从Bootstrap5开始,毕竟早期Bootstrap还是比较火的。推出的Bootstrap5不再和jQery强制绑定,这里直接按照官方文档上来操作,打包工具我们选择Webpack。 一 前期准备 前期准备…

网站开发工具最好用做网站的工作量

https://blog.csdn.net/layman1024/article/details/72628379

Go 为何天生适合云原生? - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

ARC 207

目前打得最好的一集。 A 考虑如果 \(\le 0\) 还会减一,那么花掉的钱就是,\(1+2+\cdots +(n-1)\)。现在的问题就是,可能少花掉一些。 最多花掉 \(\mathcal{O}(n^2)\),所以考虑计数这个。发现其实,花掉的是 \(\sum_…

半年小结 Vol4. 跌跌撞撞开启 PhD 生涯

最近一直没能抽出时间总结于是半年总结一直拖拖拖,距离上次半年复盘已过了九个月,这九个月发生了很多:职业发展上经历了 idea 、实现、回片测试完整走完第一个加速器流片工作,切身体会了流片的血与泪; 第一次离开…

资源网站很难做做长图文网站

在c++中,一个文件调用另外一个文件最直接最快捷的方式就是#incldue<头文件>的使用,那么在元数据描述性语言QML中,如何从一个界面描述调用另外一个界面描述,一个.qml文件调用另外一个.qml呢?QML虽然有个import,但是用法可以说完全不同于#include。 引用方法1:直接…

大连可以做网站的公司北京公司注册最新政策

用Jsp Servlet和Jquery以及SQLServer实现商品管理系统。 采用MVC三层架构进行此程序的开发。 功能分析&#xff1a; 1.登录功能 2.查询和联合查询商品 3.增加商品 4.删除商品 效果演示 登录页面 查询页面 添加商品 点击删除 实现商品管理系统需要数据库和程序两部分。…

兰州网站建设推荐q479185700上快网站没排名怎么办

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

深入解析:C++:内存管理

深入解析:C++:内存管理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

电商手机网站开发非国产手机浏览器

切洋葱时&#xff0c;由于洋葱有一种挥发物质&#xff0c;常使切菜的人流泪。防止的方法是&#xff1a; 1.在切洋葱前&#xff0c;把切菜刀在冷水中浸一会儿&#xff0c;再切时就不会因受挥发物质刺激而流泪了。 2.将洋葱对半切开后,先泡一下凉水再切,就不会流泪了. 3.放微波炉…

大数求余

大数求余问题: 在仅使用 int32 类型存储的前提下, 计算 \(x^a\ \text{mod}\ p\) (即 \(x^a\ \%\ p\)). 基本的运算规则: \((xy)\ \%\ p = [(x \ \% \ p)(y \ \% \ p)] \ \% \ p\) 循环求余 当 \(x < p\) 时, \[x^a …