- 無料と書いてある通りレンタルサーバーを使いません。
- 準備するものは、自宅のPCとインターネット回線だけです。
僕はプロのITエンジニアです。
そんな僕がマイクラ鯖を構築する記事を書く理由は、ほとんどの記事でマイクラ鯖を立てるのは無理だからです。ちなみにサーバーを外部に公開する方法は"ポート開放"ではありません。
"マイクラ サーバー構築"で検索してみて下さい。
出てくる記事のすべてが"ポート開放"の記事です。
外部に公開できない
- 外部公開≠ポート開放
- ポートを説明しても、素人解説で余計に「分からない」。
- 締め括りは「ConoHa WING」のアフィリエイト
ポート開放を解説している記事を読んでも、サーバーを外部に公開できません。
外部に公開する方法は"ポート転送"です。
本記事では僕自身がこの手順で鯖を構築したので確実に鯖を外部に公開できます。外部公開のエビデンスとして画像を見るだけでも分かると思います。じっくり読んでみてぜひ参考にしてみください。
【疑問】どうしてM2 MacにParallels仮想環境を構築するのか?
この記事では、M2 MacにParallels®︎ Desktop 18 for Macを使って構築したUbuntu 22.04 LTS ARM64上で統合版マイクラサーバーを動かします。
少々無理があるんじゃないかとツッコミがあると思います。
ツッコミどころ
- M2 Mac
- M2 Macで動くマイクラBE鯖はないはず?
- BE鯖はARM64プロセッサー上で動かないはず?
- Parallels Desktop 19 for Mac
- なんでParallels Desktop 19 for Macの仮想環境を使うのか?
- なんでParallels Desktop 19 for Macの仮想環境を使うのか?
- 仮想環境にはLinux Ubuntu 22.04 LTS ARM64
- なんでLinuxを使うのか?
- なんでLinuxを使うのか?
- Nukkitサーバー
- なんで公式サーバーではなくNukkitサーバーを使うのか?
- なんで公式サーバーではなくNukkitサーバーを使うのか?
- Parallels®︎ Desktop 18 for Mac仮想環境のネットワーク設定
- 仮想環境へのサーバー接続ってどうやるのか?
- 仮想環境へのサーバー接続ってどうやるのか?
- ポート開放ツールを使わない
- なんでポート開放ツールを使わないのか?
とツッコんで欲しいくらいです。
実は、統合版マイクラサーバーは、M2 Macでも、Linux(リナックス)でも関係なく動きます。なぜならJavaで動作するNukkitサーバー(非公式)を使うからです。
その他にもきちんとした理由があります。
- M2 Macのマイクラ鯖はないはず?
-
M2 Macで動く公式のマイクラBE鯖はありません。
- BE鯖はARM64プロセッサー上で動かないはず?
-
動きませんが、x86環境をエミュレートすればARM64環境でも動作します。
が、面倒なのでやりません。
※ITは楽できるなら楽に済ませるのが正義だからです。
- なんで仮想環境を使うのか?
-
仮想環境を使う理由は、メインPCの環境を汚さないからです。
仮想環境なら簡単にスクラップ&ビルドできるので色々実験できます。
- なんでParallels®︎ Desktop 18 for Macを使うのか?
-
M2 MacにWindowsやLinuxの仮想環境をクリック数回(数分)で構築できるからです。
- なんでLinux Ubuntu 22.04 LTS ARM64を使うのか?
-
Linuxはコマンド一発であらゆる環境を構築出来るからです。
- なんでNukkitサーバーを使うのか?
-
Javaで動作するからです。
どんなデバイスでもJavaさえ入ればサーバーが起動します。ちなみに、Nukkitサーバーは、公式サーバーよりもかなり軽快に動作するのでオススメです。
- 仮想環境のネットワーク設定
-
記事で詳しく解説しますが、ネットワークアダプタに設定してLAN上で単一マシンとして認識されるようにします。
- なんでポート開放ツールを使わないのか?
-
ポート開放をツールを使わない方がネットワークの理解に役立つからです。
本記事では仮想環境にネットワーク接続するので、ネットワークの理解が深まるのがポイントです。
長々説明するのは後からにします。早速、サーバーを構築していきましょう。
無料でNukkit統合版マイクラサーバーを建てる!流れ
Ubuntuに無料で統合版マイクラサーバーを建てる!流れは下の通りです。
鯖を建てる流れ
- OS準備: Ubuntu仮想環境を構築
- 「Parallels®︎ Desktop 18 for Mac」でUbuntu 22.04 LTS ARM64(Linux)を構築する
- 「Parallels®︎ Desktop 18 for Mac」でUbuntu 22.04 LTS ARM64(Linux)を構築する
- ① Ubuntu環境設定
- システム更新
- iproute2
- OpenJDK(javaランタイム)
- Git
- ② Nukkitサーバーをダウンロード
- ③ Nukkitサーバーを起動する
- Parallels補足:仮想環境のネットワークを設定する
- ④ ポート開放
ufwコマンド
- ⑤ 接続テスト1:ローカル環境からサーバーに接続する
- ⑥ ルーターを設定して、サーバーを外部に公開する
- ⑦ 接続テスト2:グローバル環境からサーバーに接続する
上から順に作業を進めていきます。
解説のために多少長ったらしい冗長な手順にしています。
例えば、いきなりサーバーを外部に公開する仕組みが分かっている人は「ローカル環境からサーバーに接続する」という手間を省いてもらって構いません。
しかし、ほとんど人は・ローカル環境からのサーバー接続と・外部からのサーバー接続の違いや意図を理解できていません。
結果が「サーバー接続」のため、その違いが分かりづらいからかも知れません。
サーバーを建てる際は必ずローカル環境と外部環境の接続の違いを意識するようにしましょう。
OS準備: Linux仮想環境を構築
Parallels®︎ Desktop 18 for Macで仮想環境を構築するのはめちゃくちゃ簡単です。
クリックだけでM2 Mac上でLinuxは起動します。
もし作業で上手くいかなかったら、スクラップにして(削除して)もう一度クリックからやり直せば良い訳です。
ガチャをリセマラするよりも、Linuxをスクラップ&ビルドする方が簡単です。
Ubuntuでターミナル(端末)を使う
Ubuntuでターミナルを起動しましょう。
検索欄から"terminal"と入力すればターミナルが表示されます。
そのまま"Enter"を押せば、ターミナルが起動します。
UbuntuなどのLinuxではターミナル(端末)上でのプログラムの操作が基本です。
フォルダを"右クリック"でもターミナル(端末)が起動する!
cdコマンド
でフォルダを移動できますが面倒です。
フォルダから"右クリック"⇒"端末で開く"でターミナル(端末)をそのフォルダ直下で開くことできます。
ターミナルを"右クリック"⇒"端末で開く"で起動すれば、かなり時短になるのでオススメです。
例えば、フォルダを"右クリック"⇒"端末で開く"で開けば、わざわざマイクラサーバーの場所にcdコマンド
で移動する必要がありません。
① Ubuntu環境設定
マイクラのサーバー構築に必要な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 inet
でinet
を抜き出すと分かりやすいです。
僕のローカル環境の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 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ネットワーク設定①:仮想環境のネットワークに接続できない!
"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仮想環境のサーバーの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.properties
のserver-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/udp
をsudo 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:ローカル環境からサーバーに接続する【統合版】
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アドレス、ポートを入力します。
最後に「保存」を押して次に進みます。
サーバーが追加されたので、サーバーを選択して「サーバーに参加」を押せば、起動しているローカルサーバーに接続します。
何やら注意事項が表示されるので確認して「続行」を押します。
サーバー接続中の表示になるので暫く待ちます。
ログインできれば、ローカル接続テストは成功です。
念の為、サーバーのプロンプトも確認しておきましょう。
「アカウント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ポート転送の設定例
サーバーを外部に公開するのはここからが本番です。
サーバーを外部に公開するためには、ルーター側にポート転送設定を行います。
場合によってはパケットフィルタ設定(ルーター上のポート開放)も必要になるかも知れません(今回は不要です。)。
※「ルーター」「ポート転送」など「用語解説」は下にあります。
先ずはルーターの設定画面を開こう
ルーターのURLは、ローカルIPアドレスの最下段を"1"にしたアドレスです。
ローカルIPアドレスが192.168.10.101
なら、ルーターのURLは192.168.10.1
です。
僕の環境では、ルーターの設定画面を開くには、URL欄にhttps://192.168.10.1
でアクセスしました。
また、ログインに必要な「ユーザー名」などは注意書きされてます。
「ユーザー名」には「admin」と半角小文字で入力し、「パスワード」には、本商品本体のラベルに記載された数字6桁のパスワード(Web PW)を入力して、[ログイン]をクリックしてください。
機器によっては取扱説明書などにユーザー名などの初期設定値が記載されていたりもします。
他の機器も多少違いはあれど、ほとんど同じです。
ルーター画面からポートマッピング設定を開く
ルーターにログインしたら、上記画面が表示されます。中段右側に「ポートマッピング設定」という項目があるので、それをクリックします。
ちなみに、ルーターAterm WG2600HSでは、ポート転送を"ポートマッピング"と言います。
BUFFALOなどのルーター機器だと"ポートフォワーディング"と表示されてるかも知れません。ポート転送=ポートマッピング=ポートフォワーディング、すべて同じ意味です。
※「ルーター」「ポート転送」など「用語解説」は下にあります。
ポートマッピングの設定をする
上の画像が、Aterm WG2600HSのポート転送設定の画面です。
上段から
- 利用可能ポート:変換対象ポートで利用可能なポート
- NATエントリ追加:ここにポート転送設定を入力します。
それでは統合版マイクラサーバー外部公開時のポート転送の設定例を解説します。
統合版マイクラサーバー外部公開時のポート転送の設定例
今回の例では統合版マイクラサーバー(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)
でサーバーにアクセスする。 - 中継地点のルーターは
ポート:19744
を192.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アドレスを調べた画面です。
画像の黒塗り箇所にグローバルIPアドレスが表示されています。
2)4G(5G)回線に繋がったスマホ(Wifiをオフにしたスマホ)
この作業は4G(5G)回線に繋がったスマホ(wifiをオフにしたスマホ)でやっていきます。
マインクラフトのアプリの「サーバーを追加」から、確認したグローバルIPアドレスでサーバーを追加します。
サーバーアドレス欄にグローバルIPアドレス(黒塗り)を入力しています。
外部からアクセスするポートは「19744」なので注意してください。
ルーターの設定等が上手くいっていれば、上記のようにPing値が表示されます。
このPing値が表示されていれば、外部から統合版マイクラサーバーが"見えている状態"です。
「サーバーに参加」を押します。
サーバーに接続中の画面になります。
見た目は同じですが、外部から統合版マイクラサーバー(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 用ポート開放 | |
---|---|
UDP | 88、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
- 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用語解説
ネットワークで使う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
コメント