Thursday,November 17

GCPでウェブサーバ構築チャレンジ・10【閑話休題】 (5 photos)

GCPでウェブサーバ構築チャレンジ、10ログ目。
現在、ローカルPCじょうから新ウェブサーバに移行するための準備を継続中です。

そのあいだ、なにもしないのもGCPがもったいないとPCゲームのマルチプレイができるサーバを構築してみたり。

今回はGCP、Debian GNU/Linux8でMinecraft(マインクラフト)サーバーを立ててみたのでそのメモです。

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_04.jpg

サンドボックスという人気のゲームジャンルを確立した元祖ともいえるMinecraft(マインクラフト)。世界がすべて1m四方のサイコロ状のブロックで構成されており、それらすべてが材料や資源として活用できる。材料や資源を組み合わせて工作(クラフティング)したり、多彩なブロックを積みあげて建築(ビルディング)するのがゲームの主な目的だが、PC版であれば世界の広さは地球8個分にもおよぶともいわれており、多彩で大量の資源をつかった巨大建築が可能。終わりの見えない奥深さが数多くのプレイヤーを虜にしています。ゲームのプレイ動画や画像をインターネットで発表することをオフィシャルが許可しており、Minecraftをキーにネットユーザーとつながることが可能となっているのも魅力


参考にしたのは「Minecraft」の日本語Wiki
Minecraft Japan Wiki
https://www26.atwiki.jp/minecraft/

ほとんどWikiのとおりに進めることで構築できましたが、GCPとDebian GNU/Linux8によるクセみたいのがあります。


GCPでインスタンスを作成

Minecraftサーバーは容量的には小さいので、前回「7 days to die」で作成したインタンスの空き容量を利用します。GCP>Compute Engineに作成したVMインスタンスの構成は以下のとおり。

名前:お好きなように。短い名前のほうがあとあとラクです。
コア数:6
メモリ:20GB
ディスク:Debian GNU/Linux8(jessie)
ディスク容量:SSD永続ディスク15GB

これを「HTTP、HTTPSともにチェックを入れずに」作成しました。


ファイアウォールの構成とインスタンスへの適用

マルチサーバを立てるひとがだれもがいちどはハマるであろうポート開放。
GCPではポートごとにルール化できます。前回「7 days to die」での方法とおなじくこれを利用します。重ねて言いますが、ポート開放は自己責任です。

「GCP>ネットワーキング>ファイアウォールルール」に移動

「ファイアウォールルールを追加」

名前:minecraft-rule
説明:空欄でも可
ネットワーク:defaultのまま
ソースフィルタ:「すべてのソースから許可(0.0.0.0/0)」選択
許可対象プロトコル:tcp:25565
ターゲットタグ:minecraft-tag

としてルールを作成します。
許可対象プロトコル部分が開放するポート番号とプロトコル。
ターゲットタグがルールを認識するためのタグです。

※「Minecraft」はデフォルトではひとつのポート25565を使用します。

このルールをインスタンスに適用すれば完了です。

「GCP>Compute Engine」で適用したいインスタンスをクリックして「編集」、「タグ」の部分に「minecraft-tag」と入力して「保存」すれば、インスタンスにルールが適用されます。

Debian GNU/Linux8(jessie)作業

作成したインスタンスにSSH接続して、以下の作業を行います。
流れのほとんどはWikiの通り。Debianなので違う部分があります。

sudo apt-get update...パッケージリスト更新

sudo apt-get install -y openjdk-8-jre…Minecraftの実行環境Javaをインストール
2016年11月18日加筆…openjdk-8-jreはインストールしたらダメです! --理由はこちら!!--

cd /var/minecraft/…たとえばこんなディレクトリ

--Minecraftサーバーをインストールしたいディレクトリに移動

--必要に応じて sudo mkdir でディレクトリ作成


minecraft.net - Minecraft Server Download
https://minecraft.net/ja/download/server

sudo wget https://s3.amazonaws.com/Minecraft.Download/versions/*.*.*/minecraft_server.*.*.*.jar…Minecraftサーバーのインストール

--*.*.*はバージョン


sudo vi mc_start.sh…起動用スクリプトを作成

一例
-----------------------------------------------------------
#!/bin/bash
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
-----------------------------------------------------------

