4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Minecraft Bedrock Edition (Dedicated Server) の鯖を立てた

Last updated at Posted at 2021-06-03

mc2.png

#やったこと

  • 外出自粛の中,仲間内で気軽に遊びながらコミュニケーションが取れるようにマイクラのサーバを立てたくなった
  • 知人の多くが統合版を所持しており,スマホからでも入れるBE(統合)版のサーバを立てることにした
  • 自宅で余っていたPCパーツを寄せ集めてサーバを作り,そこで動かすことにした
  • 自宅のルーターやサーバー, IPアドレスを(仲間内と言えど)インターネットに直接公開するのは怖いのと,プロキシサーバの構築に興味があったので,プロキシ経由でアクセスするようにした.
  • IPアドレス直打ちはかっこ悪いので,Googleドメインで管理している手持ちのドメインからサブドメインを切って名前解決できるようにした.
  • みんなでマイクラが24時間できるようになった.

構成図

さくらのVPSが不安定で接続できない時があったので,冗長化のため他で使っていたVPSを急遽転用してプロキシサーバを二台立てている.プロキシサーバが二台あるのに予算や暫定処置という都合でLBがないので,プレイヤーは二つのドメイン(私の手持ちのドメインをexample.comとすると,minecraft.example.comminecraft2.example.com)から繋がる方を選んで接続できる手動LBのような構成にしている.逆に他サーバやさくらのLBを別にレンタルすれば,あと数ステップで負荷分散もできる.

nwzu.png

手順

  • 実際に行った作業の記録を示す.
  • 私の家で契約しているISPはグローバルIPが半固定(少なくともここ3, 4年変わってない)であるため,今回グローバルIPアドレスの固定やDDNSの導入は扱わない.

1. Minecraft BE (Dedicated) 鯖の入手

  • ここからダウンロードできる.

  • server.propertiesを書き換えることでポートの変更も可能 (デフォルトはipv4で19132)

  • サーバ上でcurlなどでダウンロード後展開し,上記ページに記載の通りLD_LIBRARY_PATH=. ./bedrock_serverで起動

  • tmuxとかでSSH接続を切った後も動作するようにしておく
    スクリーンショット 2021-06-02 0.15.35.png

2. ルータの設定

  • ポート解放及びポートのマッピング,固定IPアドレスの割り当てを行う.サーバとルータ両方で設定が必要になる場合が多い
  • ルータの管理画面には大体192.168.0.1とかでアクセスできる
  • 上記サーバ設定で指定したポート (デフォルトは19132) を解放し,そのポートに向かってきた通信は全てサーバのIPアドレスに向けるように設定する
    • 後述するがMinecraft BEのプロトコルはUDPである
  • ここまでできたら一度サーバにアクセスできることを確認すると良さそう
    • LANに繋がった状態でサーバのローカルIPを指定してLAN内でアクセス確認
    • Wi-Fiを切ったスマホから自分の家のグローバルIPを指定してWANからアクセス確認
  • (わざわざマイクラを狙う攻撃者がいるともあまり思えないが)念には念を入れて,マイクラが動いているサーバからルータの設定画面にアクセスできないようにしておくと良さそう

3. リバースプロキシの設定

  • さくらのVPSはUbuntuを用意した
  • こちらにはパケットフィルタ機能があるので,あらかじめ通信に使うポートを開けておく
    • ちなみにSSHのポート番号はデフォルトで22番であり,このポートはデフォルトで解放されているが,ブルートフォース攻撃を受けたので最低限SSHアクセスに使うポート番号は変更したほうが良い
  • aptでnginxをインストールし,設定ファイルを書いてリバースプロキシを動かす
    • 実際のマイクラの通信は上位のレイヤで行われるので、L4のUDPをただ単にフォワードするだけでよい
  • 以下に設定例を示す
    • [マイクラサーバのポート]と[さくらVPSのパケットフィルタで解放したポート]は同じポートで良い
nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log info;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

stream {
    upstream backend {
        server [自宅のIPアドレス]:[マイクラサーバのポート];
    }

    server {
        listen [さくらVPSのパケットフィルタで解放したポート] udp;
        proxy_pass backend;
    }
}

4. DNS設定

  • 適当な(サブ)ドメインを作り,Aレコードにプロキシサーバのアドレスを登録する

スクリーンショット 2021-06-02 20.32.16.png

  • 登録したドメイン経由でアクセスが確認できれば完了

作業の所感など

  • 作業中にハマったポイントなどを共有する

Bedrock Editionの通信プロトコルはTCPではなくUDP

  • 世の中にある多くのマイクラサーバを立てる系の記事はJava版のサーバであるため,TCPプロトコルを前提にしている
  • TCPでリバースプロキシを行う方法はhaproxyなどがあり,多くの記事でも紹介されているが,haproxyはUDPに対応していない
  • nginxはstreamコンテキストに対応しており,UDPにも対応している

まとめ

  • みんなでマイクラができるようになったmc2.png
4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?