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

さくらのクラウドとAWSを拠点間VPNで接続する + さくらからRDSに接続

Last updated at Posted at 2025-12-30

はじめに

これのAWS版でやってみたかったからやりました。

最後にパブリックアクセスがないプライベートなAmazon RDSにVPN経由でさくらのクラウド側から接続します

注意

さくらのクラウド VPNルータとAWSのSite-to-Site VPNは相性が悪いのでしょうか。
私の知識(+ChatGPT5.2先生)ではこれが限界です。

詳しくは最後の補足を読んでいただけたら幸いです。

構成図

aaa.png

  • AWS側
    • VPC10.0.0.0/23
    • サブネット10.0.0.0/24 10.0.1.0/24
  • さくらのクラウド側
    • VPC192.168.0.0/23
    • サブネット192.168.0.0/24 192.168.1.0/24

構築

AWS側の下準備

VPC、サブネット、インターネットゲートウェイのデプロイをいつも通りします。ここでは省略します
スクリーンショット 2025-12-30 201401.png

さくらのクラウド側の下準備

VPNルータ(スタンダード、インターネット有)、スイッチ(ルータなし)、デプロイします。ここでは省略します
image.png

AWS側の設定

カスタマーゲートウェイ作成

  1. 名前に任意の名前を入力
  2. IP アドレスにさくらのクラウド VPNルータのグローバルIPアドレスを入力する
    image.png

他の設定はそのままでOK

仮想プライベートゲートウェイ(VGW)作成

入力するのは名前ぐらいです。他の設定は変えずに
image.png

作成できたらVPCにアタッチしておきましょう。

ルートテーブル設定

さくらのクラウドに転送する宛先IPアドレスはVGWにホップするように設定を入れます

ルート伝搬が有効になっていれば後で設定する静的ルートが降ってきます
image.png

Site-to-Site VPNを作成

さくらのクラウド VPNルータに合わせる
image.png

image.png

名前 任意の名前
ターゲットゲートウェイのタイプ 仮想プライベートゲートウェイ
仮想プライベートゲートウェイ 先の手順で作成したもの
カスタマーゲートウェイ 先の手順で作成したもの
ルーティングオプション 静的
静的 IP プレフィックス さくら側のサブネット(複数可)
事前共有キーストレージ スタンダード
ローカル IPv4 ネットワーク CIDR 0.0.0.0
リモート IPv4 ネットワーク CIDR 0.0.0.0

トンネル 1 オプション - オプション

トンネル 1 の内部 IPv4 CIDR Amazonによる生成
トンネル 1 の事前共有キー 自分で決めても良い ※1
トンネル 1 の詳細オプション トンネル 1 オプションを編集する
フェーズ 1 暗号化アルゴリズム AES128
フェーズ 2 暗号化アルゴリズム AES128
フェーズ 1 整合性アルゴリズム SHA1
フェーズ 2 整合性アルゴリズム SHA1
フェーズ 1 DH グループ番号 2
フェーズ 2 DH グループ番号 2
IKE バージョン ikev1
フェーズ 1 の有効期間 (秒) 28800
フェーズ 2 の有効期間 (秒) 1800
リキーマージン時間 (秒) 270
リキーファズ (パーセント) 100
リキーウィンドウサイズ (パケット) 1024
DPD タイムアウト (秒) 30
DPD タイムアウトアクション クリア
スタートアップアクション 追加

※1 AWS側で自動生成された事前共有キーに記号が含まれていた場合、さくらのクラウド VPNルータに適合しない可能性があります
image.png

トンネル 2 オプション - オプション

どうせ使わないので無視

さくらのクラウド側の設定

VPNルータの設定を入れる

image.png

image.png

対向IPアドレス 先程作成したSite-to-Site VPNのTunnel1に書いている外部IPアドレス
対向ID 先程作成したSite-to-Site VPNのTunnel1に書いている外部IPアドレス
Pre Shared Secret トンネル 1 の事前共有キー
対向Prefix AWSのVPCに設定したCIDR
ローカルPrefix さくらのクラウド側のCIDR

保存して反映ボタンをクリックし、VPNルータの電源を投入します

適当に更新してやればそのうちトンネルがUPになるはずです(遅い)
image.png

image.png

確認

それぞれのサブネットに仮想マシンを建ててPINGやiperf3を実行します

EC2インスタンスのネットワーク情報
ubuntu@ip-10-0-0-88:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 06:d9:46:80:57:1b brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    inet 10.0.0.88/24 metric 100 brd 10.0.0.255 scope global dynamic ens5
       valid_lft 3383sec preferred_lft 3383sec
    inet6 fe80::4d9:46ff:fe80:571b/64 scope link
       valid_lft forever preferred_lft forever
ubuntu@ip-10-0-0-88:~$

