Skip to content

Wiki ko kr

pjscruggs edited this page Nov 11, 2026 · 2 revisions

Raknetify2 · 한국어 (대한민국)

언어

멀티플레이

Minecraft 클라이언트와 서버를 RakNet으로 연결합니다.

다운로드 · 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 멀티플레이어를 위해 RakNet을 UDP를 통해 사용합니다. 트래픽을 순서에 따라 분리하여, 한 채널에서 패킷 손실이 발생해도 관련 없는 트래픽이 계속 흐를 수 있도록 합니다. 이를 통해 연결이 데이터를 복구하거나 블록을 전송하는 동안에도 상호작용이 즉시 이루어질 수 있습니다.

Raknetify2는 ishland이 처음 개발한 Raknetify의 독립적으로 유지되는 포크입니다. 이 포크는 새로운 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 JAR 및 더 오래된 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 and 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 리스너의 로컬 바인드 주소를 유지합니다. 유효하지 않은 오버라이드 또는 사용 중인 UDP 포트는 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을 사용자 정의 포트로 변경하세요. 이렇게 하면 Velocity의 TCP 포트와 백엔드 주소는 그대로 유지된 채로 RakNet의 UDP 포트가 변경됩니다. 매개변수를 변경한 후에는 Velocity를 재시작해야 합니다.

Velocity와 그 백엔드 모두에서 플레이어 전송 설정을 구성합니다. 백엔드 소프트웨어가 지원하는 경우 현대적인 전송 방식을 사용하고, 전송 내용을 비밀리에 유지해야 합니다. Velocity의 플레이어 정보 전송 가이드에 있는 백엔드별 지침을 따릅니다. 전송과 함께 백엔드 방화벽 제한도 그대로 적용해야 합니다.

BungeeCord

BungeeCord의 config.yml에서, 각 listeners 항목 아래의 host 값은 Minecraft의 들을 수 있는 주소와 TCP 포트를 식별합니다. Raknetify2는 일반적으로 그 포트 번호에 UDP를 추가합니다. servers 항목에는 백엔드 TCP 주소가 저장되어 있습니다. 이러한 설정은 BungeeCord 설정 가이드에 설명되어 있습니다.

BungeeCord의 시작 명령어에서 -jar 앞에 다음 JVM 인자를 추가하여 별도의 UDP 포트를 지정하세요:

-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 리스너를 계속 사용합니다.

Geyser와 다른 UDP 서비스는 별도의 UDP 포트에서 실행해야 합니다. 다른 TCP 포트는 UDP 소켓 충돌을 해결할 수 없습니다.

음성 채팅 및 추가 UDP 전송

Simple Voice Chat은 Velocity와 BungeeCord에서 자체 프록시 플러그인과 UDP 포트를 사용합니다. 설정 방법은 Voice Chat 프록시 가이드를 참조하세요.

별도의 UDP 릴레이가 Minecraft 프록시 앞에 위치하여 PROXY 프로토콜 v2 헤더를 전송하는 경우, UDP 프록시 및 PROXY 프로토콜 설정을 사용하여 Raknetify2를 구성하세요. Velocity나 BungeeCord를 따로 설치할 경우에는 이러한 설정이 필요하지 않습니다.

연결 상태를 확인하세요.

Raknetify2 클라이언트를 사용하여 로컬 네트워크 외부에서 테스트해 보세요. 프록시를 통해 접속하고 사용하는 백엔드 서버를 전환하며, 플레이어의 신분과 권한이 올바른지 확인해야 합니다.

  • 프록시를 통한 TCP는 작동하지만 RakNet이 시간 초과되면, 프록시의 UDP 리스너, 공개 포트, IPv4 및 IPv6 경로, 그리고 방화벽 규칙을 확인해 보세요.
  • 프록시가 백엔드에 연결하는 과정에서 두 가지 전송 방법 모두 실패하면, 해당 백엔드의 TCP 주소, 접근 규칙, 그리고 플레이어 전달 설정을 확인해야 합니다.
  • 프록시가 UDP 포트가 사용 중임을 보고하는 경우, 쿼리, Geyser, 음성 프록시 또는 그와 연결된 다른 프로세스가 있는지 확인하세요.

보고서를 작성할 때는 동일한 연결 시도에서 발생한 프록시 로그와 백엔드 로그를 모두 포함해야 합니다. 포함해야 할 버전 정보는 문제 해결을 참조하십시오.

