◎ はじめに

  • 顧客オンプレミス環境とAWS VPCをVPN接続するという案件があり、
    その案件に着手する前にVPN接続をおさらいしようと思い、自身の環境で確認してみました。

検証に際して、オンプレミス側ルータをどうしたものかと迷っていましたが、
ソフトウェアルータVyattaを試してみたいと考えていたことを思い出し、そちらを利用し同じAWSアカウント内で検証環境を作ってみました。

◎ 今回の目標

  • 主な目的は上述のとおりですが、今回は検証ということで

Tokyo RegionのVPC内Windows Server と
London RegionのVPC内Windows Server が VPN経由でRDP接続出来るようしてみました。
ちなみにLondon側がオンプレ(Customer Gateway配置)を想定という構成になります。

想定構成図

◎ 検証環境

  • Windows_Server-2016 (Tokyo、Londonともに)
  • VyOS version 1.1.7 (公式安定版とのことより)

▽備考

  • VPCおよびSubnetの設定はほぼほぼデフォルト

◎◎ VyOSとは

■概要
https://wiki.vyos.net/wiki/日本語版より引用

VyOSは、Vyattaから派生したオープンソースのネットワーク・オペレーティング・システムで、ソフトウェアベースのルーティング、ファイアウォール、VPNなどの機能を提供します。

大雑把に言えば、買収後VyattaはVyOSと名称を変えリリース継続しているとのこと。
そんなことも知らずにインフラ・エンジニア名乗っている私。。反省。

  • そんなわけで
    上述のサイトをざっと読んだところ、名称は違えど基本的にソフトウェアルータ機能があることは変わらず、 AWS Market PlaceではVyOSを含んだAMIが発売され EC2をサポートしているとのこと。そして、AWS VPNのConfiguration一覧にVyattaとあることより、そのまま使えそうと思いCustomer Gateway(ルータ)としてVyOSを利用してみました。

◎ 参考資料

◎◎ 備考

  • 本件を調査してみると同様の構成を試されている方がすでに沢山いらっしゃいました。

二番煎じ感は否めないですが、実装に際して困った箇所をどう対処したかを記載しましたので、そちらが参考になれば幸いです。

◎ 実装

01. VPCおよびSubnetの定義

  • Tokyo側はVPC 「10.0.0.0/16」

そこにSubnet 「10.0.1.0/24」 と 「10.0.2.0/24」を切っています。

  • London側はVPC 「172.31.0.0/16」

そこにSubnet 「172.31.0.0/20」 と 「172.31.16.0/20」となっています。
こちらはデフォルトVPC/Subnetとなり、東京側と被っていなかったためそのまま使用しました。

■補足

  • 障害時Remoteから操作することを考え、全てPublic Subnetとしています。その代わりSecurity Groupでアクセス制限をキッチリやっています。

02. Windows Server用意

02-1. Launch

  • 特に拘りはなかったため、Launch時に選択出来る AMI 「Microsoft Windows Server 2016 Base」から、Windows Serverを両regionに起動しました。

02-2. Security Group設定

  • 対向からRDP接続出来るようにSecurity Groupを設定
    ※疎通確認のため、pingも許可しています。

// 東京側

// London側

02-3. Firewall設定(任意)

  • 疎通確認のため両インスタンス間でpingを実行する場合、FirewallにてICMP疎通許可を設定する必要があります。
  • 設定手順
    [ServerManager] – [Local Server] – [Windows Firewall]
    [Advanced Settings] – [Inbound Rules] – [File and Printer Sharing (Echo Request – ICMPv4-In)] → [Enable Rules]
    ※ Remote Desktop関連はデフォルトで許可されているため、設定の必要はありませんでした。

03. オンプレミス側ルータ(VyOS, Customer Gateway)の準備

03-1. Customer Gateway launch

  • AWS Marketplace にて「VyOS」で検索
    VyOS最新版(安定)1.1.7のAMI(Linux)からEC2 Launch
    → 一応、本番時を想定してグローバルIP(EIP)を付与しました。

03-2. 送信元/送信先チェックを無効にする

  • パケットを透過させる必要があるため、該当機能を無効にします。

設定方法等は下記公式ドキュメントを参照下さい。

03-3. Security Group設定

★ココでハマりました。

  • VPNの設定が全て完了後、本インスタンスのSecurity Groupは何も設定していなくとも
    東京からLondon(Customer GW)側の各インスタンスへの疎通が出来るのに対し、逆の通信が出来なかったからです。

対処としては、Customer GW側のインスタンスが対向のインスタンスと疎通出来るよう、
本インスタンスのSecurity Groupを解放する必要がありました。

04. VPN設定

04-1. Route Tableの設定

Routing先が決まったので、下記のように設定しました。
シンプルな内容としています。

// 東京側

// London側

