【無料】M1 MacのParallels(Ubuntu)に統合版マイクラサーバーを立てる!

  • URLをコピーしました!
M1 MacにParallels+Ubuntu 22.04で
    マインクラフト統合版サーバーを構築!
M1 MacにParallels+Ubuntu 22.04で
マインクラフト統合版サーバーを構築!

無料で外部に公開するサーバーを立てます。
つまり友達の家からでも接続できるサーバーを構築します。

  • 無料と書いてある通りレンタルサーバーを使いません。
  • 準備するものは、自宅のPCとインターネット回線だけです。

僕はプロのITエンジニアです。

そんな僕がマイクラ鯖を構築する記事を書く理由は、ほとんどの記事でマイクラ鯖を立てるのは無理だからです。ちなみにサーバーを外部に公開する方法は"ポート開放"ではありません。

"マイクラ サーバー構築"で検索してみて下さい。

出てくる記事のすべてが"ポート開放"の記事です。

外部に公開できない

  • 外部公開≠ポート開放
  • ポートを説明しても、素人解説で余計に「分からない」。
  • 締め括りは「ConoHa WING」のアフィリエイト

ポート開放を解説している記事を読んでも、サーバーを外部に公開できません。

外部に公開する方法は"ポート転送"です。

本記事では僕自身がこの手順で鯖を構築したので確実に鯖を外部に公開できます。外部公開のエビデンスとして画像を見るだけでも分かると思います。じっくり読んでみてぜひ参考にしてみください。

この記事だけでサーバー構築の知識が完結するように、ネットワークに関するIT用語は末尾に「用語解説」を載せています。

目次

【疑問】どうしてM1 MacにParallels仮想環境を構築するのか?

【10日目】マイクラハードコア100日「自動収穫装置準備とダイヤ初入手」【ゆっくり実況】
気分転換に御覧ください

この記事では、M1 MacにParallels®︎ Desktop 18 for Macを使って構築したUbuntu 22.04 LTS ARM64上で統合版マイクラサーバーを動かします。

少々無理があるんじゃないかとツッコミがあると思います。

ツッコミどころ

  • M1 Mac
    • M1 Macで動くマイクラBE鯖はないはず?
    • BE鯖はARM64プロセッサー上で動かないはず?
       
  • Parallels Desktop 19 for Mac
    • なんでParallels Desktop 19 for Macの仮想環境を使うのか?
       
  • 仮想環境にはLinux Ubuntu 22.04 LTS ARM64
    • なんでLinuxを使うのか?
       
  • Nukkitサーバー
    • なんで公式サーバーではなくNukkitサーバーを使うのか?
       
  • Parallels®︎ Desktop 18 for Mac仮想環境のネットワーク設定
    • 仮想環境へのサーバー接続ってどうやるのか?
       
  • ポート開放ツールを使わない
    • なんでポート開放ツールを使わないのか?

とツッコんで欲しいくらいです。

実は、統合版マイクラサーバーは、M1 Macでも、Linux(リナックス)でも関係なく動きます。なぜならJavaで動作するNukkitサーバー(非公式)を使うからです。

その他にもきちんとした理由があります。

M1 Macのマイクラ鯖はないはず?

M1 Macで動く公式のマイクラBE鯖はありません。

BE鯖はARM64プロセッサー上で動かないはず?

通常では動きません。ただし、ARM64環境でもx86環境をエミュレートすれば動作します。

が、面倒なのでその方法はやりません。

なんで仮想環境を使うのか?

仮想環境を使う理由は、メインPCの環境を汚さないからです。

仮想環境なら簡単にスクラップ&ビルドできるので色々実験できます。

なんでParallels®︎ Desktop 18 for Macを使うのか?

M1 MacにWindowsやLinuxの仮想環境を数回クリック(数分)で構築できるからです。

なんでLinux Ubuntu 22.04 LTS ARM64を使うのか?

Linuxはコマンド一発であらゆる環境を構築出来るからです。

なんでNukkitサーバーを使うのか?

Javaで動作するからです。これが一番の肝です。

どんなデバイスでもJavaさえ使えればサーバーが起動します。ちなみに、Nukkit鯖は、公式サーバーよりも、はるかに軽快に動作するのでオススメです。

仮想環境のネットワーク設定

記事で詳しく解説しますが、ネットワークアダプタに設定してLAN上で単一マシンとして認識されるようにします。

なんでポート開放ツールを使わないのか?

ツールを使わない方がネットワークの理解に役立つからです。

本記事では仮想環境にネットワーク接続するので、ネットワークの理解が深まるのがポイントです。

長々説明するのは後からにします。早速、サーバーを構築していきましょう。

無料でNukkit統合版マイクラサーバーを建てる!流れ

【3日目】マイクラハードコア100日「我特級呪物匠也」【ゆっくり実況】
気分転換に御覧ください

Ubuntuに無料で統合版マイクラサーバーを建てる!流れは下の通りです。

鯖を建てる流れ

  • OS準備: Ubuntu仮想環境を構築
    • 「Parallels®︎ Desktop 18 for Mac」でUbuntu 22.04 LTS ARM64(Linux)を構築する
       
  • ① Ubuntu環境設定
    • システム更新
    • iproute2
    • OpenJDK(javaランタイム)
    • Git
  • ② Nukkitサーバーをダウンロード
     
  • ③ Nukkitサーバーを起動する
     
  • Parallels補足:仮想環境のネットワークを設定する
     
  • ④ ポート開放ufwコマンド
      
  • ⑤ 接続テスト1:ローカル環境からサーバーに接続する
     
  • ⑥ ルーターを設定して、サーバーを外部に公開する
     
  • ⑦ 接続テスト2:グローバル環境からサーバーに接続する

