Skip to content

Wiki zh tw

pjscruggs edited this page Nov 11, 2026 · 1 revision

Raknetify2 · 繁體中文 (台灣)

語言

多人遊戲

透過 RakNet 連接 Minecraft 用戶端與伺服器。

下載 · GitHub

Minecraft Raknetify2 用戶端 / 伺服器
Fabric mods/raknetify2-fabric-*.jar 用戶端 / 伺服器
Forge mods/raknetify2-forge-*.jar 用戶端 / 伺服器
NeoForge mods/raknetify2-neoforge-*.jar 用戶端 / 伺服器
Spigot / Paper plugins/raknetify2-spigot-*.jar 伺服器
Velocity plugins/raknetify2-velocity-*.jar Velocity
BungeeCord plugins/raknetify2-bungee-*.jar BungeeCord

新增伺服器

  1. 多人遊戲

  2. 新增伺服器

  3. 伺服器位址

    伺服器位址
    RakNet · UDP raknet;play.example.com:25565
    TCP play.example.com:25565
  4. 完成

  5. 加入伺服器

F3 · Raknetify2

F3
RakNet · UDP 已啟用 · MTU 1400
TCP 未啟用

Velocity / BungeeCord

  1. 用戶端 · Raknetify2 → UDP → Velocity / BungeeCord · Raknetify2
  2. Velocity / BungeeCord → TCP → 伺服器
連接埠號碼 · UDP Java
Fabric / Forge / NeoForge 1–65534 -Draknetify.fabric.portOverride=25570
Spigot / Paper ≥ 0.1.0-beta.1.431 1–65535 -Draknetify.spigot.portOverride=25570
Velocity 1–65534 -Draknetify.velocity.portOverride=25570
BungeeCord 1–65534 -Draknetify.bungee.portOverride=25570

連線逾時

伺服器位址 UDP
raknet;play.example.com:25580 play.example.com:25580 → NAT → 192.0.2.10:25570
伺服器 · 192.0.2.10 25570/udp

config/raknetify2-compatibility.json

伺服器 / Velocity / BungeeCord

JSON
① ② ③ {"mode":"ordered"}
① ∥ ② ∥ ③ {"mode":"multichannel"}

Simple Voice Chat

伺服器 Raknetify2 · UDP 25565 Simple Voice Chat
Fabric / Forge / NeoForge config/raknetify2-voicechat.json · {"enabled":true} config/voicechat/voicechat-server.properties · port=-1
Spigot / Paper config/raknetify2-voicechat.json · {"enabled":true} plugins/voicechat/voicechat-server.properties · port=-1

Simple Voice Chat · Velocity / BungeeCord

PROXY protocol v2 · UDP

伺服器位址 trustedProxies RakNet
192.0.2.10 · PROXY v2 / UDP ["192.0.2.10"] ✓
192.0.2.11 · PROXY v2 / UDP ["192.0.2.10"] ✗
用戶端 → RakNet / UDP ["192.0.2.10"] ✗

config/raknetify2-proxy-protocol.json

{"trustedProxies":["192.0.2.10"]}

Minecraft ≥ 1.20.5 · /transfer

  1. 伺服器 A · Fabric / Forge / NeoForge · config/raknetify2-transfers.json

    {"destinations":[{"host":"play.example.com","tcpPort":25565,"udpPort":25570}]}
  2. 伺服器 B · play.example.com · server.properties → accepts-transfers=true

  3. 伺服器 A · /transfer play.example.com 25565 Alex → 用戶端 (Alex) → RakNet · play.example.com:25570

PacketOrdering

Minecraft
ui 選項
entity 骷髏
world_interaction 物品欄
effects 粒子密度
chunk 方塊

PacketOrdering.java

遊戲版本不相容!

回報錯誤

首頁

Raknetify2

Raknetify2 讓 Minecraft 多人遊戲透過 UDP 上的 RakNet 通訊。它將資料分到多個各自保證順序的通道。某個通道遺失封包時,其他通道中無關的資料仍能繼續傳輸。因此,即使正在補發遺失的資料或傳輸區塊,遊戲也有機會及時回應你的操作。

Raknetify2 是 Raknetify 的一個分支,原專案由 ishland 開發。該分支獨立維護,支援更新的 Minecraft 版本,並持續維護底層傳輸、各平臺的適配和相容性測試。

入門

  1. 檢視 Minecraft 版本和模組相容性。
  2. 選擇下載檔案並安裝。
  3. 使用類似 raknet;play.example.com 的位址連線。

伺服器指南

模組作者可以用資料包排序介面宣告自訂承載資料與 Minecraft 網路資料之間的先後關係。

專案連結

Raknetify2 使用 MIT 許可證,並保留原有的版權宣告。其網路實現基於 Raknetify 和 netty-raknet。

安裝

從 GitHub Releases 下載發行版。安裝前請核對該版本要求的 Minecraft 版本與模組載入器。

