LoginSignup
0
0

RustのゲームサーバーをDDos攻撃から守るためにTailScaleの後ろに置いた話

Last updated at Posted at 2024-04-27

この投稿について

初めまして。
マルチゲームサーバー 「Nekoniwa-Network」を運営している者です。
今回、サークルの先輩や同期、非常勤の先生など...etc
たくさんの人のお世話になりながら、自鯖を攻撃から守るフロントインフラを構築しました。

これが本当に大変だった。

初めての投稿では、フロントインフラに何を構築したのかを紹介していこうと思う。

なぜTailScaleの後ろに置き始めたのか

まずはこちらを見ていただこう。

image.png

時は2023年5月、午後10時頃の出来事である。
サーバー利用者からこんな連絡が来た。

「サーバーからキックされて繋がらないです...」

その頃はよくサーバー機器に不具合が起きていたので、またサーバーの不具合だろうと思ってブラウザを立ち上げた瞬間、これがサーバーの不具合ではないことが分かった。
ネットにつながらないのである。
断続的に接続が復旧したり切れたり...これはただ事ではないなと思いルーターのFireWallを確認した時の写真がこれだ。
この写真からだとわかりにくいが、複数のIPアドレスからすさまじい数のパケットが飛んできていた。
これが私の初めてのDDos攻撃経験だ。
どうしようもなく、ほとぼりが冷めるのを待つしかなかった。

後日の出来事である。
突然一通の電話が来た。

某P社「プロバイダ会社です。先日すさまじい数のパケットがお宅に集中して、地区の1/3程度のリソースを占めてたんだけど心当たりありますか?」
私「あぁ...攻撃されてた時の話ですかね...」
某P社「たぶんそれです。さて、単刀直入にもうサーバーを起動しないでいただきたい。次同じことが起きたらお宅の回線を停止しますからね。」
私「ワァ...」

と、もう少しちゃんとしたやり取りはあったが、プロバイダーからお叱りを受けてしまった。
何かしら対策をしてもう一度サーバーを起動したい!!と考えていたが、1年はおとなしくサーバーを停止して過ごすことにした。

2024年4月、講義や独学で学んだ内容を使えば、自宅グローバルIPを公開せずパケットもフロントサーバでさばけるのでは...?と思いたったはすぐ行動。
このqiitaの内容につながってくる。

内容

前置きが長くなったが、今回やったことを説明しよう。
image.png
以上が現在のネットワーク構成図である。
(あまり書いたことないので汚くて申し訳ないです...)

簡単に流れを説明する。

1. 接続してくるプレイヤーはさくらのVPSに接続する
2. 特定のPort宛に接続してきたプレイヤーのIPをDNATでさくらのTaleScale IPに流す
3. SNATを使ってカプセル化したグローバルIPをRustサーバのTailScale IP宛に流す
4. RustサーバはTailScaleから来たパケットをPortごとに処理して返答する

これが一連の流れになる。
当初はリバースプロキシを組んですべてをさくらのTailscale IPで処理しようとしていた。
けれど、Rust(EAC)は同じパケットからの接続について解決できるのは1つ迄という制約があるらしい。
ので、SNATで個々のグローバルIPを流してやることで解決した。(この仕様に半日苦しめられた)

こうしたことにより、攻撃を受けた際の受け皿がさくらのVPSとなる。
また、受け渡しはTailScaleを介すので自宅グローバルIPが外に出ていくことはない。

あぁ、なんと素敵なのだろう。

行った設定も簡単で、TailScaleに接続してIPフォワードのルールを組んでUFWルールを設定して...完成!という簡単なものなので、
「DDosが怖い・グローバルIPをSteam(FP)に教えたくない」
という方々はぜひ試してほしい。

また、この構成は自宅がIPoE回線の皆様もサーバーを建てることが出来るやり方なので、Port開放が出来なくて困ってる人も一度試してみてほしい。

さくらのVPSも月額900円程度なので、VTuberにサブスクするよりお手軽にサーバーを作ることが可能だろう。

詳しいやり方や手順については、作ってほしいという声があれば備忘録的に残そうと思う。


スペシャルサンクス: 某仮想化の鉄人先生, konkichiさん, nikkiさん

参考:
https://zenn.dev/heuristics/articles/49b538de8b1701
https://qiita.com/tinoue@github/items/ebcdf5423d87df0ad7cc
https://qiita.com/onodes/items/6c62bd3f1a4d2350f8e8
https://taroline.hateblo.jp/entry/2015/09/01/024702
https://qiita.com/forestsource/items/5f34080658251d74ab2c

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0