AzureのVNETとAWSをVyOSでつなぐ

なんとなくお蔵入りしてたネタを引っ張りだしてきました。

AzureのVNETと動的ゲートウェイと、AWS上のVyOSなVPNルーターを使ってVPN接続しようというネタです。出来上がる環境はこんな感じ。

image

IPアドレスとかは例です。あと数か月以上前のネタなのでちょっと変わってる箇所あるかも(VyOSのAMIのバージョンとか)しれませんが適宜読み替えてください。それから簡易な接続なので本運用とかには使わない方がいいかもですね。なんにせよ自己責任で。

Azure側はこんな感じの設定を想定してます。

  • 仮想ネットワーク
    • アドレス空間 172.16.0.0/16
    • サブネット 172.16.0.0/24
  • 仮想マシンインスタンス 172.16.0.4 ※DHCPで振られるIPアドレス
  • Windows Server 2012 R2 を想定
  • 仮想ネットワーク ゲートウェイ
    • 動的ルーティング

AWS側はこんな感じ

  • VPNゲートウェイ用EC2インスタンス
    • VyOS 1.1.0 AMI
  • 内部扱い用ネットワーク:10.0.1.0/24
  • 外部扱い用ネットワーク:10.0.0.0/24
  • ※AWS ハードウェアVPNは使いません(IKEv2対応してないし)。ES2インスタンスでVPNルーターを構成します。

あとMTUの調整とかはスルーしてますのでご自由にどうぞ。

以下手順載せますが厳守しないといけない手順は特にないのでお好きなようにどうぞ。

AWS側の構成

さくっとVPC作りましょう。「VPC Dashboard」の「Start VPC Wizard」で新しいVPCを作成します。

image

「VPC with a Single Public Subnet」を選択します。

image

IP CIDR blockに「10.0.0.0/16」、Public subnetにVPNゲートウェイの外側とする「10.0.0.0/24」を指定し「Create VPC」で作成します。

image

できました。

image

Subnetsの「Create Subnet」からAWS側の内側となるサブネットを追加します。

image

LAN扱いとするサブネットのCIDR情報(10.0.1.0/24)を入力し、先ほど作成したVPCと関連付けてサブネットを作成します。

image

次はVPNゲートウェイ(ルーター)となるインスタンスを作ります。EC2ダッシュボードから新しいインスタンスを起動します。

image

Community AMIsの中から「VyOS (HVM) 1.1.0」を指定します。(Azure側の動的ゲートウェイに対応させるため、VyOSのバージョンは1.1.0以上である必要があります)
image

※なんかいろいろバグもちっぽいので注意しましょう(一応つながるけど)

次にインスタンスタイプを適宜選びます。

image

ネットワークは先ほど作成したネットワーク、サブネットに外側(例であればPublic Subnet)を指定します。またNetwork Interfacesを追加して内側(例であればPrivate Subnet)を選択し、それぞれ外側と内側のIPアドレスを指定します。

image

ストレージとか名前は適宜。

imageimage

セキュリティグループは外側用として新たに作成しSSHを受け付けるようにします。

image

※後で編集しますがとりあえず。

認証に使用するキーペアは適宜作成・選択します。

image

「Launch Instances」をクリックしてEC2インスタンスを作成します。次にElastic IPをVPC用に確保します。

image

確保したElastic IPをVPNゲートウェイ(VyOS)インスタンスの外側(10.0.0.10)に対して割り当てます。

image

割り当てられているNetwork InterfaceのSource/Dest. Checkを無効にします。(内側、外側両方とも)

imageimage

ネットワークの構成します。ルートテーブルとか。
Azure側(172.16.0.0/16)への通信はVPNゲートウェイ(VyOS)の内側インターフェースにルーティングされるようにRoute Tableを追加します。

image

VPCを選択して作成します。

image

作成したRoute TableにRouteを追加します。※指定するTargetはVPNゲートウェイの内側のネットワークインターフェースIDを指定します。

image

image

Subnet Associationsで内側のサブネットを割り当てます。

image

とりあえずAWS側はここまで。VyOSの構成とかは後ほど。

Azure側の構成

さくっとVNET作っていきます。

image

「サイト間VPNの構成」にチェックし、「新しいローカルネットワークを作成する」を選択します。

image

VPNデバイスのIPアドレスにAWSのElastic IPで割り当てられたグローバルIPアドレスを指定し、アドレス空間はAWS側のアドレス空間(10.0.0.0/16)を指定します。

image

Azure側のネットワーク アドレス空間は172.16.0.0/16とし、サブネット 172.16.0.0/24 とゲートウェイ用サブネットを追加してVNETを作成します。

image

VNET作成後、「動的ルーティング」を作成します。

image

ゲートウェイ作成完了後、ゲートウェイIPアドレスとキーを控えます。

image

image

Azure側はこんな感じです。

VPNゲートウェイ(VyOS)の構成

AWS側のVPNゲートウェイも構成していきましょう。

最初にセキュリティグループの設定していきます。VPNゲートウェイ用のセキュリティグループにInboundルールを追加します。

image

Azure側のVPNゲートウェイのグローバルIPアドレスからのESP、UDP/500、UDP/4500ポートを許可します。NAT-T環境じゃないのでUDP/4500はいらないかも。詳しい人に聞いてみてください。