安裝位置 檔案 資料夾
Fabric 用戶端或伺服器 raknetify2-fabric-*.jar mods
Forge 用戶端或伺服器 raknetify2-forge-*.jar mods
NeoForge 用戶端或伺服器 raknetify2-neoforge-*.jar mods
Spigot 或 Paper 伺服器 raknetify2-spigot-*.jar plugins
Velocity 代理 raknetify2-velocity-*.jar plugins
BungeeCord 代理 raknetify2-bungee-*.jar plugins

更換 JAR 檔案前,先關閉用戶端或停止伺服器。在同一安裝目錄中,先移除原版 Raknetify 及舊版 Raknetify2 的 JAR,再放入新檔案。

用戶端的資料夾位於你實際啟動的 Minecraft 例項或整合包內;伺服器和代理的資料夾分別位於各自的安裝目錄。如果載入器尚未建立相應資料夾,請自行建立。

直接連線伺服器

  1. 在用戶端安裝適用於你的載入器的模組。
  2. 在伺服器上安裝匹配的模組。如果是相容 Spigot/Paper 的伺服器,則安裝相應外掛。
  3. 按照防火牆與路由器設定操作,允許 UDP 連線到伺服器。
  4. 重新啟動用戶端和伺服器。
  5. 在「新增伺服器」中輸入位址,例如 raknet;play.example.com 或 raknet;play.example.com:25565。

位址沒有 raknet; 字首時,連線使用 TCP。

只在用戶端安裝模組,遠端伺服器仍無法接受 RakNet 連線。伺服器管理員也要提供 RakNet 接入點。加入其他人伺服器的玩家通常無需在自己的路由器上設定入站連接埠轉送。

Velocity 與 BungeeCord

安裝配套的代理外掛和用戶端模組。Velocity 與 BungeeCord 介紹了監聽設定、到後端的轉送、存取限制以及應提供給玩家的位址。

使用單獨的 UDP 監聽連接埠

如果玩家直接連線 Minecraft 伺服器,按下表設定對應的 Java 參數。代理伺服器管理員請參閱 Velocity 與 BungeeCord 的監聽設定。

平臺 Java 參數 可用連接埠範圍
Fabric、Forge 或 NeoForge 伺服器 -Draknetify.fabric.portOverride=25570 1 到 65534
Spigot 或 Paper 伺服器 -Draknetify.spigot.portOverride=25570 1 到 65535

Forge 和 NeoForge 共用同一套監聽程式碼,所以它們的屬性名也含有 fabric。請將 25570 替換為你希望使用的 UDP 連接埠。

Spigot / Paper ≥ 0.1.0-beta.1.431

在 Java 啟動指令的 -jar 前加上參數,或將其填入主機面板的 JVM 參數欄。重新啟動伺服器,並放行所選監聽連接埠的 UDP 流量。如果對外連接埠也是 25570,請用 raknet;play.example.com:25570 連線。如果路由器轉換了連接埠,則用戶端位址應填寫對外連接埠。TCP 連接埠沿用原值。

在 Spigot/Paper 上,UDP 使用 Minecraft TCP 接聽程式繫結的本地位址。如果指定的連接埠無效或已被佔用,RakNet 將無法啟動。可在啟動紀錄檔中核對實際繫結的 UDP 位址與連接埠。若要改回與 TCP 相同的連接埠號,移除該參數並重新啟動即可。

也可以在路由器或 UDP 代理上另設公用網路 UDP 連接埠,轉送到現有監聽連接埠,無需修改伺服器的 Java 參數。

開發版

在 GitHub Actions 中開啟一次成功的 main 分支執行記錄,下載 Artifacts 中的壓縮檔。下載工作流程產物需要登入 GitHub。根據上方安裝表,從壓縮檔中選擇合適的 JAR。

Velocity 與 BungeeCord

Velocity 和 BungeeCord 位於玩家與 Minecraft 後端伺服器之間。在代理上以及每個使用 RakNet 連線的用戶端上安裝 Raknetify2。

Raknetify2 用戶端 --UDP--> Velocity 或 BungeeCord --TCP--> 後端伺服器

這種連線方式無需在後端安裝 Raknetify2。你的網路原本需要哪些模組、外掛和轉送功能,後端仍須具備。Raknetify2 不負責 Minecraft 版本轉換,也不改變代理的帳號驗證方式。

安裝代理外掛

  1. 先確認普通 TCP 連線可以透過代理正常登入,也能在後端伺服器間切換。
  2. 停止代理,然後從 GitHub Releases 下載匹配的外掛。
  3. 將 raknetify2-velocity-*-all.jar 或 raknetify2-bungee-*-all.jar 放入代理的 plugins 資料夾。移除同一目錄中的舊版 Raknetify 或 Raknetify2 外掛。
  4. 按照安裝指南安裝相應的 Raknetify2 用戶端模組。
  5. 檢查下方的監聽設定,重新啟動代理,並檢視紀錄檔中是否有 RakNet 監聽錯誤。
  6. 允許公用網路 UDP 流量到達代理,並依照防火牆與路由器設定限制後端遊戲連接埠的存取。