上から順に作業を進めていきます。

解説のために多少長ったらしい冗長な手順にしています。

例えば、いきなりサーバーを外部に公開する仕組みが分かっている人は「ローカル環境からサーバーに接続する」という手間を省いてもらって構いません。

しかし、ほとんど人は・ローカル環境からのサーバー接続・外部からのサーバー接続の違いや意図を理解できていません。

結果が「サーバー接続」のため、その違いが分かりづらいからかも知れません。

サーバーを建てる際は必ずローカル環境と外部環境の接続の違いを意識するようにしましょう。

OS準備: Linux仮想環境を構築

【7~8日目】マイクラハードコア100日「無限溶岩∞装置サバイバル式」【ゆっくり実況】
気分転換に御覧ください

Parallels®︎ Desktop 18 for Macを使えば、Mac上で仮想環境を構築するのはとても簡単です。クリックだけでLinuxが起動するからです。

もし作業で上手くいかなかったら、スクラップにして(削除して)もう一度クリックからやり直せば良い訳です。

アプリでリセマラするよりも、Linuxをスクラップ&ビルドする方が簡単です。

Ubuntuでターミナル(端末)を使う

Ubuntuでターミナルを起動しましょう。

検索欄から"terminal"と入力すればターミナルが表示されます。

そのまま"Enter"を押せば、ターミナルが起動します。

UbuntuなどのLinuxではターミナル(端末)上でのプログラムの操作が基本です。

フォルダを"右クリック"でもターミナル(端末)が起動する!

PowerShellを開くならフォルダを"右クリック"⇒"ターミナルで開く"で時短

cdコマンドでフォルダを移動できますが面倒です。

フォルダから"右クリック"⇒"端末で開く"でターミナル(端末)をそのフォルダ直下で開くことできます。

"右クリック"⇒"端末で開く"でターミナルがフォルダ直下から開始する
"右クリック"⇒"端末で開く"でターミナルがフォルダ直下から開始する

ターミナルを"右クリック"⇒"端末で開く"で起動すれば、かなり時短になるのでオススメです。

例えば、フォルダを"右クリック"⇒"端末で開く"で開けば、わざわざマイクラサーバーの場所にcdコマンドで移動する必要がありません。

① Ubuntu環境設定

【2日目後半】マイクラハードコア100日「チビゾン殺意高すぎ」【ゆっくり実況】
気分転換に御覧ください

マイクラのサーバー構築に必要なLinux環境を設定していきます。

Linuxを初めて使う人にとっては良い勉強になるので、最初は真似するだけで良いので、この通りになぞってみて下さい。

環境設定の流れ

  • ① Ubuntu パッケージ管理システムの更新
  • ② OpenJDK(Javaランタイム環境)
  • ③ ローカルIPアドレス(iproute2
  • ④ Git

念の為、作業前はUbuntu パッケージ管理システム(apt)の更新をしておきましょう。順々にやっていきます。

準備①:Ubuntu パッケージ管理システムの更新

$ sudo apt update && sudo apt upgrade

準備②:OpenJDK(Javaランタイム環境)をインストール

$ sudo apt install default-jre

上のコマンドで OpenJDK(Java)がインストールされます。

OpenJDKを詳しく知りたい方は下の記事が参考になります。

jreをインストールしたら、きちんと入ってるかの確認も含めてjreのバージョンを表示してみましょう。

$ java -version 
openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu122.04, mixed mode)

javaアプリケーションは、x86、ARM64などあらゆる環境で実行可能です。

なので、統合版の公式サーバーはMac(M1・M2含む)向けに配布されていませんが、例えば、Javaで動作するNukkitサーバーを使えばMac(M1・M2含む)でもサーバーを起動させることができます。

準備③:ローカルIPアドレスを確認するip a

$ ip a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 192.168.10.103/24 metric 100 brd 192.168.10.255 scope global dynamic enp0s5
    inet6 240b:250:89e0:d200:21c:42ff:fecd:281f/64 scope global dynamic mngtmpaddr noprefixroute 
    inet6 fe80::21c:42ff:fecd:281f/64 scope link 

IPアドレスを調べるには、iproute2のipを使います。ip a | grep inetinetを抜き出すと分かりやすいです。

僕のローカル環境のIPアドレスは192.168.10.103です。192.168.10.103はあくまでローカルIPアドレスであることを押さえておきましょう。

ip aコマンド
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:1c:42:cd:28:1f brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.103/24 metric 100 brd 192.168.10.255 scope global dynamic enp0s5
       valid_lft 85448sec preferred_lft 85448sec
    inet6 240b:250:89e0:d200:21c:42ff:fecd:281f/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 269sec preferred_lft 269sec
    inet6 fe80::21c:42ff:fecd:281f/64 scope link 
       valid_lft forever preferred_lft forever

IPアドレスを調べるには、iproute2のipを使います。

$ ip a
$ ip addr
$ ip address show
$ ip address

ipコマンドは下のどれでも構いません。

$ sudo apt install iproute2

iproute2はデフォルトで入っていると思います。無ければ上のコマンドでiproute2をインストールできます。

余談:ifconfigとの違い

まぁ好みですが、以前はnet-toolsに含まれるifconfigを使っていましたでした。net-toolsパッケージは更新されておらず古くセキュリティ的に懸念があるため、現在はiproute2が主流みたいです。

$ sudo apt install net-tools

ifconfigを使いたいならnet-toolsをインストールすると良いです。

準備④:Gitをインストール

$ sudo apt install git

gitをインストールしておきましょう。

Nukkitサーバーのダウンロードにgitコマンドを使うからです。

② Nukkitサーバーをダウンロード【Ubuntu】

gitでNukkitサーバーをダウンロードしてきます。

