2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Tailscaleで実現するAkamai's cloud computing servicesのマルチリージョン接続

Last updated at Posted at 2023-07-19

Akamai's cloud computing servicesのリージョンについて

Akamai's cloud computing servicesのリージョンは世界中に分散しており、執筆時点で14リージョンに展開しています。
リージョンについては拡張していく予定があり、大阪リージョンについての展開計画もあります。

image.png

リージョン間の通信はAkamai Cloud Global Networkを利用して行われますが、一部はインターネット経由となります。
そのため、暗号化して通信を行いたいユースケースがあった際には、以下の記事の方法などでVPN経由にする必要があります。

今回はリージョン間のVPN構築をTailscaleというサービスを利用してフルメッシュのVPNを構築する方法を紹介します。

image.png

Tailscaleとは

Tailscaleは、非常に使いやすくセキュアなクラウド型VPNサービスです。Linuxカーネルにも組み込まれている「Wireguard」をベースに設計されており、ユーザーはアカウントを作成し、端末にクライアントプログラムをインストールするだけでVPNを構築することができます。
TailscaleはHub-and-spokeやMesh networkのVPN構成も取ることができ、様々なユースケースにて利用することができます。

インスタンスの構築とTailscaleエージェントのインストール

今回はTailscaleを利用してAkamai's cloud computing services全リージョンにインスタンスを構築、フルメッシュVPNを接続する構成となります。
インスタンスの構築はTerraformで行い、TailscaleのエージェントもTerraformでインストールします。Tailscaleはエージェントをインストールするだけで、インストールされたインスタンス同士で自動的にVPNが構築されます。

インスタンスはLinode 32GBで構築しています。

image.png

インストール時にはAuthKeyの設定が必要となるため、管理画面から発行します。
https://login.tailscale.com/admin/settings/keys

instance.tf
resource "linode_instance" "vpn" {
  count =  length(var.regions)
  label = "tailscale-multi-${element(var.regions, count.index % length(var.regions))}"
  image = var.vpn.image
  region = element(var.regions, count.index % length(var.regions))
  type = var.vpn.type
  authorized_keys = ["${chomp(file(var.public_ssh_key))}"]

  group = var.vpn.group
  swap_size = 256
  root_pass = random_string.password.result
  private_ip = false

  tags = [ "tailscale" ]

  provisioner "remote-exec" {
    inline = [
      "apt-get update",
      "hostnamectl set-hostname tailscale-multi-${element(var.regions, count.index % length(var.regions))}",
      "curl -fsSL https://tailscale.com/install.sh | sh",
      "tailscale up --authkey ${var.tailscale_auth_key} --hostname=tailscale-multi-${element(var.regions, count.index % length(var.regions))} --ssh",
      "sudo apt-get install -y iperf3"
    ]

    connection {
      type = "ssh"
      user = "root"
      password = random_string.password.result
      host = self.ip_address
    }
  }
}
variables.tf

variable "tailscale_auth_key" {}

variable "linode_token" {}

variable "node_count" {
  default = 1
}

variable "regions" {
  type    = list(string)
  default = [
    "ap-west",
    "ca-central",
    "ap-southeast",
    "us-iad",
    "us-ord",
    "fr-par",
    "us-central",
    "us-west",
    "us-southeast",
    "us-east",
    "eu-west",
    "ap-south",
    "eu-central",
    "ap-northeast"
  ]
}

variable "vpn" {
  default = {
    image = "linode/ubuntu22.04"
    type = "g6-standard-8"
    group = "vpn"
  }
}

variable "public_ssh_key" {
  default     = "~/.ssh/linode/xxxxxxxxxx.pub"
}

resource "random_string" "password" {
  length = 32
  special = true
  upper = true
  lower = true
  numeric = true
}
terraform.tf
terraform {
  required_providers {
    linode = {
      source  = "linode/linode"
    }
  }
}

provider "linode" {
  token = "${var.linode_token}"
}

設定ファイルの記載が完了したら、TerraformをApplyします。

terraform init
terraform apply

以上で構築は完了です。

Tailscaleの接続確認

エージェントをインストールするとVPN用のIPが自動的に割り当てられ、デフォルトでは同じTailscaleのテナント内のインスタンス間のVPNがフルメッシュで接続されています。
管理画面ではエージェントの状況を確認することができます。

image.png

