LoginSignup
6

More than 1 year has passed since last update.

Organization

リバースプロキシを使用してDos、DDos対策をしつつ自宅でMinecraftサーバーを構築してみる

前置き

目的
リバースプロキシを使用してVPSをシールドにすることによりDosやDDoSをされた際、自宅のネットワークに負荷をかけないようにします。

VPSはVultrさくらのVPSなどもありますが、今回はクーポンをもらえたのでConoHaを使用します。
また、使用するOSによっては512MBプランや1GBプランでも問題ないと思いますが、今回はUbuntu Desktopを使うので2GBプランを使用します。

使うもの
自宅サーバー
CPU i7 6700K
メモリ 24GB
SSD 240GB
OS Ubuntu 20.04.1LTS

ConoHaVPS
2GBプラン
OS Ubuntu 20.04.1LTS
※今回はテストのためVPSを1つしか使用しませんが、複数のVPSとGeoDNSなどのGSLB(広域負荷分散)を使用することで、1つのVPSがDDosなどでダウンした際に別のVPSを経由してアクセスしてくれるようになります。

準備(VPS)

まず最初にNginxのTCP機能を使いたいのでNginxをビルドします。

ここからリンクを取得してください。
今回は安定版の1.18.0(2020/10現在)を使用します。
※ConoHaの場合はポートが全て開放されている状態なのでgufwやiptablesなどを使用して不要なポートは閉じてください。

sudo apt update
sudo apt upgrade
sudo apt install build-essential
wget https://nginx.org/download/nginx-1.18.0.tar.gz
tar zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --with-stream --without-http_rewrite_module --without-http_gzip_module
make
sudo make install

インストールが完了したらnginx.confを開いて編集をします。

sudo nano /usr/local/nginx/conf/nginx.conf
nginx.conf
stream {
include /usr/local/nginx/conf/minecraft.conf; #ここのコンフィグ名は好きな名前で大丈夫です...①
}

次に設定ファイルを作成して編集をします。

sudo nano /usr/local/nginx/conf/minecraft.conf #minecraft.confの部分はnginx.confで設定した①の名前を使用してください
minecraft.conf
proxy_protocol on;
upstream minecraft { #minecraftの部分は好きな名前で大丈夫です...②
server 転送先のIP:転送先のポート;
}
server {
listen 25565; #ユーザーが接続する時に使うポートにして下さい(今回はMinecraftなので25565を使用)
proxy_pass minecraft; #②の時の名前を使用してください
}

編集が出来たら一度起動してみます。

sudo /usr/local/nginx/sbin/nginx

起動中に設定ファイルを変更してNginxを再起動したい時は以下を実行して下さい。

/usr/local/nginx/sbin/nginx -s reload

起動することができたら次に自宅サーバーで設定を行います。

準備(自宅サーバー)

※今回はSpigotを使用します。バニラのサーバークライアントを使用したい場合は、BungeeCord+VanillaCordを使用してください。

Spigotのインストールをします。
デスクトップにspigotというフォルダを作り、そこにインストールします。

sudo apt update
sudo apt upgrade
java -version
sudo apt install openjdk-11-jdk #javaが入っていない場合に実行してください
mkdir buildtools #かなりのファイルが生成されるので事前にフォルダを作成します
cd buildtools
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

BuildToolsのダウンロードが終わったらビルドします。

java -jar BuildTools.jar --rev latest #特定のバージョンが欲しい場合はlatestの部分をバージョンに変更してください

作成が完了したらspigot-1.16.2.jarを実行します。
※デスクトップにspigotというフォルダを作った後に、spigot-1.16.2.jarを移動させてから実行します。

mkdir /home/username/Desktop/spigot
mv spigot-1.16.2.jar /home/username/Desktop/spigot
cd /home/username/Desktop/spigot
nano start.sh
start.sh
#!/bin/sh

java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui

以下を実行してサーバーを起動し、起動が完了したらサーバーを一度止めます。

sh start.sh
stop

eulaに同意後、再度起動して必要なファイルを作成します。

spigot.ymlのbungeecord: true
server.propertiesのonline-mode=false
にします。
設定が完了したら、一旦サーバーをストップし、BungeeCordのインストール作業に移ります。
※BungeeCordはproxy_protocolの処理に必要なので使用します。

mkdir /home/username/Desktop/bungeecord
cd /home/username/Desktop/bungeecord
wget https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar

ダウンロードが完了したら実行していきます。

nano start.sh
start.sh
#!/bin/sh

java -Xms512M -Xmx512M -jar BungeeCord.jar
sh start.sh

起動が完了したらendで一度停止し、設定ファイルの編集をします。

config.yml
servers:
    address: localhost:25565 #今回はBungeeCordのポートを変更しているのでデフォルトのポートに変更します
listeners:
  proxy_protocol: true
  host: 0.0.0.0:29900 #今回は29900でポートを開放しているので29900に変更します
ip_forward: true

変更ができたら、BungeeCordとSpigotを起動します。

接続

全ての起動が完了したら、Minecraftを起動して接続可能か確かめます。
qiita1.png
qiita2.png
サーバーに接続を押して接続できれば成功です!
お疲れ様でした!

感想

構想をしてから数ヶ月の間試行錯誤をしてようやく完成したので、接続ができたときはかなりの達成感がありました。
来年には複数のVPSとGSLBを使用して本格的に動かしたいと思っているので、また記事にすると思います。
ここまで読んでいただいてありがとうございました。

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
What you can do with signing up
6