この記事はConoHa Advent Calendar 2024の8日目です
ConoHaVPSを使ってオンプレミス(ローカル)サーバーを外部公開します。
はじめに
昨今ではIPv6のみの接続環境「v6プラス」接続が増えてきました
IPv4が枯渇してきていたりPPPoEv4が遅かったりとv6で接続するメリットの恩恵を受けることができていたりします
ただ、デメリットとして任意ポートの公開ができない、ローカルサーバーがIPv4で外部公開できない
といった問題が出てきたりします。
今回はv6プラス環境内のLANにマイクラJEサーバーを建てて外部(友人等)から接続できる環境を構築していきます
環境
- ローカル
- Ubuntu 22.04
- Java 21 (minecraftが動けばいい)
- Conoha VPS
- 512MB プラン
- nginx & nginx stream
- Version 3
- tailscale
- Personal(無料)プラン
今回の環境特性上
IPはほぼ固定となり月額300円~でグローバルIPを持つことができます
ローカルサーバー構築
今回ローカルマシンとしてUbuntu 22.04
で構築していきます
さらっと
Java用意してマイクラサーバー建てて接続できることを確認します
マイクラJEサーバー
https://www.minecraft.net/ja-jp/download/server
$ sudo apt install openjdk-21-jdk
$ mkdir minecraft
$ cd minecraft
$ wget https://↑のminecraft_server.x.xx.xx.jarのURL/server.jar
$ java -Xmx1024M -Xms1024M -jar server.jar nogui
いつも通り同意を求められるのでeula.txtの中をtrue
$ vi eula.txt
んで再度起動。
$ java -Xmx1024M -Xms1024M -jar server.jar nogui
ひとまず起動
[15:51:50] [Server thread/INFO]: Starting minecraft server version 1.21.4
[15:51:50] [Server thread/INFO]: Loading properties
[15:51:50] [Server thread/INFO]: Default game type: SURVIVAL
[15:51:50] [Server thread/INFO]: Generating keypair
[15:51:50] [Server thread/INFO]: Starting Minecraft server on *:25565
[15:51:50] [Server thread/INFO]: Using epoll channel type
[15:51:50] [Server thread/INFO]: Preparing level "world"
[15:51:50] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld
[15:51:53] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[15:51:53] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[15:51:53] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[15:51:53] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[15:51:53] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[15:51:53] [Worker-Main-2/INFO]: Preparing spawn area: 0%
[15:51:53] [Server thread/INFO]: Time elapsed: 2863 ms
[15:51:53] [Server thread/INFO]: Done (3.143s)! For help, type "help"
そしてマイクラクライアントから
ローカルIPを指定して追加、接続を行います
マイクラサーバーはstopで止めておきましょう
VPS構築
VPS起動
ひとまず512MBプランで建てます
Debianで建てちゃいましょう
今回SSHは使う想定ではないので使用しない
セキュリティグループは後で設定します
セキュリティグループ
起動を待っている間にネットワーク設定(セキュリティグループ)を設定しましょう
VPS設定
セキュリティグループをVPSに割り当てます
ConoHaコンソールから今回建てたサーバーを選択し、
セキュリティグループを変更します。
編集状態にし、
defaultを先ほど作ったマイクラ設定に変更します
そして保存。
VPS内設定
立ち上げ直後なので
# apt update && apt -y upgrade && reboot
今回はプロキシにnginxのストリームプロキシを使うので
nginxと必用なモジュールをインストールします
また、後に必要になるcurlも入っていないのでインストールします
# apt install nginx libnginx-mod-stream curl
tailscale
アカウント作成、ログイン
https://tailscale.com/
へアクセスしアカウントを作成、ログインします。
インストール
続いて
https://tailscale.com/download
こちらから
Linux→Debian12を選択してインストールスクリプトを表示させます
表示された①のテキストを
ConoHaVPS内のコンソールに貼り付けます
※テキスト送信を使いましょう
②を実行しインストール。
$ sudo apt update
$ sudo apt install tailscale
③でtailscaleを起動します
$ sudo tailscale up
起動するとログイン用のURLが発行されます。
残念ながらConoHaコンソールからテキストをコピーすることができないので
ブラウザに手打ちしましょう
ドメイン部分のコピペ用
https://login.tailscale.com/~~~~
Connectを押してしばらくすると
successとなります
④を打ち込むと tailscaleVPN内のIPが取得できます
tailscale ip -4
ローカルサーバーにインストール
マイクラサーバーが建った方にも同じようにtailscaleをインストールします
こちらはUbuntuで建てたのでインストールコマンドのディストリビューションを変更してコピペして
インストールします
それぞれのコマンドをコピペせずとも
一括インストールシェル。↑の手順じゃなくこれでいい気がします。
curl -fsSL https://tailscale.com/install.sh | sh
手順は割愛
ローカルサーバーから tailscale ip -4
し、
出てきたIPアドレスまたはマシン名をConoHaVPS側からpingしてみます
疎通できました。
ConoHaVPSからローカルマシンへ
nginx の設定を行っていきます
プロキシ設定の追加
# mkdir /etc/nginx/stream.d
# vi /etc/nginx/stream.d/minecraft.conf
転送先もIPまたはマシン名を入れます。
upstream mcserver {
server local-minecraft-server:25565;
}
server {
listen 25565;
listen [::]:25565;
proxy_pass mcserver;
}
プロキシ設定を読み込むよう設定
# vi /etc/nginx/nginx.conf
以下を追加
stream{
include /etc/nginx/stream.d/*.conf;
}
nginxを(再)起動します
systemctl restart nginx
ここでエラーが出る場合
confファイルの記述ミスや
libnginx-mod-stream
をインストールし忘れている可能性があります
nginxが起動したら
ローカルサーバーのマイクラサーバーを起動し、
ConoHaVPSのIPに向かってマイクラクライアントから接続してみます
無事繋がりました。
これで外部からローカルサーバーへのアクセスができるようになりました
その他
セキュリティについて
ごく当たり前な話ですが
tailscal VPN内のセキュリティには注意してください
ConoHaのセキュリティグループの開放ポートも最低限の物にし、
マイクラサーバーも極力最新にしセキュリティバグ修正済みの物を利用してください
SSH等
ConoHaVPSがtailscaleに接続している場合
同じtailscaleに接続しているマシンからVPSへは全ポート開放状態となります
ConoHaのセキュリティグループはVPSと外部との間を制御しています
tailscaleは裏口となるためセキュリティグループ適用外となります
ログ
マイクラへのログインログは
VPSのtailscaleのIPアドレスが記録されます。
そのためIPアドレスによる見分けができなくなります。