マイクラのサーバーを構築するだけで、gitも使って実用的な技術がてんこ盛りです。

~ $ git clone https://github.com/CloudburstMC/Nukkit
~ $ cd Nukkit
~/Nukkit $ git submodule update --init
~/Nukkit $ chmod +x mvnw
~/Nukkit $ ./mvnw clean package

上から順に実行してみてください。

正常に終了すると下記のように「BUILD SUCCESS」と表示されます。

[INFO] Dependency-reduced POM written at: 
[INFO] Dependency-reduced POM written at: 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  
[INFO] Finished at: 
[INFO] ------------------------------------------------------------------------

②' Nukkitサーバーを直接ダウンロードしても良い!

Jenkins Branch masterから最新のNukkitをダウンロード
Jenkins Branch masterから最新のNukkitをダウンロード
  • Jenkins Cloudburst - Nukkit Branch master
    • 最新のnukkit-1.0-SNAPSHOT.jar
    • https://ci.opencollab.dev/job/NukkitX/job/Nukkit/job/master/

上記URLから最新のNukkitサーバーnukkit-1.0-SNAPSHOT.jarをダウンロードすればオッケーです。赤枠リンクからダウンロードできます。

③ Nukkitサーバーを起動させる【Ubuntu】

ネットワークの設定は後でやるとして、先ずは"とりあえず"サーバーを起動させてみましょう。

サーバー起動でつまづくと、後ろの方でやるネットワークの設定などしても意味がないからです。

これは実験のお作法でもあります。

物事は先ず最小構成から成功させていくことで、後々幸せになれる確率が高くなります。

~/Nukkit $ mkdir -p ~/minecraft
~/Nukkit $ cp target/nukkit-1.0-SNAPSHOT.jar ~/minecraft/
~/Nukkit $ cd ~/minecraft/

と言うことで、上のコマンドをそのまま貼り付けて実行してみてください。

作業用に「minecraft」ディレクトリを作ることで、ダウンロードしたNukkitサーバーの元データを汚さずにサーバー構築ができます。

上のコマンドは

  • 作業用に「minecraft」ディレクトリを作成
  • 作成した「minecraft」ディレクトリにNukkitサーバーの複製データをコピー
  • 最後に「minecraft」ディレクトリに移動

万が一、サーバー構築に失敗したら「minecraft」ディレクトリをスクラップにして、あらためて同じ作業をすれば良いだけです。

~/minecraft $ java -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jar

今度はマイクラではお馴染みのサーバー起動コマンドです。

これだけでサーバーが起動します。

~/minecraft $ java -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jar
19:30:15 [INFO ] Welcome! Please choose a language first!
19:30:15 [INFO ] eng => English
19:30:15 [INFO ] chs => 中文(简体)
19:30:15 [INFO ] cht => 中文(繁體)
19:30:15 [INFO ] jpn => 日本語
19:30:15 [INFO ] rus => Pyccĸий
19:30:15 [INFO ] spa => Español
19:30:15 [INFO ] pol => Polish
19:30:15 [INFO ] bra => Português-Brasil
19:30:15 [INFO ] kor => 한국어
19:30:15 [INFO ] ukr => Українська
19:30:15 [INFO ] deu => Deutsch
19:30:15 [INFO ] ltu => Lietuviškai
19:30:15 [INFO ] idn => Indonesia
19:30:15 [INFO ] cze => Czech
19:30:15 [INFO ] tur => Turkish
19:30:15 [INFO ] fin => Suomi
19:30:15 [INFO ] ara => العربيه
> jpn

初回起動時に使用する言語を聞かれます。

jpnを打ちEnterで次に進みます。

サーバー起動例

~/minecraft $ java -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jar
19:33:30 [INFO ] Loading nukkit.yml ...
19:33:30 [INFO ] Loading server.properties ...
19:33:30 [INFO ] 日本語 (jpn) を言語に選択しました
19:33:30 [INFO ] Minecraft: BEサーバー(v1.19.21に対応)を起動しています
19:33:30 [INFO ] Selected Zlib Provider: 2 (cn.nukkit.utils.ZlibThreadLocal)
19:33:30 [INFO ] 0.0.0.0:19132上でサーバーを開始しています
19:33:30 [INFO ] このサーバーはNukkitのバージョンgit-40701a1「」(API 1.0.14)で動作しています
19:33:30 [INFO ] NukkitはGPLライセンスに基づき配布されています
19:33:30 [INFO ] Loading runtime items...
19:33:30 [INFO ] Loading recipes...
19:33:30 [INFO ] Loaded 1509 recipes.
19:33:30 [INFO ] Successfully loaded 0 resource packs
19:33:30 [INFO ] ワールド "world" を読み込んでいます
19:33:30 [INFO ] Preparing start region for level "world"
19:33:30 [INFO ] ワールド "nether" を読み込んでいます
19:33:30 [INFO ] Preparing start region for level "nether"
19:33:30 [INFO ] GS4ステータス リスナーを開始
19:33:30 [INFO ] クエリポートを設定: 19132
19:33:30 [INFO ] クエリーは 0.0.0.0:19132 で動作しています
19:33:30 [INFO ] デフォルトゲームタイプ: サバイバルモード
19:33:30 [INFO ] 起動完了(0.662秒)! "help"または"?"でヘルプを表示
> 

サーバー起動時にはポート番号などの設定値が表示されます。

起動時の表示にサーバー情報が出る!

19:33:30 [INFO ] 0.0.0.0:19132上でサーバーを開始しています

起動時の表示を見れば、調べなくてもサーバー情報が色々分かります。

起動時には表示を見る癖をつけると良いでしょう。

Parallelsネットワーク設定①:仮想環境のネットワークに接続できない!