방화벽 및 라우터 설정

이 가이드는 서버 운영자들을 위한 것입니다. Raknetify2는 RakNet 연결을 받는 서버나 프록시에 대한 작동하는 UDP 경로가 필요합니다. 기본 설정은 Minecraft의 TCP 리스너와 동일한 포트 번호를 사용합니다.

동일한 로컬 네트워크에 있는 플레이어의 경우, 서버의 로컬 주소를 사용하고 UDP를 호스트 방화벽을 통해 허용해야 합니다. 인터넷 트래픽이 라우터의 IPv4 NAT를 통과해야 하는 경우, 라우터 포트 포워딩이 필요합니다.

목적지와 포트를 선택하세요.

직접 서버

Raknetify2를 사용하여 Minecraft 서버를 실행하는 머신에 공개 UDP 트래픽을 전송하세요. 목적 포트는 해당 서버의 RakNet UDP 리스너입니다. 서버 머신의 호스트 방화벽에서 해당 포트를 허용해야 합니다. 일반적인 Minecraft 연결을 위한 기존 TCP 경로는 그대로 유지해야 합니다.

예를 들어, Raknetify2가 UDP 25570에서 수신한다면, 공개 UDP 포트를 서버의 로컬 주소의 25570 포트로 전달합니다. 서버의 TCP 포트는 25565로 유지할 수 있습니다. 다른 UDP 포트를 선택하려면 direct-server listener settings를 참조하세요.

Velocity 또는 BungeeCord

Raknetify2 프록시 플러그인을 사용하여 Velocity나 BungeeCord가 실행 중인 머신에 공개 UDP 트래픽을 전송하세요. 프록시의 RakNet UDP 리스너를 전달 대상으로 사용하세요. 일반 Minecraft 연결을 위한 프록시의 기존 공개 TCP 경로는 그대로 유지하세요.

프록시는 TCP를 통해 백엔드 Minecraft 서버에 연결됩니다. Raknetify2를 프록시에 추가하면 플레이어들에게 백엔드 게임 UDP 포트를 열 필요가 없습니다.

연결 접근을 허용하는 설정
프록시로 접속하는 플레이어들 RakNet 리스너로 공개 UDP 전송, 그리고 기존의 공개 TCP 리스너도 포함됩니다.
백엔드 서버로의 프록시 목적한 프록시 호스트에서만 접근 가능한 Minecraft 백엔드 TCP 포트
플레이어들은 직접 백엔드 게임 플레이 포트로 이동합니다. IPv6를 통한 방화벽 차단을 포함하여 계속 유지해야 합니다.

프록시와 백엔드가 직접 제어하는 전용 머신에서 실행될 경우, 백엔드 리스너는 프록시가 해당 머신에 접근하도록 설정된 루프백 주소를 사용할 수 있습니다. 머신 간 통신 시에는 방화벽이나 격리된 프라이빗 네트워크를 사용하여 백엔드 TCP 접근을 프록시 호스트로 제한해야 합니다. 컨테이너와 관리된 호스트도 네트워크 구조에 동일한 제한이 필요합니다. Velocity의 백엔드 보안 가이드와 BungeeCord의 방화벽 가이드를 참조하십시오.

플레이어 포워딩과 방화벽 제한이 함께 작동합니다. 직접 백엔드에 접근하면 프록시의 로그인 확인을 우회할 수 있습니다. 플러그인 설치, 포워딩 설정 및 UDP 포트 재설정에 대해서는 Velocity and 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를 포함하는 규칙을 사용할 수 있습니다. 예제 주소는 귀하의 서버의 실제 로컬 주소로 대체하십시오.

일반 Minecraft 연결에 대한 기존 TCP 규칙을 그대로 유지합니다. TCP 재지정 규칙만으로는 UDP를 전송할 수 없습니다.

포워딩이 여전히 실패할 경우

트래픽이 귀하의 라우터에 도달하기 전에 다른 라우터나 ISP가 NAT를 수행하는지 확인하십시오. 두 개의 라우터를 사용하는 경우, 포워딩은 둘 모두를 포함해야 합니다. ISP가 캐리어급 NAT를 사용하는 경우, 공개 IPv4 주소를 제공할 수 있는지 또는 인바운드 UDP를 지원하는 호스팅 서비스나 터널을 사용할 수 있는지 문의하십시오. 귀하의 라우터의 포워딩 규칙은 ISP의 NAT를 설정할 수 없습니다. 공개 WAN 주소 요구 사항에 대해서는 TP-Link의 포트 포워딩 가이드를 참조하십시오.

