3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

月額6ドルから始める簡単AnyCastなGSLB

Last updated at Posted at 2021-10-28

はじめに

備忘録のようなものです。BuyVMは3ロケーションにVPSがあればAnycast IPを無料でAssignしてくれるのでそれを大いに活用して自前で実装してみます。

AnyCastとは?

エニーキャストアドレス(Anycast Address)とは ~ JPNIC

IPアドレスは、一般的に特定のインタフェースへ一意に割り当てて利用します。 この利用形態のIPアドレスをユニキャストアドレスと呼んでいます。
それに対して、エニーキャストアドレスは、 複数のインタフェースに割り当てられたIPアドレスです。

通常、ネットワークに接続されたデバイス間の通信は1対1ですが、AnyCastを用いることで、ネットワーク上の複数のサーバーが同じIPアドレスを使用できます。つまり、クライアントから一番近いサーバーから応答できたりします。最近ではDNSやCDN等で使われてるのをよく見かけます、というか大体これです。トラフィックを分散できるので、DDoS攻撃の対策にもなり得ますし、各国から来るユーザーに対して遅延を減らすなどできます。今回はAnycast IPをDNS(GSLB)にします。

やってみる

1,BuyVMを用意する

上記のサイトからVPSを調達します、2021年10月現在ではLas Vegas,New York,Luxembourg,Miamiのロケーションがありますが、MiamiだけはAnycastを有効化できないので、Miami以外の3つ(LV,NY,LU)だけ調達します。人気の高いVPSなので、在庫切れが多い + スタッフが手動でVPSを有効化するので少し時間がかかる場合があります。

2,Anycastを有効化してみる

3つのロケーションにVPSを持っていると、自動的に"Assign Anycast IP Address"というボタンが表示されるので、これで有効化します。
4a1gc.png
有効化後↓
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f323231363539312f35613562376630392d376331392d313238382d366265362d6131396565646436323137352e706e67.png

各VMでもAnycastが有効化されているかNetworkingタブから確認しましょう。

####VPS側
公式のDocumentがあるので、それを参考にします↓
Frantech/BuyVM Wiki | Anycast IP VPS FREE How-to

基本的にというか普通にAnyCastで割り当てられたIPを各VPSに追加するだけなので、簡単です。
今回はCentOS7を使用するので、nmtuiを使って設定します。

ターミナルにnmtuiと入力し、Edit a connectionを選択します。
6a46h.png

eth0をEditします
rqjze.png

IPv4 CONFIGURATIONをManualに設定し、VPSのIPアドレスとAnyCast用に割り当てられたIPを設定します。
uz6aa.png
GatewayとDNS serversですが、各VMのNetworkingからNetwork Settingを開くことで下の画像のようにInformationが出てくるので、それを設定します。
3qixb.png

これを同様に残りのロケーションにあるVPSでも設定します。
systemctl restart network して設定を反映させます。
試しにAnyCastのIPにPingしてみます。
8ann7.png
ちゃんと応答できていれば成功です。日本からPingするとラスベガスからの応答になるので、他のロケーションからの接続を確認したいときにはcheck-host.netや、ping.peを使うとわかりやすいです。

3,GSLBを実装してみる(gdnsd)

今回はTCP/22番のヘルスチェックで設定しますが、↑の記事にてDNSレスポンスの違いやソーリーサーバーの設定などを説明されているので、詳しく知りたい方はベテランさんの記事を参考にすることをおすすめします。私はド初心者ド素人なので。

####gdnsdをインストールする

この内容については、gdnsdでかんたんGSLB(その1)で以下のように説明されています。

まず、コンパイルに必要なパッケージをインストールします。

$ yum install libev-devel libtool
$ yum localinstall http://netix.dl.sourceforge.net/project/kenzy/special/C7/x86_64/ragel-6.8-3.el7.centos.x86_64.rpm

gdnsdのソースコードを取得し、展開します。

$ wget https://github.com/gdnsd/gdnsd/archive/v2.1.3.tar.gz
$ tar xvfz v2.1.3.tar.gz

コンパイルしてインストールします。

$ cd gdnsd-2.1.3
$ libtoolize
$ aclocal
$ autoheader
$ automake -a -c
$ autoconf
$ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
$ make
$ make install
$ useradd -s /sbin/nologin -r -d /usr/var/run/gdnsd gdnsd

####設定ファイルを作る

1.1.1.a ~ 1.1.1.j を22番のTCPでヘルスチェックする設定です。自分の環境用に書き換えましょう。
listen は AnyCastで割り当てられたIPを書いておきます。
/etc/gdnsd/config

options = {
  listen = [AnyCastのIP]
}
plugins = {
  weighted = {
    test = {
      up_thresh = 0.00000001
      service_types = ssh
      test1 = [1.1.1.a,1]
      test2 = [1.1.1.b,1]
      test3 = [1.1.1.c,1]
      test4 = [1.1.1.d,1]
      test5 = [1.1.1.e,1]
      test6 = [1.1.1.f,1]
      test7 = [1.1.1.g,1]
      test8 = [1.1.1.h,1]
      test9 = [1.1.1.i,1]
      test10 = [1.1.1.j,1]
    }
  }
}
service_types = {
  ssh = {
    plugin = tcp_connect
    port = 22
    interval = 10
    timeout = 5
    up_thresh = 5
    ok_thresh = 3
    down_thresh = 2
  }
}

自分のに置き換える。あらかじめns1.example.comにはAnyCastのIPを設定しておきます。
/etc/gdnsd/zones/example.com

$TTL   86400

@      IN      SOA ns1.example.com mail.example.com (
                    2016030303    ; serial
                    7200   ; refresh
                    30M    ; retry
                    3D     ; expire
                    10    ; ncache
)

       IN     NS     ns1.example.com.

test  10     DYNA      weighted!test

これを各VPSに設定します。

####動作確認
$ /usr/sbin/gdnsd start でgdnsdを起動します。

各VPSのIP:3506 でWebブラウザからgdnsdの動作を確認できます。もちろんAnycastのIPからでも確認できますが、自分から一番近いサーバーのものが表示されてしまうので、各VPSにてちゃんと動作しているか確認します。
b8min.png

NSレコードをこのように設定して
xfgj4.png

check-host.net等でDNSが引けるか確認してみます。
06p32.png

うまく引けてれば成功です。
Minecraftサーバーを運営しており、DDoS対策の一環としてHaproxyやNginx等でリバースプロキシを行う予定です。
このconfigではweightedプラグインを使用して適当にダウン検知してやっていますが、もうちょっと凝った設定がしたい方はgdnsdのDocumentなどを見て書いてみることをお勧めします。

まとめ

さくらのGSLBは登録可能なサーバー数が最大12個だったり、レコードごとに料金がかかったりして、20個以上ある自分にとっては自作する必要がありましたが、特に必要でない限りさくらのGSLBやRoute 53を使った方が安いし安定していると思います。BuyVMがAnycast IPを無料で割り当ててくれましたが、希望すればDDoS ProtectedなAnycast IPも月5ドルでゲットできるので、是非使ってみてください。回し者ではないです。

参考文献

この記事は以下の情報を参考にして執筆しました。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?