各インスタンスにログインし、statusコマンドを利用することで接続先のIPを確認することもできます。

~# tailscale status
100.96.140.130 tailscale-multi-ap-northeast tenant-id@ linux -
100.127.131.55 tailscale-multi-ap-south tenant-id@ linux idle, tx 436156580 rx 6863116
100.69.216.38 tailscale-multi-ap-southeast tenant-id@ linux idle, tx 635586188 rx 8568644
100.81.195.92 tailscale-multi-ap-west tenant-id@ linux idle, tx 106984948 rx 1747932
100.112.225.130 tailscale-multi-ca-central tenant-id@ linux idle, tx 160458356 rx 2487868
100.108.43.103 tailscale-multi-eu-central tenant-id@ linux idle, tx 121129796 rx 1940716
100.73.169.5 tailscale-multi-eu-west tenant-id@ linux idle, tx 118070468 rx 1119244
100.97.65.44 tailscale-multi-fr-par tenant-id@ linux idle, tx 121937732 rx 2443308
100.125.106.137 tailscale-multi-us-central tenant-id@ linux idle, tx 226397300 rx 3480700
100.109.2.28 tailscale-multi-us-east tenant-id@ linux idle, tx 183259588 rx 2670812
100.92.189.130 tailscale-multi-us-iad tenant-id@ linux idle, tx 185877188 rx 3139132
100.111.41.138 tailscale-multi-us-ord tenant-id@ linux idle, tx 222174772 rx 3116396
100.75.148.69 tailscale-multi-us-southeast tenant-id@ linux idle, tx 199727540 rx 3287516
100.121.93.101 tailscale-multi-us-west tenant-id@ linux idle, tx 296428020 rx 5450572

試しにPingを実行してみると、疎通が取れていることが確認できます。

root@tailscale-multi-ap-northeast:~# ping -c 1 100.69.216.38
PING 100.69.216.38 (100.69.216.38) 56(84) bytes of data.
64 bytes from 100.69.216.38: icmp_seq=1 ttl=64 time=100 ms

--- 100.69.216.38 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 100.262/100.262/100.262/0.000 ms

このようにTailscaleはインストールするだけで、VPNを簡単に構築することができます。

通信速度の測定

TailscaleのVPN経由でTokyoリージョンから各リージョンにPingとiperf3の測定を行いました。

以下はその結果となり、結果の良い順に並べてあります。

現状Tokyoリージョンから一番近く、速度が早いリージョンはMumbaiであることがわかります。

Label City IP Ping (ms) Bandwidth (Mbits/sec)
ap-northeast Tokyo 100.96.140.130 0.065 ms 23637 Mbits/sec
ap-south Mumbai 100.127.131.55 76.260 ms 324 Mbits/sec
us-west San Francisco 100.121.93.101 110.622 ms 218 Mbits/sec
ap-southeast Singapore 100.69.216.38 109.671 ms 220 Mbits/sec
us-central Dallas 100.125.106.137 142.021 ms 166 Mbits/sec
us-ord Chicago 100.111.41.138 143.918 ms 164 Mbits/sec
ap-west Fremont 100.81.195.92 142.604 ms 77 Mbits/sec
us-southeast Miami 100.75.148.69 159.697 ms 147 Mbits/sec
us-iad Washington D.C. 100.92.189.130 168.810 ms 136 Mbits/sec
us-east Newark 100.109.2.28 172.316 ms 134 Mbits/sec
ca-central Montreal 100.112.225.130 192.720 ms 117 Mbits/sec
eu-central Frankfurt 100.108.43.103 245.050 ms 88 Mbits/sec
fr-par Paris 100.97.65.44 245.196 ms 88 Mbits/sec
eu-west London 100.73.169.5 247.916 ms 86 Mbits/sec

執筆時点での測定結果であり、通信速度を保証するものではありません。

各リージョンともにVPNを利用した接続で、安定した速度がでることがわかりました。

まとめ

Akamai's cloud computing servicesは複数のリージョンを提供しておりますが、リージョン間の通信をインターネット経由で行う際には暗号化が必要になるケースがあります。
その際に、Tailscaleなどのサービスを利用することで簡単にVPNが構築することができ、安全なリージョン間の通信を実現することができます。

関連記事

アカマイ・テクノロジーズ合同会社はQiitaでAkamai's cloud computing services関連など開発者向けの記事を掲載しております。

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?