Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@SheldonCooper

リバースプロキシを使用して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を使用して本格的に動かしたいと思っているので、また記事にすると思います。
ここまで読んでいただいてありがとうございました。

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
SheldonCooper
将来ネットワークエンジニアになりたいN高3期生(卒業済み)🔰 ラズパイが好き
nnn-school
IT×グローバル社会を生き抜く“総合力”を身につける多様なスキルと多様な体験

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?