sudo chmod 744 mc_start.sh…パーミッションを設定

sudo ./mc_start.sh…Minecraftサーバ起動

--初回起動時のみ、Minecraftサーバは必要な環境を自動的に作成してすぐ終了する

--このあとはeula=trueやserver.propertiesやscreenなどWikiやインターネットでお好みのように


サーバー管理メモ
Minecraft Serverの終了方法
Minecraft Serverコンソールで「stop
あるいはオペレーター権限のあるプレイヤーが「/stop


Minecraftサーバにログインできない

→解決しました!

2016年11月16日、サーバの設定に問題はないと思うのですがゲームクライアント側からログインしようとするとこんなメッセージが表示されました。

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_01.jpg

Authentication servers are down.Please try again lter,sorry!


「認証サーバがダウンしてます」というメッセージ。

Minecraftサーバのデフォルト設定では、クライアントが接続要求をしてきたときにオフィシャルの認証サーバにクライアントの登録の有無を問い合わせます。どうやらそこでサーバの処理がコケているようです。


このときのMinecraftサーバのログ

[19:35:15] [User Authenticator #1/INFO]: Disconnecting com.mojang.authlib.GameProfile@**********[id=,name=**********,properties={},legacy=false] : Authentication servers are down. Please try again later, sorry!
[19:35:15] [User Authenticator #1/ERROR]: Couldn't verify username because servers are unavailable
[19:35:15] [Server thread/INFO]: com.mojang.authlib.GameProfile@**********[id=,name=**********,properties={},legacy=false] lost connection: Authentication servers are down. Please try again later, sorry!

「Disconnecting com.mojang.authlib.GameProfile~」として認証サーバに接続できない旨が表示されています。しかしこの認証エラー、サーバから外部へ向かう接続がファイアウォールなどで遮断されているときも出力されるとのこと。GCP側の調整ミスなのか、オフィシャルの認証サーバが不具合を起こしているのか判断できません。

さらに調べたところ、Minecraft1.11のバージョンがリリースされたのは2016年11月14日。たった2日前のことだったんです。これはキビしいです。

GCPは基本的に内部から外側へむかう通信(アウトバウンド)を一部を除いて遮断していません。外部から内部へ向かう通信(インバウンド)をファイアウォールで制限する考え方です。ファイアウォールルールでポートは開けているはずですから、GCP側には認証サーバとの通信に支障になるようなものはないように思われました。

しかし、オフィシャル側では認証サーバに障害は発生していないようで、GCP側もしくはサーバー側になにかしらの問題があるようにも受けとれました。

Minecraftオフィシャルサーバの状態
https://help.mojang.com/

Minecraft Serverのログも、もうちょっと原因を特定しやすく出力してくれれば助かるんですが……。

認証サーバのものと思われるIPアドレスにpingを送信したあたりで「付き合いきれねえ!」となりまして(笑) 認証サーバとの接続はあとまわしにして、とにかくクライアントをMinecraft Serverに接続することを優先しました。

じつは、オフィシャルの認証を通さずにサーバーへの接続を許可することもできるんですが、不正ソフトからの接続も許可することになってしまい、セキュリティが低下するとしてオフィシャルが非推奨にしているんですよね。

そこで、あくまで認証サーバとの接続問題の原因が特定できるまでの緊急回避として、ホワイトリスト設定を併用することにしました。→解決しました!

Minecraftサーバーには接続を許可するユーザーを管理できるホワイトリスト機能があります。デフォルトはこの機能はオフになっていますが、これを併用すればオフィシャルの認証を通さなくてもセキュリティはそれなりに担保できると思いました。

以下、その設定です。

sudo vi server.properties

online_mode=true → false…オフィシャル認証をOFF

※※非推奨の設定です!※※


white_list=false → true…ホワイトリスト機能をON

sudo ./mc_start.sh…Minecraftサーバ起動

この状態でクライアントから接続しようとすると、

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_02.jpg

You are not white-listes on this server!


「あなたはホワイトリストに登録がありません」となってwhitelist機能が動作していることが確認できます。

ここでMinecraftサーバーコンソールで

whitelist add [ユーザー名]

クライアントから再接続すると、

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_03.jpg

つながったー! ニワトリさーん、つながったよー!


接続できます。


online_modeはtrue設定が推奨されています。
今回falseにしたのは、あくまで認証サーバエラーを回避するための緊急措置です。
原因が特定されしだいonline_modeをtrueに戻しても接続できる状態にいたします。
この問題に関してなにか有益な情報をお持ちのかたがいたら、ぜひ提供をお願いしたいです。→解決しました!

進展があれば加筆・修正するかもしれません。


ちなみに。おそらくバグだと思うのですが、ワールドが形成される前にwhite_list=true→sudo ./mc_start.sh→add whitelistをしてwhitelist.jsonにデータを登録しても、どういうわけかクライアントが接続しようとすると「ホワイトリストにいません」となって接続できません。とにかくいちど接続してワールドを形成してからadd whitelistをすると有効になるようです。たぶんオペレータ権限のあるユーザーじゃないとワールド形成できないとかそういうことで、それならエラーメッセージでそういう旨を教えて欲しいですね。「ワールドがありません。ワールドを形成できるのはオペレータ権限のあるユーザーだけです」とか。



サーバー管理メモ
whitelist追加
Minecraft Server コンソールで「whitelist add [ユーザー名]
オペレーター権限のあるプレイヤーが「/whitelist add [ユーザー名]

whitelistから除外
Minecraft Server コンソールで「whitelist remove [ユーザー名]
オペレーター権限のあるプレイヤーが「/whitelist remove [ユーザー名]

オペレーター権限プレイヤー追加
Minecraft Server コンソールで「op [ユーザー名]
オペレーター権限のあるプレイヤーが「/op [ユーザー名]

オペレーター権限プレイヤー取り消し
Minecraft Server コンソールで「deop [ユーザー名]
オペレーター権限のあるプレイヤーが「/deop [ユーザー名]




2016年11月18日加筆
いろいろ検討して考えた結果、そもそも論に行き当たりました。

「実行環境であるJavaが対応してないんじゃないか?」

Javaにはいろいろなバージョンがあります。
勢いで新しいほうがいいだろうとopenjdk-8-jreなんてインストールしてましたけど、その判断がダメで、もっと実績のあるJavaを選ぶべきだったのでは……。

試してみる価値はあると思い、現在のJavaをアンインストールして納得のいくJavaをインストールし直すことにしました。
以下、作業内容です。

sudo apt-get purge openjdk-8-jre…openjdk-8-jreのアンインストール

java -version…アンインストール確認

参考ページ
Setting up a Minecraft server on Google Compute Engine
https://cloud.google.com/solutions/gaming/minecraft-server

sudo apt-get install -y default-jre-headless…default-jre-headlessのインストール

java -version…インストール確認

Javaを入れ替えただけです。
さて。これでどうなるか見てみました。

sudo vi server.properties
online_mode=false → true…オフィシャル認証をON

※推奨設定に戻しました


sudo ./mc_start.sh…Minecraftサーバ起動

GCPでウェブサーバ構築チャレンジ・10【閑話休題】_sb_05.jpg

つながったー! ウシさーん、つながったよー!


サーバのログにも認証サーバーの接続エラーは表示されず、難なくつながりました。
この問題にはかなり頭を悩まされました。
原因はインストールするJavaの選択にあったようです。

あっ、スクリーンショットで体力が減っているのは、ログイン直後にお日様が昇るぐらいの時間帯でして。サーバログに異常がないかどうか確認しているあいだに、ギリギリでスポーンしたゾンビにタコ殴りされたからです。

あわてて逃げ回り、日光で燃え尽きたゾンビがドロップしたゾンビ肉を入手して落ち着いたところでスクリーンショットを撮りました。


≫ NEXT_LOG GCPでウェブサーバ構築チャレンジ・11【移行前夜】

≪ PREV_LOG GCPでウェブサーバ構築チャレンジ・9【閑話休題】(1 photos)

PAGE UP

Google+

スタジオムーンリーフ(2005年1月開設/Since 2005)
代表者:野口 卓洋(Takuhiro Noguchi)
Add:356-0006 埼玉県ふじみ野市霞ヶ丘3-1-22-504

Twitter:@StudioMoonLeaf
Facebook:facebook.com/noguchi.takuhiro


©2017 STUDIO MOON LEAF ALL RIGHTS RESERVED.