0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI + リモートポートフォワーディングでマインクラフトサーバを公開

Last updated at Posted at 2025-11-02

この記事で書くこと

OCI のalways free を踏み台として、ローカルコンテナのマインクラフトサーバを安全に公開する方法
コレシリーズの第二弾:https://future-architect.github.io/articles/20250623a/

背景・課題設定

子供がマインクラフトをやっていると、割と大変な要求が気軽に飛んでくる事ありませんか?

  1. 友達4人でmod入れて遊びたい!
  2. PCは親のモノで、持ってくる事は出来ないからオンラインでやりたい!

2の要件があるので、基本的には以下の2択になります。

  • マルチプレイ用のVPSサービスにサーバを立てる
  • GoogleCloudなど、internetで接続できる箇所にサーバを立てる

1の要件により、サーバスペックが必要になってしまうので、無償でやるには厳しいです。割と重たい事ですが、フツーに気軽に要望が飛んできます
そこで、この記事の方法を考案しました

構成図

さて、という事で、みんな大好き構成図です
qiita_mc_1.png

考え方

  • Global IPアドレスを持つOCIで、玄関の機能だけを持ってもらう
  • マインクラフトのサーバはローカルに立ててスペックは動的に確保する

主たる要素

  • mine craft のサーバはセキュリティのためにコンテナで立ち上げています(私のPCは3重構造です)
  • OCIのalways freeのVMを踏み台にしています
    • 本当はA1インスタンスを立てられれば苦労しないんですが、争奪戦には勝てません
    • この記事が参考になります
  • クライアントからの接続方法は、子供が操作するわけなので、通常のマルチプレイサーバに入るのと同じやり方にするため、ssh remote port forwardingを採用

実装

minecraft container

  • コンテナは、こちらを使用します
  • 鬼滅の刃modを入れたい、という事でこの2つを選択
  • 基本的にmodで遊ぶ場合は、1.16.5を選択するのが安パイだと思います、対応しているmodが多い
tree
mine_craft_docker
|--compose.yaml
|--mc_data
|  |--minecraft_server.1.16.5.jar
|  |--forge-1.16.5-36.2.34.jar
|  |--mods
|  |  |--KimetsunoYaiba_1.16.5_ver39.2.jar
└  └  └--advanced-xray-forge-1.16.5-2.7.0.jar
compose.yaml
services:
  mc:
    image: itzg/minecraft-server:java8 # For forge 1.16.5
    tty: true
    stdin_open: true
    ports:
      - "25565:25565"
    environment:
      EULA: "TRUE"
      TYPE: FORGE
      VERSION: "1.16.5"
      FORGE_VERSION: "36.2.34"
      # ホワイトリストを有効にする
      ENFORCE_WHITELIST: "true"
      # ホワイトリストに登録するプレイヤー名(カンマ区切り)
      WHITELIST: "son,friend1,friend2,friend3"
      # OP権限(管理者権限)を付与するプレイヤー名
      OPS: "son"
      # クリエイティブモードなどでの飛行を許可する
      ALLOW_FLIGHT: "true"
    volumes:
      # attach the relative directory 'mc_data' to the container's /data path
      - ./mc_data:/data

Gemini code assistamazon Q developerなどの無料の生成AIに手伝ってもらえば簡単にyamlは書けます

OCI

  • VPCやSL、ルーティング関連は省略します、VMにsshログイン出来て、apt updateが出来る事、後は25565ポートが外から疎通可能であれば大丈夫です
/etc/ssh/sshd_config
以下の3行を有効化
GatewayPorts yes
AllowTcpForwarding yes
ClientAliveInterval 600
  • OCIでは(?)iptablesによって、ssh以外は遮断されてしまうので、許可する必要があります
iptablesに追加
sudo iptables -I INPUT 4 -p tcp --dport 25565 -j ACCEPT
iptables確認
ubuntu@nsd-test-vm-01:~$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     0    --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     1    --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     0    --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     6    --  0.0.0.0/0            0.0.0.0/0            tcp dpt:25565 ← これを追加
ACCEPT     6    --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     0    --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

ローカルVM

  • 最後に、sshでリモートポート転送すれば終わりです
  • コマンドは、コンテナの中ではなく、linuxのVM上で実行しています
ssh -i ~/.ssh/oci_ssh_key -NR 25565:localhost:25565 ubuntu@[oci VM gip]

Mine_craft クライアント

  • 私自身はマインクラフトやってないのであまり詳しくはわかりませんが、mod含めたバージョンはサーバ側と完全に同期しておかないとエラーで止まります。
  • コンテナ起動の際に格納しておいた各種modのバイナリとバージョンは合致させています
    02_mod_setting.png

動作確認

  • マインクラフトを開いて動作確認すると、正常に動作します
    01_connect2server.png
  • OPS権限を子供に与えているため、子供はgamemodeの変更が可能です
    03_change_to_creative.png

各種動確用コマンドメモ

  • OCIのVM側
sudo lsof -i | grep sshd -> sshができていることの確認
netstat -lt | grep 25565 -> ポートが 0.0.0.0:25565 で listen できていることの確認
  • ローカルVM側
ps -aux | grep ssh -> ssh の remote port-forwarding が正常に動作しているか
netstat -lt | grep 25565 -> コンテナが立ち上がり listen 出来ているか
  • 疎通を見るのは、ncコマンドが良いです。任意のPCからMCサーバに接続可能かどうかを確認
nc -v -w 1 [ociのVMのグローバルIPアドレス] 25565

ちなみに

  • 普通に OCI の踏み台 VM に mine craft サーバ立てるとハングします。CPUもメモリも足りない
    2025-11-01 201700.png
    2025-11-01 201738.png
  • ubuntu の VM のスペックはこの程度。動的に変更は可能
    image.png
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?