【1~5日総集編】マイクラハードコア100日「5回目の転生」【ゆっくり実況】
気分転換に御覧ください

"Parallelsネットワーク設定"を理解していないと絶対つまづくので、時間をかけて読んでみてください。

さて、サーバーが起動したので、あとは手元のアプリから接続してみましょう。試しにIPアドレスとポート番号を調べてアクセスしてみて下さい。

上に書いてるので、情報を探してサーバーに接続してみて下さい。

調べてアクセスしてみよう!

  • IPアドレスは?
  • ポート番号は?

どうでした?残念ながらサーバーには接続できなかったと思います。

あえて大袈裟にやってますが"仮想環境のネットワークってなに?"と疑問に思ってもらいたいから、このように回りくどいことをしています。

仮想環境のネットワークってどうなってんの?

先ずはIPアドレスを調べてみましょう。

ということで、調べたIPアドレスはなんでしたか?

まだ調べてないなら、今ここでIPアドレスを調べてみて下さい。その番号を眺めましょう。

IPアドレスの番号を見て、どうでしたか?その番号にはきちんと意味があります。

Parallelsネットワーク設定②:仮想環境のネットワーク構成を知る≒IPアドレスを調べる

Parallels仮想環境のサーバーに接続したいわけですが、サーバーに接続できなくて訳が分からないことだらけでした。

だから、IPアドレスを調べました。

ただ、IPアドレスを眺めても意味が分からない。こんな状況だと思います。

サーバーに接続できなかったら?

  • 仮想環境のネットワーク構成がどうなっているか調べる!
    ⇒「IPアドレス」を調べれば大体分かる。

ということで、答え合わせをしていきましょう。

先ずはIPアドレスを確認します。

ip aがLinux(リナックス)でIPアドレスを調べるコマンドです。

~/minecraft $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:1c:42:cd:28:1f brd ff:ff:ff:ff:ff:ff
    inet 10.211.55.6/24 metric 100 brd 10.211.55.255 scope global dynamic enp0s5
       valid_lft 1485sec preferred_lft 1485sec
    inet6 fdb2:2c26:f4e4:0:21c:42ff:fecd:281f/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 2591882sec preferred_lft 604682sec
    inet6 fe80::21c:42ff:fecd:281f/64 scope link 
       valid_lft forever preferred_lft forever

さてip aを打つと色々出ます。IPアドレスはinet 10.211.55.6の箇所です。このIPアドレスを見て不思議に思って下さい。

なんとグローバルIPアドレスです。

IPアドレスには書式があって、ネットワーク構成を把握します。グローバルIP=WAN接続か、ローカルIP=LAN接続か、で切り分けれるということです。

IPアドレスの書式

  • ローカルIPアドレス:192.168.XX.XXなどの形式です。
  • グローバルIPアドレス:上記以外

Parallelsネットワーク設定③:Parallelsのネットワーク設定を確認する

Parallels®︎ Desktop 19 for Macのネットワーク設定(デフォルトは共有ネットワーク)
Parallels®︎ Desktop 19 for Macのネットワーク設定(デフォルトは共有ネットワーク)

さて、Parallels仮想環境のサーバーのIPアドレスが、グローバルIPアドレスなので何かしらの設定が必要です。

次は、Parallels®︎ Desktop 19 for Macのネットワーク設定を開いてみましょう。

デフォルトは共有ネットワークです。

共有ネットワークってなに?

Parallels®︎ Desktop 19 for Mac の仮想マシンのデフォルトは共有ネットワークです。

共有ネットワーク≒NATでホストOSと同じIPアドレスをシェアしてる状態です。ホストOSとゲストOSのフォルダを共有するために推奨される設定だと思います。

ということで、サーバーに接続するためにどういう方向で対応するか考えてみましょう。

数学で答えを導くのと同じで、サーバー接続という答えは同じでも、できればシンプルで簡単な解答を導きたいからです。

どう対応するか?

  • 方法①:共有ネットワークとして仮想環境のサーバーに接続する。
  • 方法②:ローカルのネットワークに設定し直して、ローカル環境のサーバーとして扱う。

この記事では方法②を採用します。

理由は、仮想環境のマシンのネットワークをローカル環境に設定しなおせば、いつも通りのサーバー環境として設定できるからです。

「いつも通りのサーバー環境」というのは、ルーター配下にローカルマシンがぶら下がって見える状態のことです。自宅PCのネットワークは、ルーター配下にマシン・サーバーがぶら下がる状態でネットワークを構成しています。

仮想環境のPCも、実際に存在するPCのようにルーターにぶら下げます。※設定は簡単です。

Parallels設定④:仮想環境のネットワークをローカルネットワークにする

長ったらしい説明をしてきましたが、仮想環境のネットワークをローカルネットワークにするにはクリック一回で設定できます。

上の画像の通り、構成画面から「デフォルトのアダプタ」を選択するだけです。仮想環境を再起動しなくても、選択した瞬間からネットワークに設定が反映されます。

再度IPアドレスを確認してみましょう。

~/minecraft $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:1c:42:cd:28:1f brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.103/24 metric 100 brd 192.168.10.255 scope global dynamic enp0s5
       valid_lft 86398sec preferred_lft 86398sec
    inet6 fe80::21c:42ff:fecd:281f/64 scope link 
       valid_lft forever preferred_lft forever

IPアドレスはinet 192.168.10.103です。

プライベートアドレスに変更されています。

つまりこれで仮想環境のマシンを現物のローカルマシンとして扱えるようになったわけです。

●補足:サーバーのポートを確認する