用戶端與代理要使用相互相容的 Raknetify2 發行版。混用版本前請查閱相容性說明。

Velocity

velocity.toml 中的 bind 指定 Velocity 接受 Minecraft 連線的位址和 TCP 連接埠。Raknetify2 預設在相同連接埠號上監聽 UDP。[servers] 各項對應後端伺服器,應繼續填寫後端的 TCP 位址。詳見 Velocity 的設定參考。

若要單獨指定 UDP 連接埠,請在 Velocity 啟動指令的 -jar 前加入以下 JVM 參數:

-Draknetify.velocity.portOverride=25570

將 25570 換成所選連接埠。此設定只改變 RakNet 的 UDP 連接埠,Velocity 的 TCP 連接埠和後端位址仍沿用原值。修改後重新啟動 Velocity。

在 Velocity 和後端上都要設定玩家資訊轉送。後端支援時,請使用現代轉送模式,並妥善保管轉送金鑰。按 Velocity 的玩家資訊轉送指南中適用於該後端的步驟操作。啟用轉送後,仍須保留後端的防火牆限制。

BungeeCord

在 BungeeCord 的 config.yml 中,每個 listeners 項下的 host 值指定一個 Minecraft 監聽位址與 TCP 連接埠。Raknetify2 預設在同一連接埠號上增加 UDP 監聽。servers 各項儲存後端 TCP 位址。詳見 BungeeCord 設定指南。

若要單獨指定 UDP 連接埠,請在 BungeeCord 啟動指令的 -jar 前加入以下 JVM 參數:

-Draknetify.bungee.portOverride=25570

這個參數對整個代理程序生效。如果設定了多個 Minecraft 接聽程式,請先在啟動紀錄檔中核對實際的 RakNet 監聽位址和連接埠,再新增防火牆規則。修改參數後重新啟動 BungeeCord。

保留代理上的帳號驗證。如果後端是 Spigot,請按照 BungeeCord 的 IP 轉送指南,在代理上設定 ip_forward: true,同時在後端設定 settings.bungeecord: true。僅啟用轉送無法阻止玩家繞過代理直接連線後端。請按防火牆設定說明限制後端存取。

確定玩家應使用的位址

兩種代理的連接埠參數都接受 1 到 65534。無效值會被忽略,所以要在啟動紀錄檔中核對實際繫結的 UDP 連接埠。移除參數並重新啟動,即可恢復為 Minecraft 接聽程式的連接埠號。

玩家連線代理的公用網路主機名稱與 UDP 連接埠,例如 raknet;play.example.com:25570。如果路由器轉換了連接埠,用戶端位址應填寫轉換前的公用網路 UDP 連接埠。省略 raknet; 字首的位址仍使用代理的 TCP 監聽連接埠。

Query、Geyser 等其他 UDP 服務應各用單獨的 UDP 連接埠。另改 TCP 連接埠無法解決 UDP 套接字衝突。

語音聊天與額外的 UDP 轉送

在 Velocity 和 BungeeCord 上,Simple Voice Chat 使用自己的代理外掛和 UDP 連接埠。請按語音聊天代理說明設定。

如果 Minecraft 代理前面還有一層 UDP 中繼,且中繼會發送 PROXY 協定 v2 標頭,請按 UDP 轉送與 PROXY 協定設定 Raknetify2。單獨使用 Velocity 或 BungeeCord 不需要這項設定。

驗證連線

在區域網外使用 Raknetify2 用戶端測試。透過代理加入,並在你使用的後端之間切換,確認玩家身分和權限始終正確。

  • 如果經過代理的 TCP 連線正常,但 RakNet 超時,請檢查代理的 UDP 監聽、對外連接埠、IPv4 與 IPv6 路由及防火牆規則。
  • 如果兩種傳輸方式都在代理連線後端時失敗,請檢查該後端的 TCP 位址、存取規則及玩家資訊轉送設定。
  • 如果代理報告 UDP 連接埠已佔用,請檢查是否有 Query、Geyser、語音代理或其他程序綁定了該連接埠。

報告問題時,請同時附上同一次連線嘗試的代理紀錄檔和後端紀錄檔。需要註明哪些版本,見疑難排解。

防火牆與路由器設定

本指南面向伺服器管理員。玩家發出的 UDP 流量必須能到達接受 RakNet 連線的伺服器或代理。預設情況下,Raknetify2 使用與 Minecraft 的 TCP 監聽連接埠相同的連接埠號。

同一區域網內的玩家應使用伺服器的內部網路位址,並在伺服器主機防火牆中放行 UDP。外網流量需要經過路由器的 IPv4 NAT 時,才需要在路由器上設定連接埠轉送。

確定目標位址與連接埠

直連伺服器