IPv6 방화벽 규칙

선택된 UDP 포트가 라우터의 IPv6 방화벽과 호스트 방화벽 모두를 통과하도록 허용합니다. 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 스캔은 결론이 나지 않는 결과를 보고할 수 있습니다. 왜냐하면 정상 작동하는 서비스가 낯선 프로브를 무시할 수 있기 때문입니다. Nmap의 UDP 스캔 문서는 이러한 동작을 설명합니다.

성공적인 TCP 연결은 TCP 경로만을 확인합니다. RakNet 타임아웃이 발생한 경우, 문제 해결 가이드를 사용하여 리스너, 포워딩 목적지, UDP 포트, 방화벽 규칙을 확인하십시오.

호환성

다운로드한 특정 버전의 호환성을 확인하세요. 개발 브랜치에는 아직 출시되지 않은 기능도 포함될 수 있습니다.

Minecraft 및 Java 버전

Minecraft 및 Java 버전 · English

Raknetify2가 명시한 Java 요구 사항은 최소 요구 사항입니다. Minecraft나 로더는 더 새로운 런타임을 필요로 할 수 있습니다. 세 가지 요구 사항을 모두 충족하는 Java 버전을 선택하세요.

클라이언트 및 서버 버전

가능한 경우 클라이언트와 서버 또는 그 연결을 받아들이는 프록시 모두에 동일한 Raknetify2 릴리스를 사용하십시오. 릴리스 조합하기 전에 릴리스 설명서를 확인하십시오. 암호화된 RakNet 연결은 양 끝에서 인증된 암호화 프로토콜을 지원해야 합니다. 그 프로토콜이 도입되기 전의 원래 Raknetify 및 Raknetify2 버전은 업데이트된 피어들과 이러한 암호화된 연결을 할 수 없습니다.

Raknetify2는 Minecraft의 기존 게임 프로토콜을 지원합니다. 다른 Minecraft 버전을 연결하려면 호환되는 프로토콜 변환 설정이 필요합니다.

기타 모드들

기타 모드들 · English

대규모 모드팩에서 문제가 발생한 경우, 푸시업 가이드를 따르세요. 보고서에 모드의 전체 버전을 포함시켜 주세요.

순서 모드

순서 모드

일반적으로 Raknetify2는 한 채널이 누락된 데이터를 기다리는 동안 독립적인 패킷 채널을 계속 유지할 수 있습니다. 순서 모드는 모든 Minecraft 패킷을 하나의 채널에 보내므로, 누락된 패킷이 재전송될 때까지 그 방향의 모든 후속 패킷이 지연됩니다. 이 방식은 일부 안티치트 소프트웨어가 기대하는 순서를 유지하지만, Raknetify2가 대기 시간 동안 관련 없는 게임 트래픽을 계속 처리할 수 있는 능력을 포기하게 됩니다.

순서 정렬 모드 활성화

  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라는 메시지가 기록되며, 그 뒤에는 피어의 주소가 표시됩니다.

anti-cheat 체크를 항상 활성화하고, 자신의 설정을 정확히 확인해야 합니다.

구형 클라이언트

순서 지정 모드를 지원하지 않는 RakNet 클라이언트는 이를 요구하는 서버에 연결할 수 없습니다. 해당 클라이언트에서는 Raknetify2를 업데이트하거나, raknet; 접두사 없이 서버나 프록시의 일반적인 TCP 주소와 포트를 사용하여 연결해야 합니다.

멀티채널 모드로 돌아가기

파일을 다음과 같이 변경하세요:

{"mode": "multichannel"}

그런 다음 서버나 프록시를 재시작하세요. 파일을 삭제하면 재시작 후 멀티채널 모드도 복원됩니다.

설정 관련 문제

파일에는 mode라는 이름의 설정이 정확히 하나만 포함되어야 하며, 그 값은 "ordered" 또는 "multichannel" 중 하나여야 합니다. 값은 대소문자를 구분합니다.

무효화나 읽을 수 없는 설정은 RakNet 연결을 거부합니다. 파일을 수정하고 프로세스를 다시 시작하세요.