~/minecraft $ java -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jar
19:23:41 [INFO ] Loading nukkit.yml ...
19:23:41 [INFO ] Loading server.properties ...
19:23:41 [INFO ] 日本語 (jpn) を言語に選択しました
19:23:41 [INFO ] Minecraft: BEサーバー(v1.19.21に対応)を起動しています
19:23:41 [INFO ] Selected Zlib Provider: 2 (cn.nukkit.utils.ZlibThreadLocal)
19:23:41 [INFO ] 0.0.0.0:19132上でサーバーを開始しています
19:23:41 [INFO ] このサーバーはNukkitのバージョンgit-40701a1「」(API 1.0.14)で動作しています
19:23:41 [INFO ] NukkitはGPLライセンスに基づき配布されています
19:23:41 [INFO ] Loading runtime items...
19:23:41 [INFO ] Loading recipes...
19:23:41 [INFO ] Loaded 1509 recipes.
19:23:41 [INFO ] Successfully loaded 0 resource packs
19:23:42 [INFO ] ワールド "world" を読み込んでいます
19:23:42 [INFO ] Preparing start region for level "world"
19:23:42 [INFO ] ワールド "nether" を読み込んでいます
19:23:42 [INFO ] Preparing start region for level "nether"
19:23:42 [INFO ] GS4ステータス リスナーを開始
19:23:42 [INFO ] クエリポートを設定: 19132
19:23:42 [INFO ] クエリーは 0.0.0.0:19132 で動作しています
19:23:42 [INFO ] デフォルトゲームタイプ: サバイバルモード
19:23:42 [INFO ] 起動完了(0.895秒)! "help"または"?"でヘルプを表示
> 

先ずはサーバーが使用するポートを確認しましょう。サーバー起動時のプロンプトから確認できます。

19:23:41 [INFO ] 0.0.0.0:19132上でサーバーを開始しています

上の表示からポートは19132で起動しているのが分かります。他にはserver.propertiesファイルからでもポートを確認できます。

server.propertiesserver-port=19132が、サーバーのポート設定値です。この値を編集すれば任意のポートで、マイクラのサーバーを起動することできます。

④ Ubuntu【統合版】19132/udpポート開放

$ sudo ufw enable
$ sudo ufw allow 19132/udp
$ sudo ufw reload

Ubuntuのファイアウォールはデフォルトだとufwです

UFW(Uncomplicated Firewall)は、ファイアウォールを簡単にコマンド操作できるよう設計されたLinux(リナックス)のファイアウォール管理プログラムです。

ufwは初期では無効なのでsudo ufw enableでファイアーウォールを有効にします。

19132/udpsudo ufw allow 19132/udpで開放します。

sudo ufw reloadで設定を反映します。

設定が反映されているかsudo ufw status verboseコマンドで確認してみます。

$ sudo ufw status verbose
状態: アクティブ
ロギング: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
新しいプロファイル: skip

To                         Action      From
--                         ------      ----
19132/udp                  ALLOW IN    Anywhere                  
19132/udp (v6)             ALLOW IN    Anywhere (v6)             

sudo ufw status verboseを実行した画面が上です。

19132/udp ALLOW IN Anywhereが表示されているので19132/udpの開放に成功です。

これでローカル上へのサーバー公開が完了です。

確認も踏まえて、ローカル上の端末からサーバーにアクセスしてみましょう。

⑤ 接続テスト1:ローカル環境からサーバーに接続する【統合版】

【10日目】マイクラハードコア100日「自動収穫装置準備とダイヤ初入手」【ゆっくり実況】
気分転換に御覧ください

Pアドレスの確認、ローカルマシンのポート開放も済んだので、ローカル環境からサーバーに接続テストをしましょう(以下、ローカル接続テストと言います。)。

下記手順で進めましょう。

ローカル接続テスト手順

  • 1)統合版マイクラサーバーを起動する。
  • 2)IPアドレス・ポート番号を再度確認する。
  • 3)Wifiスマホで統合版サーバーにアクセスする。

当然、IPアドレス、ポート番号が必要になるので、どこかにメモっておきましょう。

先ずはサーバーを起動しましょう。

1)統合版マイクラサーバーを起動する。

~/minecraft $ java -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jar
    07:02:52 [INFO ] Loading nukkit.yml ...
    07:02:52 [INFO ] Loading server.properties ...
    07:02:52 [INFO ] 日本語 (jpn) を言語に選択しました
    07:02:52 [INFO ] Minecraft: BEサーバー(v1.19.21に対応)を起動しています
    07:02:52 [INFO ] Selected Zlib Provider: 2 (cn.nukkit.utils.ZlibThreadLocal)
    07:02:52 [INFO ] 0.0.0.0:19132上でサーバーを開始しています
    07:02:52 [INFO ] このサーバーはNukkitのバージョンgit-40701a1「」(API 1.0.14)で動作しています
    07:02:52 [INFO ] NukkitはGPLライセンスに基づき配布されています
    07:02:53 [INFO ] Loading runtime items...
    07:02:53 [INFO ] Loading recipes...
    07:02:53 [INFO ] Loaded 1509 recipes.
    07:02:53 [INFO ] Successfully loaded 0 resource packs
    07:02:53 [INFO ] ワールド "world" を読み込んでいます
    07:02:53 [INFO ] Preparing start region for level "world"
    07:02:53 [INFO ] ワールド "nether" を読み込んでいます
    07:02:53 [INFO ] Preparing start region for level "nether"
    07:02:53 [INFO ] GS4ステータス リスナーを開始
    07:02:53 [INFO ] クエリポートを設定: 19132
    07:02:53 [INFO ] クエリーは 0.0.0.0:19132 で動作しています
    07:02:53 [INFO ] デフォルトゲームタイプ: サバイバルモード
    07:02:53 [INFO ] 起動完了(1.03秒)! "help"または"?"でヘルプを表示
    > 

