← 返回文章列表

内网穿透 + Minecraft 局域网联机:一次 frp 部署记录

📅 2026年9月10日 · 📝 3445 字 · ⏱️ 9 分钟 · #网络#服务器#Minecraft


内网穿透 + Minecraft 局域网联机:一次 frp 部署记录

朋友从公网连进了我的本机 MC 世界——链路是通的,坑却踩在了最意想不到的地方。

目标:让朋友通过公网 IP 连进我在本机开的 Minecraft 局域网世界。
工具:frp(frps 部署在自己的 VPS 上,frpc 跑在本地 Windows)。
结果:链路跑通,本机双开验证成功,但发现 VPS 在海外导致延迟偏高,留待后续换国内服务器优化。


一、需求背景

想和朋友远程联机玩 MC,但不想租用现成的联机服务器(比如蓝盾、SakuraFrp 之类的第三方),于是决定自己动手:用 frp 做内网穿透,把本机 MC 的局域网端口映射到自己的 VPS 公网端口上。

核心链路是这样的:

朋友 / 第二台设备
        │
        ↓
VPS 公网 IP:27891      ← frps(自己的 VPS)
        │
        ↓  frp 隧道
   frpc(本地 Windows)
        │
        ↓
127.0.0.1:25565        ← Minecraft 局域网世界

二、环境

角色位置说明
frps(服务端)自己的 VPSUbuntu,systemd 管理,frp 0.71.0
frpc(客户端)本地 WindowsD:\frp\frpc.exe
MC 服务本地 Windows游戏内「对局域网开放」,监听 25565

注:我的 VPS 在新加坡,这是后面延迟高的根源,这是真没办法了我说。

三、服务端部署(frps)

在 VPS 上安装 frp,配置 frps.toml

# /etc/frp/frps.toml
bindPort = 7000             # frpc 连接 frps 用的端口
auth.token = "<你的token>"   # 认证 token,两端必须一致

注册成 systemd 服务并启动:

sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps   # 确认 active (running)

⚠️ 重要提醒:VPS 的云厂商控制面板里一般还有一层安全组 / 防火墙,除了系统内放行,还要在面板里放行 bindPort(7000)和后面要用的映射端口(0721),否则外面连不进来。

四、客户端部署(frpc)

本地 Windows 配置 frpc.toml

# D:\frp\frpc.toml
serverAddr = "<你的VPS公网IP>"
serverPort = 7000
auth.token = "<你的token>"   # 与 frps 一致

[[proxies]]
name = "mc"                 # 隧道名称,自定义
type = "tcp"
localIP = "127.0.0.1"       # 本机 MC 监听地址
localPort = 25565           # 本机 MC 端口
remotePort = 0721          # 映射到公网的端口

启动:

D:\frp\frpc -c D:\frp\frpc.toml

看到 [mc] start proxy success 就说明隧道建立了。此时 frps 侧日志会显示:

[mc] tcp proxy listen port [0721]
new proxy [mc] type [tcp] success

五、踩坑记录(重点)

这段才是本文真正有价值的部分——一开始死活连不上,排查了半天,最后发现跟网络完全无关。

坑 1:以为「对局域网开放」端口是固定的

原版 MC 游戏里点「对局域网开放」,端口是随机分配的(聊天栏会显示「已在端口 XXXX 上开放」),并不能直接指定成 25565。

我这次实际显示的是 25565,用 netstat -ano | findstr 25565 也确认了监听存在:

TCP    0.0.0.0:25565    0.0.0.0:0    LISTENING    22844

但如果你遇到端口随机的情况,要么记下聊天栏显示的那个随机端口去改 frpc 配置,要么用 LAN Server Properties 之类的模组把端口固定下来。

坑 2:本机连自己的公网 IP(NAT 回环)

一开始我从本机去连 公网IP:27891,担心会遇到 NAT 回环(hairpin NAT)——内网设备访问自己的公网地址,数据包要「出网再绕回来」,很多路由器不支持,导致连不上。

这个坑其实没踩到,实测这条路是通的(后来证明 VPS 是独立公网 IP,回环没问题)。但排查时它很干扰判断,值得记一笔:测试穿透是否成功,最好用另一条网络(比如手机热点)来连,而不是从本机连自己的公网 IP。

坑 3(真正的关键):同名账号冲突,报「该名称已被占用」

这是最终真相。

我在本机开了两个 MC 实例来测试:A 开房间,B 用 公网IP:27891 连。结果 B 报 「该名称已被占用」(英文版 That name is already taken)。

这个报错恰恰说明——链路已经通了!数据包成功穿过了 frp 到达 MC A,MC A 也响应了,只是因为它发现「有个同名玩家已经在线」,把 B 踢掉了。

原因:两个实例登录的是同一个账号,玩家名和 UUID 完全相同,MC 服务端不允许同名玩家同时在线。

解决办法:给第二个实例换个名字。用第三方启动器(PCL2 / HMCL / BakaXL)以离线模式登录,用户名填个不同的(比如 xxx2),再连就进去了。「对局域网开放」的世界默认不验证正版,离线改名实例可以直接进。

复盘一下:这个坑的迷惑性在于,它看起来像「连不上」,其实是「连上了但被拒」。排查时如果只盯着网络层(端口、防火墙、回环),会一直找不到原因。

六、验证结果

✅ frpc 日志出现 start proxy success,frps 日志出现 listen port [27891]
✅ 本机双开,第二个实例换名后成功连入
✅ 整条链路 公网IP:27891 → frps → frpc → 127.0.0.1:25565 打通

七、遗留问题:延迟

当前 VPS 在新加坡,国内连过去物理距离远,MC 这种实时游戏对延迟很敏感,所以玩起来偏卡。

后续计划:换一台国内服务器(同省 / 同运营商最佳),延迟能压到十几毫秒。需要注意:

  1. 国内服务器开公网端口,正规途径需要备案
  2. 安全组记得放行 7000 和 27891;
  3. 原版 MC 局域网是 TCP,目前用 type = "tcp" 就够,不必折腾 UDP。

八、总结

  1. frp 部署本身不难,难的是排查方向——这次真正的障碍是 MC 的账号同名机制,而不是网络。
  2. 报错要看本质:「该名称已被占用」= 连上了但被同名检测拒绝,别把它当成网络不通。
  3. 测试穿透用独立网络(手机热点)最可靠,别只在本机自连自测。
  4. 海外 VPS 做游戏联机延迟是硬伤,真要玩还是得上国内服务器。

希望这篇记录能帮你少走弯路。但最近我们学校企业微信说学校算力平台少用 frp ,向日葵远程这些,不然容易被攻击😅,不过目前那个算力平台我用得不算太多啊,不过后面等我把ai生图从本地部署转移到服务器上去的时候,估计就可以美美出图了😋

有一说一我觉得这个真挺有用的,尤其是我们宿舍现在已经所有人都在玩mc了😋

——鱼小鳄Sugary

——2026年9月10日

💬 评论 (0)

加载中...