【夏休みの自由研究リレー】 ゲーミングPCをサーバにする 〜ずっと逃げていたゲームサーバのオンプレ公開〜

【夏休みの自由研究リレー】 ゲーミングPCをサーバにする 〜ずっと逃げていたゲームサーバのオンプレ公開〜

ずっと避けていたゲームサーバのオンプレ公開に向き合ってみました。ゲーミングPCをMinecraftサーバとして立ち上げ、Tailscaleを使ってセキュアに外部ユーザからアクセスできるようにする方法をご紹介します。
2026.08.09

こんにちは、吉田です。
当記事はクラスメソッドの有志による『夏休みの自由研究リレー』 第13回のエントリです。
このブログリレーの企画は、普段からクラウドやAIを追いかけているメンバーによって、「やってみた」だけではなく「作ってみた」や「調査/研究してみた」もアウトプットしてみようという企画です。

新たな知見になることは勿論、アイデアを自社やコミュニティの発展に寄与できればと考えておりますので、お付き合い頂けますと幸いです。
では、さっそくいってみましょう。今回の記事は『ゲーミングPCをサーバにする 〜ずっと逃げていたゲームサーバのオンプレ公開〜』です。

はじめに(発端)

夏は暑い=暑さに弱いヤツ=サーバ
という完璧な三段論法のもと、今年の夏休みはゲームサーバの解放と向き合うことにしました。

私はサーバが必要なゲームで遊ぶときに「誰がサーバを立てるか」という議題が毎回おきます。

そのときに私は「契約の都合でIP解放が無理!(調べてもない)」と言い訳していましたが、
実際に調べてみたら自分の環境で対応可能なことがわかりました。

今まですいませんでした。

言い訳が使えなくなってしまったので、自分がサーバを建てた方法を記していきます。

本記事を作ろうとしたタイミングで、たまたま利用する用途がなくなってしまったかわいそうなゲーミングPCがあったので、
これをサーバとして他のユーザからアクセスできる様にしようと思います。

本記事で取り扱うことについて

取り扱う内容は次のとおりです。

  • Minecraft というゲームをサーバとして建てる
  • プライベートネットワークツールとして Tailscale を利用し、外部からアクセスできる様にする

逆に取り扱わないことについては次のとおりです。

  • Javaのインストール方法

なお、ゲームの詳細は以下を参考にしてください。
Minecraft 公式サイトへようこそ | Minecraft

また、Tailscaleについては以下を参考にしてください。
Tailscale | Secure Connectivity for AI, IoT & Multi-Cloud

前提

以下を前提としています。

  • IP解放は不可能なため、別の手段が必須
  • ローカルだけでなく、外からアクセスすることができる
    • ただし、承認されたユーザのみアクセスを許可する。
    • 他のゲームでもある程度使いまわせる状態を維持する。
      • 色々なゲームを解放したいので
  • サーバは Windows 11 を利用(余っていたもの)

スペック

サーバのスペックです。サーバ運用想定としては過剰ですね。
元々ゲーム用途で使っていたものですが、今は新しいPCを買ってしまったので現状は検証機になってます。

項目
OS Windows 11 Pro
CPU i7-12700
Memory 48GB

Minecraft の導入にあたって

今回導入する Minecraft には Java版(PCのみ) と 統合版(PC,スマホ、PS5など)がありますが、
今回は Java版 を導入します。

Minecraftのバージョンは最新の 26.2 とします。

なお、必要になるJavaはInstall済みです。