04-2. Virtual Private Gatewayの設定

  • AWSコンソールにて [Services] – [VPC]より、ボタンをポチポチとやって作成。その後該当VPCにアタッチします。

04-3. VPN Connectionの設定

  • こちらもAWSコンソールよりCreateします。

設定値は後述のとおり。今回はstaticではなくBGPを利用してみました。

Name: vpcconn-tokyo2london
Virtual Private Gateway: <先に作成したものを選択>
Customer Gateway: [New] を選択 ※Customer Gatewayはこの時点でも作成可能
IP Address: <Customer GatewayのパブリックIP(EIP)設定>
BGP ASN: 65000 ※今回はデフォルト値を利用しました
Routing Options: Dynamic

04-4. Customer Gateway Configuration

  • VPN Connection作成後、Customer Gateway(ルータ)のConfigurationがダウンロード出来るようになります。
  • ダウンロードに際して指定したルータ情報は下記
- Vendor: Vyatta
- Platform: Vyatta Network OS
- Software: Vyatta Network OS 6.5+

※該当configにVyOSという項目はありませんでしたが、互換性があるようで流用することができました。

  • config一部修正
    → サイト間接続設定のCustomer Gatewayの宛先をPublic IPから Private IPに修正
set vpn ipsec site-to-site peer 13.112.136.118 local-address '172.31.20.174'
set vpn ipsec site-to-site peer 54.178.173.158 local-address '172.31.20.174'

04-5. VyOSの設定

  • まずはSSHログイン。デフォルトのユーザは vyos

% ssh -i ***.pem vyos@<Customer GWの EIP>

  • 設定モードに切り替え、取得したconfigを流し込む
vyos@VyOS-AMI:~$ configure
vyos@VyOS-AMI#
[edit]

(上記で取得したコンフィグを流し込む ※)

・変更のコミットおよび設定保存後、設定モードを終了
vyos@VyOS-AMI# commit

vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
vyos@vyos# exit

※注: AWS Consoleより取得したConfigをコメント欄も含めて流し込むと途中で可笑しくなったため、set行のみ流し込むようにしました。

04-6. VPN Connectionの状態確認

  • コマンドラインより Route Tableの状態確認
    → 対向からルーティング情報を取得出来ていることを確認
vyos@VyOS-AMI:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

S>* 0.0.0.0/0 [210/0] via 172.31.16.1, eth0
B>* 10.0.0.0/16 [20/100] via 169.254.25.77, vti1, 3d01h35m
C>* 127.0.0.0/8 is directly connected, lo
C>* 169.254.25.76/30 is directly connected, vti1
C>* 169.254.27.96/30 is directly connected, vti0
C>* 172.31.16.0/20 is directly connected, eth0
  • コマンドラインより IPsec SAコネクション確認
    → LinkUpしていることを確認
vyos@VyOS-AMI:~$ show vpn ipsec sa
Peer ID / IP                            Local ID / IP
------------                            -------------
13.112.136.118                          172.31.20.174

    Description: VPC tunnel 1

    Tunnel  State  Bytes Out/In   Encrypt  Hash    NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----    -----  ------  ------  -----
    vti     up     8.8K/14.7K     aes128   sha1    no     2044    3600    all


Peer ID / IP                            Local ID / IP
------------                            -------------
54.178.173.158                          172.31.20.174

    Description: VPC tunnel 2

    Tunnel  State  Bytes Out/In   Encrypt  Hash    NAT-T  A-Time  L-Time  Proto
    ------  -----  -------------  -------  ----    -----  ------  ------  -----
    vti     up     8.0K/6.7K      aes128   sha1    no     1533    3600    all
  • VPN Connectionの状態確認
    → AWSコンソール上からもLink Upしていることを確認

◎ 動作確認

  • 当初の目的どおりWindows Server間でRDP接続できることを確認

RDP接続 from Tokyo to London。
「10.0.1.30」 -(RDP)→ 「172.31.3.159」
RDP接続を確認出来ました。
また逆の通信(London→Tokyo)も問題なく接続出来ることを確認しています。

※ 余談

  • RDP接続時の認証パスワード入力が大変。

コピペが出来ないこと。macを使っているとキーボード配列が違い記号を打つのが大変でした。
RDP接続ソフト for macを変更するなど対策方法がネット上に散見されましたが、面倒だったため地道に記号がどこにマッピングされているのか探して私は対処しました。その後は接続設定を保存すれば接続が楽になります。

◎おわりに

  • AWSが発行したVyOS用Configを使うことで繋がったため、今回はルータconfigに関して深追いしていません。しかし、ざっと見たところ下記FAQにあるVPN接続に必要なipsec関連の必須設定がされていたことを確認しています。

Q: Amazon VPC に接続するために、どのようなカスタマーゲートウェイ装置を使用することができますか?

以上になります。

元記事はこちら

VyOSでVPN接続