はじめに
Secure Share Netやngrokなどを使えば、ポート開放なしでMinecraftサーバーを公開できます。
しかし、これらのサービスには帯域の制限やサーバーアドレスが変更されたりといった不便な点があります。
そこで、自分自身でこれを解決する方法を考えることにしました。
環境:
メインサーバー: Windows 11
VPSサーバー: Ubuntu 20.04
参考: https://qiita.com/warai_bukur0/items/1aa97a0f1ea0a028e5e4
注意事項
プレイヤーはVPSを経由するため、ユーザーのIPアドレスがVPSのZeroTiernIPアドレスに置き換わってしまいます。
そのため、IPアドレスを使ったユーザー管理ができなくなったり、セキュリティ面でのリスクが高まります。
したがって、中規模、大規模なサーバーを運営する場合は、VPS上にプロキシサーバーを設置する方が安全です。
導入
1.VPSを借りる
ConoHaを使用します。(安いのでおすすめです)
アカウントを作成したら、VPSを追加しましょう。
今回はUbuntu 20.04を使用します。
サーバー追加 > VPS > Ubuntu > 20.04 (x86_64)

VPSのメモリについて
基本的には512MBで問題なく動作しますが、VPSにプロキシサーバーを設置する場合は1GB以上のメモリが必要になります。
使用するプロキシサーバーの推奨メモリ量を確認しておくと安心です。
2.ポートの設定を行う
セキュリティ > セキュリティグループ > 追加 セキュリティグループ

セキュリティグループ名は分かりやすい名前にしときましょう。
追加 セキュリティグループ > 保存

作成したセキュリティグループ名をクリックして既存の設定を削除してください。
セキュリティグループ名 > 削除ボタン > 決定

開放するポートを追加しましょう。
追加 > 入力 > 決定

私は25565を公開するので以下のように設定します(多分Outの設定は不要です)

VPSに設定を反映します。
借りたVPSを選択してください。
ネットワーク情報 > 編集 > 追加

追加されたセキュリティグループをクリックして作成したセキュリティグループに変更して保存してください。
IPv4v6-SSHも追加してください。
※追加しなくても問題はありませんが、SSH接続に必要です。ConohaのWebコンソールは使いにくいので私は追加しました。

3.ZeroTierでVPNを構築する
ZeroTierは、インターネット越しに仮想のプライベートネットワーク(VPN)を構築できるソフトウェアです。これを使うと、インターネットを介しても、まるで同じローカルネットワーク内にいるかのように、デバイス同士を接続できます。
ConohaのWebコンソールかSSHでVPSに接続してください。
1.サーバーをアップデートします。
sudo apt update
sudo apt dist-upgrade
sudo apt autoremove
2.アカウントを作成してCreate A Networkをクリックしてネットワークを作成してください。
3.ZeroTierをサーバーにインストールします。
curl -s https://install.zerotier.com | sudo bash
4.Network IDに参加します。
"Network ID"は作成したネットワークに置き換えてください。
sudo zerotier-cli join "Network ID"
5.RefreshしてEditをクリックします。

6.Authorizedにチェックを入れてNameをわかりやすい名前(VPSとか)に設定してSaveをクリックします。

Minecraftサーバーを作成したメインサーバー(Windows)にもZeroTierをインストールします。
1.www.zerotier.com/download からインストーラーをダウンロードしてサーバーにインストールします
2.タスクバーにあるZeroTierを右クリックしてJoin New Network...をクリックします。

3.作成したネットワークに参加します。

4.RefreshしてEditをクリックします。

5.Authorizedにチェックを入れてNameをわかりやすい名前(MAINとか)に設定してSaveをクリックします。

4.ファイアウォールの設定をする
ConohaのWebコンソールかSSHでVPSに接続してください。
firewalldのインストールと起動をします。
sudo apt install firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
外部からのポート25565の通信を許可し、指定したIPに転送します。
***.***.***.***はZeroTierに表示されているVPSのManaged IPに変更してください。
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --zone=public --add-port=25565/tcp --permanent
firewall-cmd --permanent --add-forward-port="port=25565:proto=tcp:toport=25565:toaddr=***.***.***.***"
設定を再読み込みします。
firewall-cmd --reload
Windows側もファイアウォールの設定をします。
1.Win + Rを押して出てきたウィンドウにfirewall.cplと入力し、OKをクリックします。

2.詳細設定をクリックします。

3.受信の規則 > 新しい規則...をクリックします。

4.ポート > TCP > 特定のローカル ポート > 25565 > 接続を許可する > プライベート、パブリックにチェック > 分かりやすい名前 > 完了





5.作成したファイアウォールを右クリックしてプロパティをクリックします。

6.詳細設定 > 許可するに変更します。

動作確認
Minecraftサーバーを起動してVPSのIPアドレスをMinecraftに追加して動作するか確認します。
動作しない場合はWindowsとVPSを再起動してください。
sudo reboot
それでも動作しないのであれば私のDiscordに参加してください。
Discord : .r_506
Discord Server : https://discord.gg/v7k2mQEu5j