ubuntu@ip-10-0-0-88:~$ curl https://ipinfo.io/
{
  "ip": "18.179.8.153",
  "hostname": "ec2-18-179-8-153.ap-northeast-1.compute.amazonaws.com",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP",
  "loc": "35.6895,139.6917",
  "org": "AS16509 Amazon.com, Inc.",
  "postal": "101-8656",
  "timezone": "Asia/Tokyo",
  "readme": "https://ipinfo.io/missingauth"
}ubuntu@ip-10-0-0-88:~$
さくらのクラウド 仮想マシンのネットワーク情報
ubuntu@skic-aws-dx-skvm01:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:33:46:5d brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 133.125.236.131/24 brd 133.125.236.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe33:465d/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:33:b6:b1 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
    inet 192.168.0.1/24 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe33:b6b1/64 scope link
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 9c:a3:ba:33:62:dd brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
ubuntu@skic-aws-dx-skvm01:~$ ip route
default via 133.125.236.1 dev eth0 proto static
10.0.0.0/23 via 192.168.0.254 dev eth1
133.125.236.0/24 dev eth0 proto kernel scope link src 133.125.236.131
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.1
ubuntu@skic-aws-dx-skvm01:~$
ubuntu@skic-aws-dx-skvm01:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:33:46:5d brd ff:ff:ff:ff:ff:ff
    altname enp0s3
    altname ens3
    inet 133.125.236.131/24 brd 133.125.236.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe33:465d/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 9c:a3:ba:33:b6:b1 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    altname ens4
    inet 192.168.0.1/24 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::9ea3:baff:fe33:b6b1/64 scope link
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 9c:a3:ba:33:62:dd brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    altname ens5
ubuntu@skic-aws-dx-skvm01:~$
ubuntu@skic-aws-dx-skvm01:~$ ip route
default via 133.125.236.1 dev eth0 proto static
10.0.0.0/23 via 192.168.0.254 dev eth1
133.125.236.0/24 dev eth0 proto kernel scope link src 133.125.236.131
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.1
ubuntu@skic-aws-dx-skvm01:~$
ubuntu@skic-aws-dx-skvm01:~$ curl https://ipinfo.io/
{
  "ip": "133.125.236.131",
  "city": "Tokyo",
  "region": "Tokyo",
  "country": "JP",
  "loc": "35.6895,139.6917",
  "org": "AS7684 SAKURA Internet Inc.",
  "postal": "101-8656",
  "timezone": "Asia/Tokyo",
  "readme": "https://ipinfo.io/missingauth"
}ubuntu@skic-aws-dx-skvm01:~$

さくら -> AWS

EC2のセキュリティグループにさくら側のサブネットを追加しておきます
image.png

PING

※スクショ取り忘れてました!すいません!

pingとtcpdumpには成功していました!

iperf3で帯域測定

image.png
VPNルータが接続している共有セグメントの帯域である100Mbps近く出ています。いい感じです

AWS -> さくら

PING

image.png
image.png
しっかりVPN経由で流れています

さくら側のもう一つのサブネットである192.168.1.0/24にもPINGしておきます。
仮想マシンやスイッチは高額なので、裏技を使用してVPNルータにIPアドレスをセットしておきました
image.png
image.png
OK!

iperf3で帯域想定

image.png
なぜか100Mbpsを突破しています。まぁいいでしょう

Q. さくら側からプライベートなAmazon RDSは呼び出せるのか?

作成したデータベース

image.png
PINGテストした仮想マシンがあるAZとは違うAZに無料枠のAmazon RDS for MySQLを建てました。
エンドポイントskic-aws-dx-awsrds.cje4y84uyoas.ap-northeast-1.rds.amazonaws.comはAWSの外にあるフルリゾルバでも解決できるのでこのまま使用します。

ubuntu@skic-aws-dx-skvm01:~$ nslookup skic-aws-dx-awsrds.cje4y84uyoas.ap-northeast-1.rds.amazonaws.com 133.242.0.3
Server:         133.242.0.3
Address:        133.242.0.3#53

Non-authoritative answer:
Name:   skic-aws-dx-awsrds.cje4y84uyoas.ap-northeast-1.rds.amazonaws.com
Address: 10.0.1.136

ubuntu@skic-aws-dx-skvm01:~$

接続

ubuntu@skic-aws-dx-skvm01:~$ mysql -h skic-aws-dx-awsrds.cje4y84uyoas.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 8.0.43 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.03 sec)

mysql>

やったぜ

補足

AWS Site-to-Site VPNでは2本のトンネルを確立することが推奨されますが、さくらのクラウド VPNルータは異なるトンネルで同じ対向Prefixを設定できません。
image.png

構築初期はAWSのVPC10.0.0.0/16宛の通信に対して次のような設定をしてトンネルを2本確立していました

  • Tunnel1で10.0.0.0/24 <-> 192.168.100.0/24、192.168.110.0/24、192.168.120.0/24
  • Tunnel2で10.0.1.0/24 <-> 192.168.100.0/24、192.168.110.0/24、192.168.120.0/24

この構成で両方のトンネルが確立できますが、通信がめちゃくちゃになってしまいます。
下のスクショはEC2からVPNを経由してVPNルータのインタフェースに設定したIPアドレスへの接続性をdeadman( https://github.com/upa/deadman )で監視している様子です。
image.png

EC2からVPNルータのインターフェスへの接続性を監視していますが、通信に波が発生していますね。
これでは使い物になりません。
結局ChatGPT5.2先生と相談して次のような構成にすることにしました

  • さくら側のVPNルータで設定するプレフィックスは1対1にすること
  • 単一のトンネルにすること

この構成だと安定して通信できます

まとめ

意外となんとかなりました。たいへんだった。

AWS接続オプションを使いましょう

参考資料

使用させていただきました(神)

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