將公用網路 UDP 流量轉送到執行 Minecraft 伺服器並已安裝 Raknetify2 的主機,目標連接埠為這臺伺服器的 RakNet UDP 監聽連接埠。在主機防火牆中放行該連接埠,並保留現有 TCP 路由供普通 Minecraft 連線使用。

例如,若 Raknetify2 在 UDP 25570 上監聽,就將公用網路 UDP 連接埠轉送到伺服器內部網路位址的 25570 連接埠。伺服器的 TCP 連接埠可以保留為 25565。如需另選 UDP 連接埠,請參閱直連伺服器的監聽設定。

Velocity 或 BungeeCord

將公用網路 UDP 流量轉送到執行 Velocity 或 BungeeCord 並已安裝 Raknetify2 外掛的主機。轉送目標應為代理的 RakNet UDP 監聽連接埠。保留代理原有的公用網路 TCP 路由,供普通 Minecraft 連線使用。

代理透過 TCP 連線 Minecraft 後端伺服器。在代理上安裝 Raknetify2,無需向玩家開放後端的遊戲 UDP 連接埠。

連線方向 應允許的存取
玩家到代理 允許公用網路 UDP 到達 RakNet 監聽連接埠,並保留現有的公用網路 TCP 監聽連接埠
代理到後端伺服器 後端 Minecraft TCP 連接埠僅對指定的代理主機開放
玩家直接存取後端遊戲連接埠 保持阻止,包括 IPv6 存取

如果代理與後端直接執行在你管理的同一臺專用機器上,後端可以只監聽迴環位址,並在代理上填寫這個位址。跨主機部署時,使用防火牆或隔離的專用網路,使後端 TCP 連接埠僅對代理主機開放。容器和託管主機也應根據網路佈局設定等效的存取限制。可參考 Velocity 後端安全指南和 BungeeCord 防火牆指南。

玩家資訊轉送與防火牆限制需要配合使用。允許直接存取後端可能讓人繞過代理的登入檢查。外掛安裝、轉送設定與 UDP 連接埠參數見 Velocity 與 BungeeCord。

公用網路與本地連接埠號

路由器可以轉換連接埠,因此對外連接埠號和監聽連接埠號可能不同:

設定項 應填連接埠
用戶端填寫的伺服器位址 公用網路 UDP 連接埠
路由器轉送規則的外部連接埠 公用網路 UDP 連接埠
路由器轉送規則的內部連接埠 RakNet 監聽的 UDP 連接埠
主機防火牆規則的本地連接埠 RakNet 監聽的 UDP 連接埠

IPv4 連接埠轉送

在 IPv4 路由器後架設伺服器時:

  1. 找到接受 RakNet 連線的那臺機器的區域網 IPv4 位址。使用 DHCP 位址保留或合適的靜態位址,以免日後位址變動導致轉送到其他機器。
  2. 為玩家使用的對外連接埠新增 UDP 轉送規則。
  3. 將規則的目標設為該主機的內部網路位址,以及 RakNet 正在監聽的 UDP 連接埠。
  4. 在主機防火牆上允許 UDP 流量進入監聽連接埠。

例如,伺服器在 UDP 25565 上監聽,可以設定對外連接埠 25565、目標位址 192.168.1.100、目標連接埠 25565。請將範例位址換成你伺服器實際的內部網路位址。

保留現有的 TCP 規則以供普通 Minecraft 連線使用。僅有 TCP 轉送規則無法轉送 UDP。

轉送後仍然無法連線

檢查流量到達你的路由器之前,是否已經過另一臺路由器或運營商的 NAT。如果兩臺路由器都由你管理,兩臺都要設定轉送。如果運營商使用運營商級 NAT,可詢問能否分配公用網路 IPv4 位址,也可使用支援入站 UDP 的託管服務或隧道。本機路由器上的轉送規則無法更改運營商的 NAT 設定。公用網路 WAN 位址的要求見 TP-Link 連接埠轉送說明。

IPv6 防火牆規則

在路由器的 IPv6 防火牆和主機防火牆上都放行所選 UDP 連接埠。規則應指向接受 RakNet 連線的主機的 IPv6 位址。

檢查主機名稱對應的 IPv6 位址確實指向該主機。如果機器的 IPv6 位址發生變化,應更新 DNS 記錄以及引用該位址的防火牆規則。

同時釋出 IPv4 和 IPv6 位址的主機名稱,兩個位址都要有可用路由。如果有的玩家能連線,有的不能,請檢查兩套規則。

如果 IPv4 轉送時更改了連接埠號,要確認玩家填寫的連接埠透過 IPv6 也能到達接聽程式。IPv4 的連接埠轉換不會自動設定 IPv6 路由。

託管服務與隧道

託管商或隧道服務必須在提供給玩家的公用網路接入點上支援 UDP。除伺服器自己的防火牆外,也要檢查服務商分配的連接埠和網路防火牆規則。