サーバーを起動させるコマンドはjava -Xms1G -Xmx4G -jar nukkit-1.0-SNAPSHOT.jarです。

2)IPアドレス・ポート番号を再度確認する。

~/minecraft $ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: enp0s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 00:1c:42:cd:28:1f brd ff:ff:ff:ff:ff:ff
        inet 192.168.10.103/24 metric 100 brd 192.168.10.255 scope global dynamic enp0s5
           valid_lft 86398sec preferred_lft 86398sec
        inet6 fe80::21c:42ff:fecd:281f/64 scope link 
           valid_lft forever preferred_lft forever

IPアドレスを調べるコマンドはip aです。

ポートは上のサーバー起動の表示から19132だと分かります。

3)Wifiスマホで統合版サーバーにアクセスする。

ローカル環境からサーバーに接続する端末選びですが「自宅のWifiに接続したスマホ」を使うと良いでしょう。

細かなことが分からなければ、とりあえず「自宅のWifiに接続したスマホ」でサーバーに接続してみて下さい。

「自宅のWifiに接続したスマホ」を準備したら、Minecraftのアプリを起動します。

次に「遊ぶ」を押します。

次に上部の「サーバー」から「サーバーを追加」を押します。

サーバー情報の入力が出るので、調べておいたローカルIPアドレス、ポートを入力します。

最後に「保存」を押して次に進みます。

サーバーが追加されたので、サーバーを選択して「サーバーに参加」を押せば、起動しているローカルサーバーに接続します。

何やら注意事項が表示されるので確認して「続行」を押します。

サーバー接続中の表示になるので暫く待ちます。

ParallelsのUbuntu 22.04 LTS ARM64で起動した Nukkitサーバーにローカル接続!
ParallelsのUbuntu 22.04 LTS ARM64で起動した
Nukkitサーバーにローカル接続!

ログインできれば、ローカル接続テストは成功です。

念の為、サーバーのプロンプトも確認しておきましょう。

「アカウントA」からUbuntu 22.04 LTS ARM64仮想環境に建てた統合版マイクラサーバー(Nukkitサーバー)にログインできてるのが分かると思います。

07:39:31 [INFO ] アカウントA[/192.168.10.101:51228] がエンティティID 1 として (world, 121.5522, 66.0, 135.9729)にログインしました

特に、この表示に注目してください。

アカウントA[/192.168.10.101:51228]

このアドレスは、グローバルIPアドレスか、ローカルIPアドレスか?

どちらでしょうか?

答えはローカルIPアドレスです。

忘れないで下さい。今やっているのはローカルサーバーの接続テストです。

まだ、外部にサーバーを公開していないので外の友達からはこのサーバーにはアクセスできません。

では、次にローカルサーバーを外部に公開していきましょう。

⑥ 外部に公開!ルーター「Aterm WG2600HS」でのUDPポート転送の設定例

【6~10日総集編】マイクラハードコア100日「無限溶岩∞装置を実践サバイバル」【ゆっくり実況】
気分転換に御覧ください

サーバーを外部に公開するのはここからが本番です。

サーバーを外部に公開するためには、ルーター側にポート転送設定を行います。

場合によってはパケットフィルタ設定(ルーター上のポート開放)も必要になるかも知れません(今回は不要です。)。

※「ルーター」「ポート転送」など「用語解説」は下にあります。

先ずはルーターの設定画面を開こう

NEC製ルーター「Aterm WG2600HS」の設定画面

ルーターのURLは、ローカルIPアドレスの最下段を"1"にしたアドレスです。

ローカルIPアドレス192.168.10.101なら、ルーターのURLは192.168.10.1です。

僕の環境では、ルーターの設定画面を開くには、URL欄にhttps://192.168.10.1でアクセスしました。

また、ログインに必要な「ユーザー名」などは注意書きされてます。

「ユーザー名」には「admin」と半角小文字で入力し、「パスワード」には、本商品本体のラベルに記載された数字6桁のパスワード(Web PW)を入力して、[ログイン]をクリックしてください。

機器によっては取扱説明書などにユーザー名などの初期設定値が記載されていたりもします。

他の機器も多少違いはあれど、ほとんど同じです。

ルーター画面からポートマッピング設定を開く

NEC製ルーター「Aterm WG2600HS」のトップ画面

ルーターにログインしたら、上記画面が表示されます。中段右側に「ポートマッピング設定」という項目があるので、それをクリックします。

ちなみに、ルーターAterm WG2600HSでは、ポート転送を"ポートマッピング"と言います。

BUFFALOなどのルーター機器だと"ポートフォワーディング"と表示されてるかも知れません。ポート転送=ポートマッピング=ポートフォワーディング、すべて同じ意味です。

※「ルーター」「ポート転送」など「用語解説」は下にあります。

ポートマッピングの設定をする

NEC製ルーター「Aterm WG2600HS」でポートマッピング(ポート転送)するための設定画面
NEC製ルーター「Aterm WG2600HS」でポートマッピング(ポート転送)するための設定画面

上の画像が、Aterm WG2600HSのポート転送設定の画面です。

上段から

  • 利用可能ポート:変換対象ポートで利用可能なポート
  • NATエントリ追加:ここにポート転送設定を入力します。

それでは統合版マイクラサーバー外部公開時のポート転送の設定例を解説します。

統合版マイクラサーバー外部公開時のポート転送の設定例

ポート転送のUDPポート設定例
ポート転送のUDPポート設定例

今回の例では統合版マイクラサーバー(Nukkitサーバー)を想定して下記のネットワーク環境で解説します。自分の環境に読み替えて設定して下さい。

ネットワーク環境

  • WAN側(外部):グローバルIPアドレス:ポート(19744/UDP)
  • LAN内サーバー(内部):192.168.10.103:19132/UDP

