ちょっと話題の記事

1つのグローバルIPで複数VPCとVPN接続してみた#reinvent

2015.10.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

これまではこちらにあるように、 1つのカスタマーゲートウェイと複数のVPC間でVPN接続する際、 コネクションごと(=VPCごと)にグローバルIPアドレスが必要でした。

Additional Considerations IPSec requires that each VPN connection have a unique, publicly routable IP address. Therefore, a single customer gateway connecting to multiple VPCs requires a public IP address for each connection.

VPN機能がアップデートされ、カスタマーゲートウェイの同じIPアドレスを使いまわせるようになりました。 というわけで、実際に試してみました。

検証環境

EIPを1つだけ持つVyOSで、2つのVPCとVPN接続を行います。 VyOSを経由して、APサーバ間でpingの疎通が出来る状態にします。

検証環境構成図

手順

事前準備

図の通りにVPC,Subnet,APサーバを作成してください。

VyOS作成

VyOSのAMI(ami-d18cb2d0)を利用しました。 インスタンス作成後、EIPを付与してください。インスタンスにはvyosユーザで接続することが出来ます。

$ ssh -i [AMI作成時に指定した鍵].pem vyos@EIP

VPN接続セットアップ(VPC-A〜VPC-B)

まずは、VPC-AとVPC-B間でVPN接続を行います。 AWSコンソールからVPC画面を開きます。

カスタマーゲートウェイを作成します。 左メニュー[Customer Gateways]を押下し[Create Customer Gateway]を選択します。 IPアドレスはVyOSに割り当てたEIPを入力してください。

VPC_Management_Console3

VirtualPrivateGatewayを作成します。 左メニュー[Virtual Private Gateways]を押下し[Create Virtual Private Gateway]を選択します。

VPC_Management_Console3_5

作成後、[Attache to VPC]を選択し、VPC-Bにアタッチします。 VPC_Management_Console3_6

VPN Connectionを作成します。 左メニュー[VPN Connections]を押下し[Create VPN Connection]を選択します。 VPGとCustomerGatewayは、先ほど作成したものを選択します。

VPC_Management_Console4

VPN Connectionの作成にはしばらく時間がかかります。 作成完了後、[Download Configuration]を選択しVyOSに設定する内容をダウンロードします。

VPC_Management_Console5

ダウンロードした設定のうち、下記行を変更します。 また、ダウンロードした設定には重複する箇所があるため重複箇所を削除します。 (同じ設定を投入すると、エラーメッセージが表示されます。)

◇ 変更前 set vpn ipsec site-to-site peer ***** local-address VyOSのEIP

◇ 変更後 set vpn ipsec site-to-site peer ***** local-address VyOSのプライベートIP

VyOS設定

・設定投入 VyOSにSSH接続後、configureコマンドを実行し用意しておいた設定をコピー&ペーストします。 「commit」コマンドにて、設定を反映します。

vyos@VyOS-AMI:~$ configure 
[edit]
vyos@VyOS-AMI#

・送信元/送信先チェック無効化 こちらを参考に、送信元/送信先チェックを無効にします。

ap-aサーバ設定

ap-aサーバのルーティングテーブルを設定します。宛先VPC-BとVPC-Cについて、VyOSを設定します。 icmpが通るようにセキュリティグループも設定しておきます。

VPC_Management_Console10

ap-bサーバ設定

ap-bが配置されているサブネットのルートテーブルの設定を行います。 ルートテーブルを選択し、[Route Propagation]タブを選択します。 Editを押下しルート伝達を有効化します。 VPC_Management_Console11

ルートテーブルにVPG宛てのルーティングが追加されます。 icmpが通るようにセキュリティグループも設定しておきます。

VPC_Management_Console13

VyOSバージョンアップ

以上の作業で、ap-aからap-b宛てのpingが通るはずです。 が、届きませんでした。。。 こちらの記事を確認させていただいたところ、VyOSの1.1.0と1.1.1にバグがあるとのことでした。