如果前面還有一層 UDP 代理,用 PROXY 協定 v2 轉送用戶端位址,請遵循 UDP 轉送與 PROXY 協定的說明,並將接收端的 UDP 監聽連接埠限制為僅允許受信任的代理存取。

驗證連線

從伺服器區域網以外的網路,用更新後的 Raknetify2 用戶端連線,例如 raknet;play.example.com:25565。這個位址要填寫公用網路 UDP 連接埠。

用真正的 RakNet 連線驗證路由。正常工作的 UDP 服務也可能丟棄無法識別的探測包,因此 UDP 掃描沒有收到回應時,結果並不確定。詳見 Nmap 的 UDP 掃描文件。

TCP 連線成功只能說明 TCP 路由正常。如果 RakNet 超時,請按疑難排解指南檢查接聽程式、轉送目標、UDP 連接埠和防火牆規則。

相容性

請按你要下載的具體發行版核對相容性。開發分支上已經支援的版本或功能,可能尚未包含在發行版中。

Minecraft 與 Java 版本

如果使用 Fabric,請從 JAR 所在的同一發行版下載 compatibility.json。先在 gameVersions 中找到你的 Minecraft 版本,再檢視 runtimes 中對應條目的 depends 要求。該 JSON 檔案僅供查閱,無需放入 mods 資料夾。

如果使用 Forge、NeoForge 或 Spigot/Paper,請檢視下載檔案及其釋出頁面宣告的版本要求。某個載入器支援某版本,不表示其他載入器也支援。

Raknetify2 宣告的是它所需的最低 Java 版本。Minecraft 或載入器可能要求更高的版本。請選擇能同時滿足三方要求的 Java 版本。

用戶端與伺服器版本

用戶端和接受連線的伺服器或代理,請儘量使用同一 Raknetify2 發行版。混用前先閱讀發行說明。RakNet 加密連線要求兩端都支援認證加密協定。原版 Raknetify,以及在引入該協定之前釋出的 Raknetify2,均無法透過這種加密方式與新版連線。

Raknetify2 承載 Minecraft 現有的遊戲協定。不同 Minecraft 版本之間要互聯,仍需配備相容的協定轉換方案。

其他模組

構建工作流程會針對 Polymer、Krypton、PacketFixer 和 Fast IP Ping 執行相容性檢查。結果適用於工作流程實際選擇的版本和組合。排查某一組合時,請檢視對應發行版的構建結果。

如果大型整合包出錯,請按疑難排解指南操作,報告中附上完整的模組版本資訊。

有序模式

有序模式

預設情況下,某個通道等待補包時,Raknetify2 允許其他獨立通道繼續傳輸。有序模式將所有 Minecraft 資料包放在同一通道中。一個包遺失後,該方向後續的所有包都會等待重傳完成。這能保持某些反作弊軟體要求的順序,但在等待期間,無關的遊戲資料也無法繼續傳輸。

啟用有序模式

  1. 在接受 RakNet 連線的伺服器或代理上,以及每個 RakNet 用戶端上,安裝支援有序模式的 Raknetify2 版本。

  2. 在該伺服器或代理的工作目錄下建立 config/raknetify2-compatibility.json。如果沒有 config 目錄,請先建立。

  3. 寫入以下內容:

    {"mode": "ordered"}
  4. 重新啟動伺服器或代理。

用戶端會自動採用伺服器的設定。玩家無需建立設定檔案,也無需修改原有的 RakNet 伺服器位址。

兩個方向各使用一個可靠有序通道傳輸全部 Minecraft 資料包,包括包組分隔標記與切換世界時的資料包。

代理設定

玩家透過 Velocity 或 BungeeCord 連線時,有序模式應在代理上設定,即使反作弊軟體執行在後端伺服器上也是如此。

切換後端後,此設定仍然生效。在有序模式下,後端發來的保活請求會由代理轉送給真正的用戶端,代理不會就地代答。

檢查設定是否生效

首次建立 RakNet 連線時,控制台會顯示:

Raknetify2 compatibility: ordered (updated clients required, genuine acknowledgements)

相容性協商成功時,紀錄檔還會出現 ordered compatibility negotiated,後面是對端位址。

保持反作弊檢查開啟,並在你實際使用的設定上驗證。

舊版用戶端

不支援有序模式的 RakNet 用戶端無法加入強制使用該模式的伺服器。請更新用戶端的 Raknetify2,或者使用伺服器或代理正常的 TCP 位址與連接埠連線,位址開頭不要加 raknet;。

恢復多通道模式

將檔案內容改為:

{"mode": "multichannel"}

然後重新啟動伺服器或代理。也可以刪除設定檔案,重新啟動後同樣會恢復多通道模式。

設定問題

檔案中只能有一項名為 mode 的設定。它的值必須是 "ordered" 或 "multichannel",區分大小寫。

如果設定無效或檔案無法讀取,RakNet 連線將被拒絕。更正檔案後重新啟動相應程序。