ポートは内部と外部ともに19132/UDPで統一した方が分かりやすいですが、ルーターで設定できる「利用可能ポート」の範囲外なのでWAN側ポートは19744/UDPとしました。

ちなみに、WAN側とLAN側のポート番号を変えた方がセキュリティ的には、はるかに強くなります。

というか、WAN側ポートを変えるというのは、セキュリティを上げるテクニックです。

理由は、統合版マイクラ鯖に接続するポート19132/UDPは、誰もが知っているからです。

これはグローバルIPアドレスを知られるとグローバルIPアドレス:19132で好き放題にアクセスされる状態で危険なんです。

ルーターは中継地点

中継地点となるルーターは、WAN側ポート19744/UDPのアクセスをLAN内サーバー192.168.10.103:19132道案内する役割です。これをポート転送と言います。

サーバー接続の流れ

  • 外部からはグローバルIPアドレス:ポート(19744/UDP)でサーバーにアクセスする。
  • 中継地点のルーターはポート:19744192.168.10.103:19132/UDPにポート転送する。
  • その結果、マイクラサーバー192.168.10.103:19132/UDPが接続に応答する。

さて、上記の内容で、ルーターに実際に設定してみましょう。

WAN側ポート19744/UDP
LAN側ポート192.168.10.103:19132/UDPに転送する。

WAN側ポート19744/UDPをLAN側ポート192.168.10.103:19132/UDPにポート転送する設定をします。

ポート転送

  • LAN側ホスト:マイクラサーバー192.168.10.103
  • プロトコル:UDP
  • 変換対象ポート番号:WAN側ポート(今回は19744/UDP
  • 宛先ポート番号:LAN側ポート(今回は19132/UDP

どうでしょう、簡単じゃないですか?これでマイクラサーバーを外部に公開できます。

ただし、必ず外部から接続テストをして確認してください。

注意:「利用可能ポート」で設定する

機器にもよりますが、変換対象ポート(WAN側ポート)は「利用可能ポート」の範囲内で設定しましょう。

「利用可能ポート」の制限が無いなら、WAN側ポートにどんなポート番号を設定しても構いません。

⑦ 接続テスト2:グローバル環境からサーバーに接続する【統合版】

マインクラフト統合版サーバーにログイン!
マインクラフト統合版サーバーにログイン!

今度はグローバル環境(外部)からサーバーに接続テストを行います(以下、グローバル接続テストと言います。)。

外部からの接続テストのために事前に準備するものは下の二つです。

準備するもの

  • 1)グローバルIPアドレス
  • 2)4G(5G)回線に繋がったスマホ(Wifiをオフにしたスマホ)

ちなみに、グローバルIPアドレスの確認はCMANで手軽できます。

1)CMANでグローバルIPアドレスを確認する

CMANでグローバルIPアドレスを確認する(黒塗り)

上はCMANでグローバルIPアドレスを調べた画面です。

画像の黒塗り箇所にグローバルIPアドレスが表示されています。

2)4G(5G)回線に繋がったスマホ(Wifiをオフにしたスマホ)

この作業は4G(5G)回線に繋がったスマホ(wifiをオフにしたスマホ)でやっていきます。

マインクラフトのアプリの「サーバーを追加」から、確認したグローバルIPアドレスでサーバーを追加します。

サーバーアドレス欄にグローバルIPアドレス(黒塗り)を入力しています。

外部からアクセスするポートは「19744」なので注意してください。

ルーターの設定等が上手くいっていれば、上記のようにPing値が表示されます。

このPing値が表示されていれば、外部から統合版マイクラサーバーが"見えている状態"です。

「サーバーに参加」を押します。

サーバーに接続中の画面になります。

ParallelsのUbuntu 22.04 LTS ARM64で起動した Nukkitサーバーにグローバル接続!
ParallelsのUbuntu 22.04 LTS ARM64で起動した
Nukkitサーバーにグローバル接続!

見た目は同じですが、外部から統合版マイクラサーバー(Nukkitサーバー)に接続しています。

これで友達の家(外部)からでも、自分の家の統合版マイクラサーバーに入れるようになります。

統合版マイクラサーバーにログインしたので、プロンプトを確認してみましょう。

特に注目してもらいたいのは、ログイン箇所の表示です。

17:25:05 [INFO ] アカウントA[/126.236.176.10:33429] がエンティティID 1 として (world, 121.5522, 66.0, 135.9729)にログインしました

グローバル接続とローカル接続では、ログインしているユーザーのアドレスが違います。

IPアドレスの違い

  • グローバルIPアドレス:アカウントA[/126.236.176.10:33429]
  • ローカルIPアドレス :アカウントA[/192.168.10.101:51228]

アドレスを識別できると、どの段階でシステムがこけてるかを切り分けができるようになります。

また、必ず小から大に発展させるように取り組む癖をつけましょう。

つまりLANからWANに拡張させるということです。

  • ローカルのアクセスで問題が出たら、LAN内のPC本体の設定を疑う
  • グローバルのアクセスで問題が出たら、ルーター設定を疑う

など、問題の切り分けが容易になるからです。

トラブルシューティング:統合版マイクラサーバー「ネットワークに接続できないようです。」

統合版マイクラサーバーの接続エラー 「ネットワークに接続できないようです。ネットワーク接続を確認してください。」
統合版マイクラサーバーの接続エラー
「ネットワークに接続できないようです。ネットワーク接続を確認してください。」

統合版マイクラサーバーを建てて、いざ外部からサーバーに接続テストをすると

「ネットワークに接続できないようです。」

というエラーが表示されます。

このエラーはおそらく統合版マイクラサーバー構築で一番表示されるエラーだと思います。

