さくらのGSLB上の登録アドレスを死活監視に応じて動的にコントロールするスクリプトを書いた
ご無沙汰しております。unchamaです。
前回の記事を書いてから早くも3ヶ月がたってしまいました。時が経つのははやいものですね…
以前の記事ですが、内容が内容だけにいろんな方から反響をいただきました。自分の考えた対策法に対してすげぇって言ってもらえるのは素直に嬉しいですよね。Twitterでリプ+空リプしてくださった皆様などなど、読んでいただきありがとうございました。
あと、これは予想通りの反響といえばそうなのですが、DDoS攻撃の頻度が明らかに増えました。特に先月(2018年4月)は本当にひどくって、ほぼ毎日襲来していました。中には100Gbps超級の攻撃の観測もあったので普通にドン引きしています。
その時点では、国内のvps*1が落とされた時は海外のDDoS Protection付vps*2を経由するようGSLBのレコードをさくらのクラウドAPIで動的に書き換えていました。ただ攻撃の頻度が増したことで、通信が海外経由になってしまう時間が増えてしまい、プレイの際の通信ラグの影響がだんだん無視できなくなってきてしまいました。またvultrのDDoS Protectionは10Gbpsまでしか対応していないため、それを超える攻撃を受けると通信遮断(null route)されてしまうこともわかりました。*3
これは別サービスを検討しないとな〜と考えていたわけですが、 色々あって*4気が付いたら金で殴るインフラを契約してしまっていました。GCP(Google Cloud Platform)というやつです。結果として、上述の挙動はかなりマシになりました。さすが天下のgoogleという感じがします*5。詳しい挙動は気が向いたらまた書こうかと思います。
さて、まさかのここから本題なのですが、前回の記事でさくらのGSLB上のIPを動的に書き換えることができると述べた点について、具体的にどうやっているのかについて触れていきたいと思います。
さくらのクラウドにはさくらのクラウドAPIなるものが提供されています。これをつかうことで、さくらのクラウド内の様々なリソースを追加、削除、編集することが可能です。ドキュメントはこちら。
ざっくりいうとプログラムを使って、特定のURLに対して、やってほしいこと(情報の取得だとか、変更だとか、削除だとか)を書いたjsonと自らを証明するシークレットキーを一緒に送ってやることで、GUIを経由せずともリソースの設定情報の自動書き換えが可能になるわけです。かがくのちからってすげー!
参考までに、整地鯖で以前使っていたシェルスクリプトのソースコードを以下に貼っておきます。ざっくりいうとやっている内容は以下の通りです。
・結果からGSLBに登録するIPのリストを生成する
・リストを使ってjsonを作る
・curlで送信する
・処理結果に異常が見られた場合、Disordに通知しておく
実際に使う際は、APIのシークレットキーやGSLBのアプライアンスID、Discordのwebhookアドレスなどなどを取得する必要がありますのでご注意ください。
あとは、cronで数分おき*6に回すようにしておけば、あとは死活状況に応じて動的にGSLBを書き換えてくれるようになります。
みなさんの参考になれば幸いです。
gist44dbcb21f4545c18993acce8c919c21e