如果控制台仍顯示 multichannel,請檢查檔案是否位於實際接受 RakNet 連線的伺服器或代理的工作目錄中,然後重新啟動對應程序。

自動轉服

Fabric、Forge 和 NeoForge 伺服器可以按設定將支援此功能的用戶端透過 RakNet 轉移到目標伺服器。此功能依賴 Minecraft 從 Java 版 1.20.5 起提供的原生轉服機制。請核對 Raknetify2 發行版是否支援兩端的 Minecraft 版本與載入器。

在發起轉服的伺服器與用戶端上安裝 Raknetify2。目標端必須提供相容的 RakNet 監聽連接埠,並接受 Minecraft 轉入請求。

此設定僅作用於上述三個模組載入器發起的轉服。Spigot/Paper、Velocity 和 BungeeCord 外掛不會讀取這份轉服設定檔案。

設定發起轉服的伺服器

在發起轉服的伺服器目錄下建立 config/raknetify2-transfers.json:

{
  "destinations": [
    {
      "host": "play.example.com",
      "tcpPort": 25565,
      "udpPort": 25570
    }
  ]
}

將範例中的主機名稱與連接埠替換為實際的目標值,再重新啟動發起轉服的伺服器。其他目標也新增在同一個陣列內。

欄位 含義
host 目標主機名稱或 IP 位址,不含傳輸協定字首和連接埠號
tcpPort 原始轉服請求指定的目標連接埠
udpPort 轉入的用戶端應連線的公用網路 RakNet 連接埠

TCP 和 UDP 可以使用同一連接埠號。如果路由器轉換了 UDP 連接埠,此檔案中應填對外連接埠。連接埠號用 JSON 數字表示。

發起轉服時,目標仍填寫普通主機名稱和 TCP 連接埠。Raknetify2 會檢查用戶端是否宣告支援自動轉服。如果用戶端支援且目標匹配,則改用設定的 UDP 連接埠。其他用戶端或未匹配的目標繼續使用原始轉服位址。

匹配依據是轉服請求中的主機名稱和 TCP 連接埠。比較前會統一主機名稱大小寫、末尾的 DNS 點號以及 IPv6 的等價寫法。不透過 DNS 查詢進行匹配,因此即使兩個不同的主機名稱解析到同一位址,也需分別設定。不能使用萬用字元。

設定目標伺服器

如果目標使用 Minecraft 的 server.properties,請設定 accepts-transfers=true 並重新啟動。目標若為代理,可能有單獨的轉服設定。Minecraft 預設拒絕轉入,即使玩家能正常直連該服。

必須先設定好目標端的 RakNet 監聽、公用網路 UDP 轉送和主機防火牆。發起轉服一方的設定檔案只決定傳送給用戶端的位址。

如果目標主機名稱同時釋出 IPv4 和 IPv6 位址,請檢查兩條路由。排查自動轉服前,先試一次到目標端的普通 RakNet 直連。

保留目標端原有的登入與連線權限檢查。此設定不會授予玩家存取權限,也不能替代伺服器身分驗證。

設定錯誤與停用方法

欄位缺失、欄位名未知、連接埠無效或目標重複,都會在初始化時報設定錯誤。請根據伺服器紀錄檔定位錯誤,修正 JSON 後重新啟動。

要關閉自動選擇,請移除設定檔案或將內容改成 {"destinations": []},然後重新啟動發起轉服的伺服器。此後轉服請求將保留原始位址。

UDP 轉送與 PROXY 協定

UDP 代理可以轉送 RakNet 流量,並透過 PROXY 協定 v2 保留用戶端的原始位址。只有上游 UDP 代理會向接聽程式傳送此類標頭時,才應啟用本功能。普通路由器連接埠轉送無需啟用。

在接收轉送 UDP 流量的伺服器或 Minecraft 代理上建立 config/raknetify2-proxy-protocol.json:

{
  "trustedProxies": ["192.0.2.10"]
}

將範例替換為 UDP 代理的實際來源 IP 位址,或你能控制的 CIDR 網段。若中途經過 NAT,以接收端實際看到的來源位址為準。可以直接填寫 IPv4 或 IPv6 位址,不能填寫 DNS 主機名稱。設定後重新啟動接收端的伺服器或代理。

將轉送代理設定為給 UDP 流量新增 PROXY 協定 v2 標頭。Raknetify2 僅接受來自所列來源的轉送用戶端位址。啟用本設定時,沒有此類標頭的 RakNet 直連會被拒絕。TCP 接聽程式繼續使用原有設定。

信任與存取控制

列出的每個代理都受信任,可以宣告用戶端的位址。在後端的防火牆中限制 UDP 連接埠,只允許指定的代理存取。在網路條件允許的範圍內,儘量縮小信任網段。

檔案中只能有 trustedProxies 一項,且必須至少包含一個條目。空陣列會報錯。如果檔案無效,RakNet 接聽程式將無法啟動。

要恢復 UDP 直連,請移除該檔案並重新啟動接聽程式,同時按新的連線路徑更新上游代理的轉送方式和防火牆規則。