このトラブルを解決するのはとても簡単です。

統合版マイクラサーバーの接続エラー 「ネットワークに接続できないようです。」は「モバイルデータを使用」をオンで解決!
統合版マイクラサーバーの接続エラー
「ネットワークに接続できないようです。」は「モバイルデータを使用」をオンで解決!

解決策は、大抵は「モバイルデータを使用」をオンにすることで解決します。

詳しくは下の記事を参考にしてみてください。

○良い:統合版マイクラ「Nukkit」では、Xbox Live 用ポートを"開放しなくて良い"

統合版マイクラ鯖
Xbox Live 用ポート開放
UDP88、500、3544、4500、60209(推奨)
 
TCP
80
 
UDP・TCP両方
53、3074
 
Teredo有効化
netsh interface Teredo set state client clientport=60209(上記推奨と同じ値)
 

Xbox Live ポート参考

  • Xbox コンソールの Xbox ネットワークで使用されるネットワーク ポート
    • https://support.xbox.com/ja-JP/help/hardware-network/connect-network/network-ports-used-xbox-live
       
  • NAT エラーとマルチプレイヤー ゲームの問題のトラブルシューティング
    • https://support.xbox.com/ja-JP/help/hardware-network/connect-network/xbox-one-nat-error

先ず結論ですが、今回使った非公式の統合版マイクラサーバー(Nukkit)にXbox Live 用ポートの開放は「不要」です。

NukkitはJavaで動作するからです。

これに対して、公式の統合版マイクラサーバーだとXbox Live 用ポートの開放が「必要」なはずです。公式の統合版マイクラサーバーはJavaで動作していないからです。

統合版マイクラサーバーNukkitでは、Xbox Live 用ポートを"開放しなくて良い"が正解です。

マイクラ自宅サーバーのセキュリティ面で気を付けること

先ず言いたいことは、ポート開放はセキュリティを下げます。

セキュリティ上で注意すべきことは基本2つです。

セキュリティ危険度ひとこと

IPアドレスを知られること。ただし、ポート番号知られていない。
 
IPアドレスは調べれば特定できます。が、知られないようにした方が良い。

IPアドレスも知られて、ポート番号も知られている。
 
危険部屋に鍵がかかって無いのと同じ状況なので、「友達の部屋」には強盗が入りたい放題です。

その部屋だけは何処からでも入りたい放題の状態です。

それ以外の部屋は鍵がかかってます。

これはサーバー運用上しょうがないリスクです。サーバーは、穴を開けてリスクを許容して運用します。

当然、対策はしますが。こういうものだと思ってください。

簡易な対策だと、ポート番号を定期的に変更したりします。

また、セキュリティリスクが本当に不安になったらポートを閉じましょう。

要するに、部屋に鍵をかけようということです。

ネットワークIT用語解説

【1日目】マイクラハードコア100日「地獄の始まり」【ゆっくり実況】
気分転換に御覧ください

ネットワークで使うIT用語を解説していきます。

「ポート」や「ポート開放」「ファイヤーウォール」などの用語をセットで覚えましょう。

IPアドレス

IPアドレスには2種類あります。

グローバルIPアドレス、ローカルIPアドレス

ローカルIPアドレスの呼び方

  • ローカルIPアドレス
  • プライベートIPアドレス

ポート

ポートのイメージはサービスを受け付ける個々の料金所です。

インターネット上では、パケット車がたくさん走っています。すべてのパケット車が料金所を通れるわけではなく、開放されているポート(料金所)のみ通過できます。

WAN側ポート、LAN側ポートと使用するデバイスごとにポートを設定する必要があります。

ポートはプログラム(Webサービス)ごとに使用しています。

デフォルトで開放されているポートを「Well Known Port(ウェルノウンポート)」と言います。例えば、http通信は80番ポートを使っています。

実はみんな自らポートを開閉させている!

実は知らない内に自らポートを開閉させています。

プログラムのインストール時に「プログラムを許可しますか?」に承諾することで、みんな自分のコンピューターのポートを開放しています。

Well Known Port 以外のポートはデフォルトで閉じられているからです。

ポート転送

ポート転送は、WAN側に来たアクセス(パケット)をLAN側の機器に転送する設定です。

ちなみに、今回のNEC製ルーターでは、ポート転送とは呼び方が違う「ポートマッピング設定」という表記です。

ポート転送の呼び方

  • ポート転送
  • ポートマッピング
  • ポートフォワーディング
  • ポートフォワード

上のようにルーター機器によって、同じ意味でも表記が様々です。

ルーター

ルーターは高速道路と一般道の中継地点のイメージです。

高速道と一般道の流れが変わる中継地点に各料金所(ポート)があって、車両を一台一台丁寧に検閲していきます。

ちょうどWAN(グローバル)が高速道で、LAN(ローカル)が一般道みたいなイメージです。

WANからLANに入るには、必ず中継地点(ルーター)の案内が必要になるわけです。

高速道のまま突っ走っても、どこに行けば良いのか分からないので中継地点(ルーター)で目的地を教えてもらったりします。それがポート転送(目的地の案内)です。

ファイヤーウォール

「ファイヤーウォール」は、コンピュータネットワークにおいて、コンピュータセキュリティの保護、その他の目的のため、通信を制御・阻止(パケットフィルタリング)する機能を言います。

「ファイヤーウォール」は、パソコン、スマホ、ルーターなどすべてのデバイスに搭載されている機能と理解しておいてください。

高速道路の料金所で「許可された車だけを通す仕組み(機能)」です。

Java版Minecraft にセキュリティ上の脆弱性【Log4Shell】

参考:https://www.minecraft.net/ja-jp/article/important-message--security-vulnerability-java-edition-jp

コメント

コメントする

目次