#前置き
目的
リバースプロキシを使用して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
stream {
include /usr/local/nginx/conf/minecraft.conf; #ここのコンフィグ名は好きな名前で大丈夫です...①
}
次に設定ファイルを作成して編集をします。
sudo nano /usr/local/nginx/conf/minecraft.conf #minecraft.confの部分はnginx.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
#!/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
#!/bin/sh
java -Xms512M -Xmx512M -jar BungeeCord.jar
sh start.sh
起動が完了したらendで一度停止し、設定ファイルの編集をします。
servers:
address: localhost:25565 #今回はBungeeCordのポートを変更しているのでデフォルトのポートに変更します
listeners:
proxy_protocol: true
host: 0.0.0.0:29900 #今回は29900でポートを開放しているので29900に変更します
ip_forward: true
変更ができたら、BungeeCordとSpigotを起動します。
#接続
全ての起動が完了したら、Minecraftを起動して接続可能か確かめます。
サーバーに接続を押して接続できれば成功です!
お疲れ様でした!
#感想
構想をしてから数ヶ月の間試行錯誤をしてようやく完成したので、接続ができたときはかなりの達成感がありました。
来年には複数のVPSとGSLBを使用して本格的に動かしたいと思っているので、また記事にすると思います。
ここまで読んでいただいてありがとうございました。