啟用後若無法連線,請檢查後端看到的代理實際來源位址、設定的受信任網段,以及代理是否為 UDP 發出了 PROXY 協定 v2 標頭。

Minecraft 代理的安裝與後端設定見 Velocity 與 BungeeCord。

Simple Voice Chat

在 Fabric、Forge、NeoForge、Spigot 和 Paper 上,Raknetify2 可以和 Simple Voice Chat 共用伺服器的 UDP 監聽連接埠。

在伺服器和所有需要語音聊天的用戶端上安裝 Simple Voice Chat。其餘語音設定請參閱該模組的伺服器設定指南。

Raknetify2 的設定檔案放在伺服器頂層的 config 目錄,Spigot/Paper 也一樣。Simple Voice Chat 自己的設定檔案沿用下述各平臺的位置。

共用遊戲連接埠

  1. 在伺服器目錄下建立 config/raknetify2-voicechat.json,寫入以下內容:

    {"enabled": true}
  2. 在 Simple Voice Chat 的伺服器設定中設定 port=-1。模組伺服器的檔案是 config/voicechat/voicechat-server.properties;Spigot/Paper 上是 plugins/voicechat/voicechat-server.properties。

  3. 如果只有一個匹配的 RakNet 接聽程式,讓 bind_address 保持空白。如果伺服器在該 UDP 連接埠上有多個接聽程式,將它設為你希望共用的那個接聽程式的本地位址。

  4. 重新啟動伺服器,然後對一名已連線的玩家執行 /voicechat test <PLAYERNAME>。

如果 RakNet 接聽程式與 Minecraft 使用不同的連接埠,請將語音 port 明確設為本地 RakNet UDP 連接埠,不要使用 -1。例如,若本地 RakNet UDP 連接埠為 25570,應設定 port=25570。

如果用戶端需要使用不同的公用位址或連接埠,請設定 voice_host。例如路由器將公用網路 UDP 25580 轉送到本地 UDP 25570,則設定 port=25570 和 voice_host=play.example.com:25580。公用位址應填在 voice_host 中,bind_address 則用於選擇本地接聽程式。

Raknetify2 透過 Simple Voice Chat 的 API 提供共用的 UDP 套接字。語音身分驗證與加密仍由 Simple Voice Chat 處理。無論遊戲連線走 TCP 還是 RakNet,玩家都可以使用語音聊天。

其他 UDP 服務與代理

Query 和 Geyser 仍需使用不同的 UDP 連接埠。共用套接字的整合僅支援 Simple Voice Chat。

此功能不能在 Velocity 或 BungeeCord 上共用語音代理的套接字。請按 Simple Voice Chat 的代理設定指南為語音代理分配獨立的 UDP 連接埠。如果使用官方語音代理外掛,要指定公用網路 voice_host,須在代理的語音設定中設定。該外掛會忽略後端伺服器上的 voice_host。

使用通用 UDP 隧道時,將 voice_host 設為實際向本伺服器轉送的公用網路主機名稱與 UDP 連接埠。

關閉連接埠共用或解決套接字衝突

如果紀錄檔顯示 No RakNet listener matches the voice bind address and port,請確認 RakNet 已啟動,並核對語音設定的連接埠與繫結位址是否和本地 RakNet 接聽程式一致。

如果顯示 Multiple RakNet listeners match the voice bind address,在 bind_address 中明確指定一個匹配的本地位址,然後重新啟動。

只能由一個 Simple Voice Chat 外掛提供它的 UDP 套接字。如果啟動時提示已有其他外掛提供套接字,請從這些整合中選擇一個使用。

要關閉 Raknetify2 的語音整合,請在它的語音設定中設定 {"enabled": false},或刪除這份檔案。為 Simple Voice Chat 分配單獨的 UDP 連接埠,更新相應的防火牆或轉送規則,然後重新啟動伺服器。

疑難排解

TCP 連線正常,但 RakNet 超時

按以下順序檢查:

  1. 用戶端安裝了適用於其載入器與 Minecraft 版本的 Raknetify2 模組。
  2. 接受連線的伺服器或代理已安裝 Raknetify2,且啟動時沒有監聽錯誤。
  3. 位址以 raknet; 開頭,填寫的是公用網路 UDP 連接埠。
  4. 託管服務商、路由器及主機防火牆都允許透過該連接埠的 UDP 流量。
  5. 主機名稱的 IPv4 和 IPv6 位址都指向預期的主機,且相應的防火牆規則有效。

TCP 連線成功只能說明 TCP 路由可用。按防火牆與路由器設定檢查 UDP 轉送與 IPv6 存取。如果啟用了 PROXY 協定,用戶端必須經設定中受信任的代理才能到達監聽端。

位址已被佔用

檢查是否有其他程序佔用該 UDP 連接埠。Query、Geyser 等 UDP 服務都需要自己的連接埠。Simple Voice Chat 可使用共用連接埠功能。

