ポート転送を使ってMinecraftサーバーをインターネットで公開する方法について調べました。

MinecraftのサーバーをLANで動作させるのは、JDK8のjavaコマンドが実行できる環境を構築してあるなら簡単です。https://www.minecraft.net/ja-jp/download/server/ からJARファイルをダウンロードして、javaコマンドで実行するだけです。

ない場合は、その環境を構築する必要があります。https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server にチュートリアルがあります。64bitの Linux, OpenJDK 8環境が無難です。Oracle JDK8については、最新版を入手するのが大変なので、互換バージョンのOpenJDK8を使うのが良さそうです。

LANで動作できるようにしたMinecraftサーバーをインターネットで公開するには、ブロードバンドルーターのポートフォワード機能を使います。設定方法については、ブロードバンドルーターのマニュアルを確認してください。たとえば、BUFFALO製品なら、 https://www.buffalo.jp/support/faq/detail/8346.html から辿れるはずです。

Minecraftで必要なポートフォワードの情報は https://portforward.com/minecraft/ にあります。日本のブログ情報などでは、25565/TCP だけ開けば良いと書いてあることが多いのですが、それだけでは動きませんでした。

グローバルIPアドレスが固定の環境というのは、家庭用途ではあまりないので、自分の家のブロードバンドルータが使っているグローバルIPアドレスを調べる必要があります。ブロードバンドルータのシステム情報をみるとわかりますが、他にも方法はあって、 https://www.ieserver.net/ や https://www.cman.jp/network/support/go_access.cgi へアクセスするとわかったりします。ダイナミックDNSのサービスなどを使って名前解決をしても良いでしょう。

VPSなどを使っていて固定のグローバルIPアドレスでポート転送ができる環境があるなら、stone ( http://www.gcd.org/sengoku/stone/Welcome.ja.html )をVPSで動かしてポート転送をするという手もあります。

図にすると次のようになります。

Friend HomeからはminecraftサーバーはグローバルIPアドレスのサーバーにあるように見えるのですが、そのサーバー上でstoneを動かすことによって、ポート転送を行い、Server Homeにあるminecraftサーバーが実際には使われることになります。

stoneを使う場合は下記のようなスクリプトを用意しておくとよいでしょう。lastコマンドでSSHログインで接続してきたIPアドレスを取れる前提のスクリプトになっています。実際に使う時は変数ipの取得部分は自分の環境にあたコードへ変更が必要です。

#!/bin/sh
h=$(last|head -1|awk '{print $3}')
ip=$(dig $h| grep $h| grep -v "^;"|awk '{print $5}')
echo $ip
stone ${ip}:25565/tcp 25565/tcp &
stone ${ip}:25565/udp 25565/udp &
stone ${ip}:19132/udp 19132/udp &
stone ${ip}:19133/udp 19133/udp &

こんな感じで、ポート転送を使ってMinecraftサーバーをインターネットで公開することができます。

カテゴリー: ゲーム