> java --version
openjdk 25.0.4 2026-07-21 LTS
OpenJDK Runtime Environment Temurin-25.0.4+7 (build 25.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.4+7 (build 25.0.4+7-LTS, mixed mode, sharing)

Tailscale以外のツールの選定

Tailscale以外にも色々ツールがありますが、

  • 接続ユーザは少数想定
  • Minecraft以外のゲームでもある程度、使いまわしができる
  • Keyを使うならば、漏洩時の対応が簡潔な方が望ましい(SSO等)

ということから、Tailscale を選定しました。
なお、この場合はユーザは最大でも 6名 という制約はあるので、注意してください。

観点 Tailscale ZeroTier playit.gg
得意領域 セキュアなデバイス間接続 仮想LAN構築(Layer 2) ゲームサーバの即時公開
通信方式 WireGuard P2P 直接通信 独自プロトコル P2P 直接通信 リレーサーバ経由
暗号化技術 WireGuard(Linux カーネル採用実績) 独自実装(セキュリティ監査済み) トンネル暗号化
認証の仕組み SSO(Google/MS/GitHub) ネットワークID + 管理者承認 アカウント登録
無料枠の強み 6ユーザー・デバイス無制限 10デバイス・マルチプラットフォーム クライアント側のインストール不要
管理画面 Web UIでデバイス・ACL一元管理 Web UIでネットワーク設定管理 ダッシュボードでトンネル管理
拡張性 ACLポリシーで細かいアクセス制御 Layer 2 でブロードキャスト/マルチキャスト対応 有料プランでカスタムドメイン対応

導入

以下の構成で接続を目指します。
CleanShot 2026-08-09 at 22.26.39.png

全体像

以下の順番でインストールしていきます。

  1. Minecraft Server(Java)の導入
  2. Tailscaleの導入
  3. 接続テスト(動作確認)

1 Serverの導入

必要な工程は次のとおりです。

  1. server.jar の導入
  2. 起動

かなりシンプルです(体感)

サーバ準備

Minecraft サーバー ダウンロード | Minecraft

にアクセス、

CleanShot 2026-08-09 at 19.48.39.png

ハイパーリンクから server.jar をダウンロードし、ファイルを適当なディレクトリに配置します。

CleanShot 2026-08-09 at 19.50.11.png

その後PowerShell等で実行すると、一回目はエラーが起きます。

> cd {server.jarを保存したディレクトリ}
> java -Xmx4G -Xms4G -jar server.jar nogui

~色々出てくる~

[19:52:26] [ServerMain/ERROR]: Failed to load properties from file: server.properties
java.nio.file.NoSuchFileException: server.properties
        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:231)
        at java.base/java.nio.file.Files.newByteChannel(Files.java:357)
        at java.base/java.nio.file.Files.newByteChannel(Files.java:399)
        at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:371)
        at java.base/java.nio.file.Files.newInputStream(Files.java:154)
        at net.minecraft.server.dedicated.Settings.loadFromFile(Settings.java:62)
        at net.minecraft.server.dedicated.DedicatedServerProperties.fromFile(DedicatedServerProperties.java:156)
        at net.minecraft.server.dedicated.DedicatedServerSettings.<init>(DedicatedServerSettings.java:12)
        at net.minecraft.server.Main.main(Main.java:117)
        at net.minecraft.bundler.Main.lambda$run$0(Main.java:54)
        at java.base/java.lang.Thread.run(Thread.java:1474)
[19:52:26] [ServerMain/WARN]: Failed to load eula.txt
[19:52:26] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

EULA関連のファイルが作られているため、そのファイルを開いて、
CleanShot 2026-08-09 at 20.00.22.png

eula = false

から

eula = true

へ変更します。
以下は修正後のファイルの中身です。

CleanShot 2026-08-09 at 20.02.13.png

その後再実行すると、正常に動作していることを示すログが確認できます。

> java -Xmx4G -Xms4G -jar server.jar nogui

~色々出てくる~

[19:56:09] [Worker-Main-14/INFO]: No existing world data, creating new world
[19:56:10] [ServerMain/INFO]: Loaded 1585 recipes
[19:56:10] [ServerMain/INFO]: Loaded 1688 advancements
[19:56:10] [Server thread/INFO]: Starting minecraft server version 26.2

~これ以降も時間経過で色々出てくる~

動作チェック

現時点でちゃんと起動できてるか確認するため、一度同じPCにおいて、クライアントを起動してみます。

画像ではすでに次の手順を終えているのですが、

  1. サーバ情報の入力
  2. アクセス
    という順で作業を行います。
    CleanShot 2026-08-09 at 20.18.27.png

サーバ情報は次のとおりです。同じPC内部でサーバが立ってるだけなので localhost をサーバアドレスに入れます。
CleanShot 2026-08-09 at 20.17.32.png

無事に入れました。特に問題なさそうですね。

CleanShot 2026-08-09 at 20.21.34.png

なおサーバのログを見るとこんな感じで書いてありました。しっかりアクセスできてそうです。