可以按直連伺服器監聽設定或 Velocity 與 BungeeCord 設定另選本地 UDP 連接埠。請核對 Spigot/Paper 對此設定的版本要求。只修改路由器的對外連接埠,無法解決本地套接字衝突。

能加入伺服器,但轉服失敗

使用目標的 raknet; 位址嘗試直連。如果直連失敗,請先修復目標接聽程式或網路路由。

如果能直連,請檢查目標端是否接受轉服。使用 server.properties 的 Minecraft 伺服器需要設定 accepts-transfers=true。普通直連不會驗證該設定。

將轉服請求中的主機名稱和 TCP 連接埠,與發起轉服一方的 config/raknetify2-transfers.json 對照。確認重新啟動後已載入此檔案,且用戶端支援 RakNet 自動轉服。詳見自動轉服。

加密或協定錯誤

核對連線兩端的 Raknetify2 版本。如果發行版更改了加密協定,應同時更新用戶端與接受連線的伺服器或代理。排查期間請保留伺服器原有的身分驗證設定。

特定模組引發的問題

記錄觸發問題的具體操作,例如開啟物品欄、接收資源包、切換世界或生成實體。條件允許時,在獨立的測試環境中分別透過 TCP 和 RakNet 執行同一操作並對比結果。

某些自訂承載資料依賴原版資料包的順序。模組作者可以透過資料包排序介面宣告這些依賴。

報告問題

請在 Raknetify2 問題跟蹤頁新建問題,並附上:

  • 兩端的 Minecraft、Java、載入器和 Raknetify2 版本。
  • 伺服器與代理軟體版本,包括所有 UDP 轉送代理。
  • 安裝的其他模組及其版本。
  • 復現問題的步驟,以及你預期看到的結果。
  • 透過 TCP 執行相同步驟是否正常。
  • 同一次嘗試所產生的用戶端、伺服器及代理紀錄檔相關片段。

上傳紀錄檔前請移除存取權杖、密碼及其他隱私資訊。保留診斷所需的例外訊息和堆疊追蹤。

模組整合

Raknetify2 允許模組宣告,哪些 Minecraft 資料需要與其自訂承載資料按順序傳輸。如果處理承載資料前必須由先到的資料包建立實體、區塊、物品欄或其他狀態,就應使用此介面。

排序組

分組 相關流量
ui 不依賴世界狀態的選單與互動
entity 實體生成、移除與移動
world_interaction 物品欄以及其他依賴世界狀態的互動
effects 聲音和粒子
chunk 地形、方塊與光照更新

每個組在自己的通道內都保持可靠、有序傳輸。不同組之間的資料包抵達時,相對順序可能與發出時不同。請按承載資料實際依賴的資料選擇分組。

可選的 Fabric 整合

在模組的 fabric.mod.json 中,為 raknetify:packet_channels 入口新增提供者。提供者使用 JDK 型別實現 Consumer<BiConsumer<String, String>>。它收到的註冊函式接受自訂承載資料識別碼與排序組兩個參數。

將下列條目合併到已有的後設資料中,並將類名替換為提供者類的完全限定名:

{
  "entrypoints": {
    "raknetify:packet_channels": [
      "com.example.mod.OrderingProvider"
    ]
  }
}

這裡展示的是後設資料檔案的一個片段。請保留 fabric.mod.json 中的其餘內容,包括原有入口。

例如,擴充套件實體移動的模組可將 example:entity_path 註冊到 entity 組。提供者實現範例見 PacketOrdering API 文件。

未安裝 Raknetify2 時,Fabric 不會呼叫此入口。提供者應在初始化階段宣告識別碼與分組,不應假設其他模組已經完成初始化。

註冊行為

Raknetify2 可用時,Forge、NeoForge 模組以及伺服器或代理外掛可在初始化階段呼叫 PacketOrdering.register(identifier, group)。類名是 com.ishland.raknetify.api.PacketOrdering。請在接受玩家連線前註冊。對於可選整合,確保缺少 Raknetify2 依賴時不會載入其類。

宣告對新連線生效。已建立的連線繼續使用建立時收到的規則。允許重複提交相同的宣告;同一識別碼對應衝突分組的宣告會被拒絕。

承載資料識別碼必須使用有效的自訂命名空間。minecraft 為保留命名空間。每個端點總計最多 128 條宣告,其中包括內建規則和其他模組的註冊。識別碼遵循 API 的含命名空間的語法,最長為 255 個 ASCII 字元。

新版 RakNet 兩端在建立連線時交換宣告。伺服器或代理若沒有某個承載資料的本地規則,可採用對端的宣告。本地規則優先;對端宣告的作用範圍僅限於當前連線。

UDP 代理

UDP 中繼及用戶端位址轉送見 UDP 轉送與 PROXY 協定。

Minecraft 代理的設定見 Velocity 與 BungeeCord。

English (US)

Clone this wiki locally