콘솔에서 여전히 multichannel이라고 보고된다면, 파일이 RakNet 연결을 받는 서버나 프록시의 작업 디렉터리에 있는지 확인한 후 해당 프로세스를 재시작하세요.

자동 전송

Fabric, Forge, 그리고 NeoForge 서버는 기능이 있는 클라이언트를 설정된 목적지로 전송할 때 RakNet을 선택할 수 있습니다. 이는 Java Edition 1.20.5에서 도입된 Minecraft의 내부 전송 지원 기능을 사용합니다. 각쪽의 Minecraft 버전과 로더가 Raknetify2 버전을 지원하는지 확인해야 합니다.

송신 서버와 클라이언트에 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 전송, 그리고 호스트 방화벽은 이미 설정되어 있어야 합니다. 전송 서버의 transfers 파일이 클라이언트에게 전송될 주소를 선택합니다.

목적지의 호스트명이 두 가지 주소 유형을 모두 표시할 때, 목적지의 IPv4 및 IPv6 경로를 모두 확인해야 합니다. 자동 전환 동작을 조사하기 전에 목적지로의 일반적인 직접 RakNet 연결을 테스트해야 합니다.

어떠한 목적지 로그인 또는 인증 검사도 그대로 유지해야 합니다. 이 설정은 플레이어에게 접근 권한을 부여하거나 서버 인증 방식을 변경하지 않습니다.

설정 오류 및 비활성화

누락된 필드, 알 수 없는 필드, 유효하지 않은 포트, 그리고 중복된 목적지가 초기화 과정에서 설정 오류를 유발합니다. 오류를 식별하고 JSON을 수정한 후 서버를 재시작하십시오.

자동 선택 기능을 비활성화하려면 설정 파일을 삭제하거나 {"destinations": []}를 사용하세요. 그런 다음 전송 서버를 재시작하세요. 이렇게 하면 전송 요청들이 원래의 주소를 그대로 유지합니다.

UDP 포워딩 및 PROXY 프로토콜

UDP 프록시는 PROXY 프로토콜 v2를 사용하여 RakNet 트래픽을 전달하고 원본 클라이언트 주소를 유지할 수 있습니다. 업스트림 UDP 프록시가 해당 헤더를 당신의 리스너로 전송할 때 이 기능을 활성화해야 합니다. 일반 라우터 포트 포워딩은 이 기능이 필요하지 않습니다.

서버나 Minecraft 프록시가 전달된 UDP 트래픽을 받는 경우, 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 and BungeeCord를 참조하세요.

Simple Voice Chat

Raknetify2는 Fabric, Forge, NeoForge, Spigot, Paper에서 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와 다른 포트를 사용하는 경우, -1 대신 해당 로컬 UDP 포트를 명시적으로 port에 설정해야 합니다. 예를 들어, 로컬 UDP 포트 25570에서 RakNet 리스너를 사용하는 경우 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 서비스 및 프록시

쿼리와 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이 성공적으로 시작되었으며, 음성 포트와 바인드 주소가 로컬 리스너와 일치하는지 확인해야 합니다.

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 포트를 사용하는 다른 프로세스가 있는지 확인합니다. Geyser 및 다른 UDP 서비스는 각자 별도의 포트를 필요로 합니다. Simple Voice Chat은 공유 포트 통합을 사용할 수 있습니다.

직접 서버 리스너 설정이나 Velocity 및 BungeeCord 설정을 사용하여 다른 로컬 UDP 포트를 선택할 수 있습니다. Spigot/Paper 설정의 버전 요구 사항을 확인하세요. 라우터의 공개 포트만 변경하면 로컬 소켓 충돌이 그대로 남게 됩니다.

연결은 가능하지만 전송은 실패합니다.

raknet; 주소를 사용하여 목적지에 직접 연결합니다. 그렇지 않다면 먼저 목적지의 리스너나 네트워크 경로를 수정해야 합니다.

직접 연결이 가능하다면, 목적지가 수신 전송을 받아들일지 확인해야 합니다. server.properties를 사용하는 Minecraft 서버는 accepts-transfers=true로 설정해야 합니다. 직접 가입 시 이 설정은 테스트되지 않습니다.

그런 다음 송신 서버의 config/raknetify2-transfers.json 파일과 전송 호스트명 및 TCP 포트를 비교합니다. 파일이 재시작 후에 로드되었는지, 그리고 클라이언트가 자동 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 and BungeeCord를 참조하세요.

English (US)

Clone this wiki locally