[20:16:32] [User Authenticator #1/INFO]: UUID of player XXX is XXXXXXXXXXXXXXXXXXXXXX
[20:16:33] [Server thread/INFO]: Server empty for 60 seconds, pausing
[20:16:34] [Server thread/INFO]: XXX[/127.0.0.1:49588] logged in with entity id 13 at (186.5, 65.0, -501.5)
[20:16:34] [Server thread/INFO]: XXX joined the game
[20:17:04] [Server thread/INFO]: XXX lost connection: Disconnected
[20:17:04] [Server thread/INFO]: XXX left the game

2. Tailscaleの導入

以下の順で作業を行います。

  1. Tailscaleのインストール+アカウント作成
  2. アクセス制限設定を行う

Tailscaleのインストール+アカウント作成

1で作ったサーバを外部からログインできる様にします。

Download | Tailscale へアクセスして Windows版をインストールします。

CleanShot 2026-08-09 at 20.43.39.png

インストールを行うとログインを求められるためログイン、Connectを行います。
Connect自体は次の画面に進むまで、1分ぐらいかかってました。

CleanShot 2026-08-09 at 20.45.50.png

完了するとデスクトップの方で認証したユーザが表示される様になります。

CleanShot 2026-08-09 at 20.51.20.png

モザイクをかけてしまっていますが、ここに記載のデバイス名もしくはIPv4を用いてクライアント側のユーザからアクセスしてもらう様になります。
後述の手順でも利用するためメモしましょう

This device: {デバイス名} ({IPv4})

Tailscaleのアクセス制限設定

このままの設定だと、クライアント側からサーバ側へMinecraft以外のポートに対してもアクセスできてしまう ので、
Minecraftのみのポートに絞ります。

Tailscale へアクセス、アンケートが出たら適宜対応してください
(2台目のデバイスの箇所はSkipで良いです)

左のサイドバーより次の順でページを遷移、

[Access Control] > [JSON Editor]

以下を追記してSaveをします。フォーマットが多少ずれていても自動補完されます。

 "acls": [
    {
      "action": "accept",
      "src": ["*"],
      "dst": ["{上記でメモしたIPv4}:25565"]
    }
  ],

保存できたらOK、Policiesに設定値が反映されていることを確認しましょう。
以下のようになっていればOKです。

{
    "src": ["*"],
    "dst": ["{上記でメモしたIPv4}"],
    "ip": ["25565"],
}

3. ネットワーク疎通テスト

実際にTailscaleでユーザを招待して、接続してもらいます。

流れは以下の通りになります。
インストールなどは先に済ませてもよいですが、本記事では以下のフローで説明していきます。

CleanShot 2026-08-09 at 22.11.24.png

1. 招待リンクの作成(サーバ側)

[User] > [Invite external users]

の順に進み、Select Roleが Member であることを確認した後に Copy invite link でリンクを作成します。

CleanShot 2026-08-09 at 21.46.58.png

出てきたリンクを招待したいユーザに渡します。
招待リンクは認証情報を含むため、SNSなどの公開の場での共有は避け、信頼できる相手に直接共有することをお勧めします。

2. ログイン・招待を承認(クライアント側)

サーバ側の対応係の人からリンクをもらいアクセス、ログインを済ませると次の画面が表示されますので、Join tailnetを押しましょう。

CleanShot 2026-08-09 at 21.50.54.png

3. 招待を承認(サーバ側)

以下の様にリクエストが届いているので、承認しましょう。
サーバ側としてはこれで作業完了です。
お疲れ様でした。
CleanShot 2026-08-09 at 22.17.18.png

4 - 6 接続まで(クライアント側)

Tailscaleのインストールは上記触れているので詳細は割愛しますが、ダウンロードのリンクだけ置いておきます。

Download | Tailscale

その他の要点としては、モザイクだらけでわかりにくいですが、ConnectDeviceに招待した側と招待を受けた側のメールアドレスが表示されます。
この時は 招待したユーザのメールアドレス をConnectする様にしましょう。
CleanShot 2026-08-09 at 22.22.13.png

あとはサーバ側よりIPv4を受け取り、ゲームを起動、アクセスします。
お疲れ様でした。

CleanShot 2026-08-09 at 22.24.17.png

CleanShot 2026-08-09 at 22.24.43.png
※ローカルで起動時と同じ画像みたく見えますが、別々です。何も考えずに同じユーザでログインしてたので、同じユーザの様に見えてます。

おまけ

他のゲームでサーバを建てたい場合

ポートが同じならばそのままでも良いです
※ただしMinecraftのサーバはクローズしてください

異なる場合は Tailscaleのアクセス制限設定 節で触れた、ポートの数値を調整するだけでOKです。簡単ですね。

だいたい固定のメンバーで遊ぶ時はかなり使えそうです。

他のポートはDenyになっているのか確認する

Minecraft以外のポートがクローズされているかチェックしてみた結果です。
25565 が今回使ったポートですがアクセス成功、
22 など今回許可していないポートは失敗となりました。

CleanShot 2026-08-09 at 22.45.08.png
※Ping自体はACLの枠外なので、アクセスが通ります。

終わりに

今回はずっと逃げ続けていたゲームのサーバを建てて、アクセスしてみました。
他のゲームを解放する際にもアクセス制限のポートを入れ替えるだけで良いので非常に簡単だと思いました。

以上、『夏休みの自由研究リレー』の第13回のエントリ『ゲーミングPCをサーバにする 〜ずっと逃げていたゲームサーバのオンプレ公開〜』でした。

次回は 高里さんの『3DプリンターとAIがあればCAD全くできない民でも自在に造形できるのか』の予定です。お楽しみに!!

この記事をシェアする

関連記事