今回利用したAMIはバージョン1.1.0ということで、最新版へのバージョンアップを行いました。

vyos@VyOS-AMI:~$ add system image http://packages.vyos.net/iso/release/1.1.6/vyos-1.1.6-amd64.iso
Trying to fetch ISO file from http://packages.vyos.net/iso/release/1.1.6/vyos-1.1.6-amd64.iso
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  234M  100  234M    0     0  1720k      0  0:02:19  0:02:19 --:--:-- 2603k
ISO download succeeded.
Checking for digital signature file...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   836  100   836    0     0   1414      0 --:--:-- --:--:-- --:--:--  2714
Found it.  Checking digital signature...
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: Signature made Mon Aug 17 05:00:14 2015 UTC using RSA key ID A442E6E9
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: Good signature from "SO3 Group Maintainers <maintainers@so3group.net>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: DD5B B405 35E7 F6E3 4278  1ABF B744 E25A A442 E6E9
Digital signature is valid.
Checking MD5 checksums of files on the ISO image...OK.
Done!
What would you like to name this image? [VyOS-1.1.6]: 
OK.  This image will be named: VyOS-1.1.6
Installing "VyOS-1.1.6" image.
Copying new release files...
Would you like to save the current configuration 
directory and config file? (Yes/No) [Yes]: 
Copying current configuration...
Would you like to save the SSH host keys from your 
current configuration? (Yes/No) [Yes]: 
Copying SSH keys...
Setting up grub configuration...
Installing on VyOS AMI
Done.
vyos@VyOS-AMI:~$ show system image 
The system currently has the following image(s) installed:

   1: VyOS-1.1.6 (default boot)
   2: 1.1.0 (running image)

vyos@VyOS-AMI:~$ reboot
Proceed with reboot? (Yes/No) [No] y

バージョンアップ後、ping疎通OKとなりました。

VPN接続セットアップ(VPC-A〜VPC-C)

・Virtual Private Gatewayの作成 Virtual Private Gatewayを作成し、VPC−Cにアタッチします。 VPC_Management_Console9

・VPN Connectionの作成 VPGは先ほど作成したものを選択します。 カスタマーゲートウェイは、1つ目のVPN接続に使用したものを選択します。

・コンフィグダウンロード コンフィグをダウンロードし、以下の通り変更します。 VyOSのEIPをVyOSのプライベートIPに置き換えます。 コンフィグ中のvti0をvti2に置き換えます。 コンフィグ中のvti1をvti3に置き換えます。 1つ目のVPN設定と重複する設定を削除します。

変更後、VyOSに設定を投入します。

・ap-cサーバ設定 ap-bと同様の設定を行います。

疎通試験

ap-aから、ap-bとap-cにpingを送信しました。

$ ifconfig | grep "inet addr"
          inet addr:192.168.1.189  Bcast:192.168.1.191  Mask:255.255.255.192
          inet addr:127.0.0.1  Mask:255.0.0.0
$ ping 172.16.1.97
PING 172.16.1.97 (172.16.1.97) 56(84) bytes of data.
64 bytes from 172.16.1.97: icmp_seq=1 ttl=62 time=3.70 ms
64 bytes from 172.16.1.97: icmp_seq=2 ttl=62 time=3.54 ms
^C
--- 172.16.1.97 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1444ms
rtt min/avg/max/mdev = 3.540/3.623/3.707/0.102 ms
$ ping 172.17.1.83
PING 172.17.1.83 (172.17.1.83) 56(84) bytes of data.
64 bytes from 172.17.1.83: icmp_seq=1 ttl=62 time=6.09 ms
64 bytes from 172.17.1.83: icmp_seq=2 ttl=62 time=5.28 ms
^C
--- 172.17.1.83 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1963ms
rtt min/avg/max/mdev = 5.287/5.690/6.093/0.403 ms
$

おわりに

グローバルIPアドレスを複数用意する必要がなくなったことが確認できました。 オンプレミスではグローバルIPを気軽に増やすことは難しいと思いますので、とても便利になったと思います。