また内側サブネット(10.0.1.0/24)からの受信は許可するようにします。

設定後:image

次にVyOSの設定します。SSHでつないでください。

image

ssh -i key.pem vyos@xxx.xxx.xxx.xxx

※作成時に指定したキーペアの秘密鍵ファイルを-iコマンドで指定します。ユーザーID(VyOSの場合は既定でVyOS)@ElasticIPの形式で接続します。

最初にeth1(内側インターフェース)のIPアドレスを設定します。※VyOSで設定を行う際は configure コマンドで設定モードに入ります。(プロンプトが$から#に変わります)詳しくはVyOSのマニュアル参照

set interfaces ethernet eth1 address 10.0.1.10/24

VPN用のESPとIKEの設定を行います。

set vpn ipsec esp-group esp-azure compression 'disable'
set vpn ipsec esp-group esp-azure lifetime '3600'
set vpn ipsec esp-group esp-azure mode 'tunnel'
set vpn ipsec esp-group esp-azure pfs 'disable'
set vpn ipsec esp-group esp-azure proposal 1 encryption 'aes128'
set vpn ipsec esp-group esp-azure proposal 1 hash 'sha1'
set vpn ipsec esp-group esp-azure proposal 2 encryption 'aes256'
set vpn ipsec esp-group esp-azure proposal 2 hash 'sha1'
set vpn ipsec esp-group esp-azure proposal 3 encryption '3des'
set vpn ipsec esp-group esp-azure proposal 3 hash 'sha1'
set vpn ipsec ike-group ike-azure lifetime '28800'
set vpn ipsec ike-group ike-azure key-exchange ikev2
set vpn ipsec ike-group ike-azure proposal 1 dh-group '2'
set vpn ipsec ike-group ike-azure proposal 1 encryption 'aes128'
set vpn ipsec ike-group ike-azure proposal 1 hash 'sha1'
set vpn ipsec ike-group ike-azure proposal 2 dh-group '2'
set vpn ipsec ike-group ike-azure proposal 2 encryption 'aes256'
set vpn ipsec ike-group ike-azure proposal 2 hash 'sha1'
set vpn ipsec ike-group ike-azure proposal 3 dh-group '2'
set vpn ipsec ike-group ike-azure proposal 3 encryption '3des'
set vpn ipsec ike-group ike-azure proposal 3 hash 'sha1'
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
set vpn ipsec nat-traversal 'enable'

VPN(IPSec)を使用するインターフェースとしてeth0(外側インターフェース)を指定します。

set vpn ipsec ipsec-interfaces interface 'eth0'

対向(Azure)との設定を行います。

set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY authentication pre-shared-secret 'Azure側ゲートウェイの共有キー'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY connection-type 'initiate'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY default-esp-group 'esp-azure'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY ike-group 'ike-azure'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY local-address '10.0.0.10'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY tunnel 1 allow-nat-networks 'disable'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY tunnel 1 allow-public-networks 'disable'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY tunnel 1 esp-group 'esp-azure'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY tunnel 1 local prefix '10.0.1.0/24'
set vpn ipsec site-to-site peer YYY.YYY.YYY.YYYY tunnel 1 remote prefix '172.16.0.0/16'

YYY.YYY.YYY.YYYY にはAzure側VPNゲートウェイのIPアドレスを指定します。また事前共有キーにはAzureの管理ポータル上で得られたキーを指定します。

最後にcommitコマンドとsaveコマンドを使用して設定を確定し保存します。(Commit時にエラーが出る場合はコンフィグを見直してください)

設定が問題ない場合、しばらくすると接続状態となります。Azure管理ポータル上で接続されていることを確認します。

image

疎通確認

疎通確認用にAzure上に仮想マシンを、AWS上にEC2インスタンスをそれぞれ作成します。(Windows Server 2012 R2を指定します)

AWS側は作成したネットワークのPrivate Subnetを指定して作成します。

image

テスト用なので、すべてのトラフィックの受信を許可します。(良い子はまねしないように)

image

Azure側は作成したVNETに所属するように仮想マシンを作成します。

image

出来上がったらAzure上の仮想マシンにRDPで接続し、AWS側の疎通用Windowsサーバー(子の場合10.0.1.101)にアクセスします。※ PINGやRDP接続など

image

まぁサーバー上のファイアウォールの設定とかすっ飛ばしてますが適宜オフったり許可すればつながると思います。

結局、VyOS 1.1.x以降であればAzureの動的ゲートウェイ(IKEv2を使うVPNゲートウェイ)にちゃんと接続できるようになったので、細かい設定さえ気を付ければ普通につながるということです。ちなみにAzure側のルーティングはほぼ弄れないのであんまり無茶な構成できません。(Azure側の強制トンネリング使う手もあるけど使いどころが微妙ですね)

とりあえずお蔵入りというのもアレなので放出してみました。あくまで参考程度でどうぞ。

※去年のVyatta User Groupでつながらねーという話したけど改善された感じですかね。ちなみにVyOSをAzure上で動かすのはあれからチャレンジしてませんが動く程度ならなんとかなるかと思います。動く程度なら。

コメントを残す