🐳

localtonetでMinecraftクロスプレイサーバーを公開する

に公開

自宅のポートを開放せずとも、Minecraftクロスプレイサーバーを公開できます。
Docker、Paper、GeyserMC、Floodgateを使用します。

NgrokとかCloudflareTunnelではダメなの?

NgrokはUDPに対応してないため、統合版向けのサーバーを公開することができません。(Javaのみだったら可能)
また、Cloudflareは、PCに専用のソフトを入れる必要があり、スマホからの参加にも対応できません。

Minecraftサーバー公開までの流れ

⓪ Dockerを導入する (この記事では割愛。docker composeが使用できればOK)
① Paperサーバーを建てる
② localtonetの登録
③ ポートを開放

Paperサーバーを建てる

データを保存する用のディレクトリを用意します。
その中に、docker-compose.ymlというファイルを新規作成、編集します。
【】の部分は各々で設定してください。

docker-compose.yml
services:
  mc:
    image: itzg/minecraft-server
    container_name: 【コンテナの名前】
    environment:
      VERSION: "【最新バージョン】"
      EULA: "true"
      TYPE: PAPER
      ENFORCE_SECURE_PROFILE: "false"
      PLUGINS: |
        https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
        https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot
    ports:
      - "【ホスト側のポート】:25565/tcp"
      - "【上と同じポート】:19132/udp"
    volumes:
      - type: bind
        source: "【データ保存用のディレクトリの絶対パス】"
        target: "/data"

PLUGINSの項目で、GeyserMCとFloodgateの最新バージョンを指定しています。
また、ホスト側のポートは他サービスと被らないように設定してください。localtonetのポート開放で使います。

コンテナの起動&ログの確認

コンテナをバックグラウンドで起動します。

docker compose up -d

ここで最初の起動処理が入ります。
数分待ってログを確認します。

docker compose logs

最後の方にDone! ~というログがあったら、最初の起動処理が完了しています。
これを確認したら一度コンテナを停止します。

docker compose down

Geyserの設定

plugins/Geyser-Spigot/config.ymlを編集します。
真ん中ぐらいにある、auth-typeの項目をonlineからfloodgateに書き換えて保存します。

# Authentication type. Can be offline, online, or floodgate (see https://github.com/GeyserMC/Geyser/wiki/Floodgate).
  # For plugin versions, it's recommended to keep the `address` field to "auto" so Floodgate support is automatically configured.
  # If Floodgate is installed and `address:` is set to "auto", then "auth-type: floodgate" will automatically be used.
  auth-type: floodgate

保存が完了したら、もう一度起動してPaperサーバーは起動完了です。

localtonetの登録

以下リンクから必要事項を入力して登録してください。
GithubやGoogleで登録も可能です。

https://localtonet.com/Identity/Account/Register?returnUrl=%2Fdashboard

Dashboardが表示されたら、左のメニューからMyTokenをクリック。
Token名を入力したら、Tokenを作成します。

localtonetのダウンロード&起動

ここではraspberryPiでの場合を載せています。公式ドキュメントで丁寧に解説されているので参考にしてください。

https://localtonet.com/documents/os

❶ ダウンロードする

wget https://localtonet.com/download/localtonet-linux-arm64.zip

❷ zipファイルを解凍する

unzip localtonet-linux-arm64.zip

❸ 実行ファイルに権限を付与する

chmod 777 ./localtonet

❹ 起動

./localtonet authtoken 【ここに先ほど作成したToken】

※この起動したターミナルは消さないでください。
DashboardのMytokenからCLIENT IS ONLINEの項目がONになっていたら成功です。

ポートを開放

Dashboardの左メニューから、MyTunnel > TCP - UDPをクリック。


ここで、プロコトルをUDP - TCP、PortはPaper起動で指定したホスト側のポートを入力します。
作成できたら、Actionから再生ボタンを押してポートを開放します。
SERVER DOMAINSERVER PORTが表示されます。

Java Bedrock
サーバーアドレス SERVER DOMAIN:SERVER PORT SERVER DOMAIN
ポート番号 - SERVER PORT

で公開完了です。

localtonetの注意点

・無料プランだと30分でトンネルが自動で終了する仕様になっています。(2025年春頃に仕様変更)
→ 起動するたびにポート番号が変わるので注意してください。

・また、無料プランでは1GBまでの帯域幅制限があります。
→ 5人程度が数時間プレイして1GBです。参考にしてください。

・localtonetはIPv6に対応していますが、Minecraftサーバーは対応していないので、IPv6環境から参加しようとするとアクセスできません。
→ 設定からサーバーの直IPを確認できるので、IPv4の直IPを公開してください。

サーバーのコマンドを実行(おまけ)

docker exec -i 【コンテナ名またはID】 rcon-cli

でサーバー側のコマンドを実行できます。
最初のOP権限付与はここで行います。

> op 【Minecraftのユーザー名】

参考

https://qiita.com/Kento210/items/cf9204ef695a9bf8f3b2

https://qiita.com/mabubu0203/items/59a78b689740b42549c0

Discussion