なんとなくお蔵入りしてたネタを引っ張りだしてきました。
AzureのVNETと動的ゲートウェイと、AWS上のVyOSなVPNルーターを使ってVPN接続しようというネタです。出来上がる環境はこんな感じ。
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を作成します。
「VPC with a Single Public Subnet」を選択します。
IP CIDR blockに「10.0.0.0/16」、Public subnetにVPNゲートウェイの外側とする「10.0.0.0/24」を指定し「Create VPC」で作成します。
できました。
Subnetsの「Create Subnet」からAWS側の内側となるサブネットを追加します。
LAN扱いとするサブネットのCIDR情報(10.0.1.0/24)を入力し、先ほど作成したVPCと関連付けてサブネットを作成します。
次はVPNゲートウェイ(ルーター)となるインスタンスを作ります。EC2ダッシュボードから新しいインスタンスを起動します。
Community AMIsの中から「VyOS (HVM) 1.1.0」を指定します。(Azure側の動的ゲートウェイに対応させるため、VyOSのバージョンは1.1.0以上である必要があります)
※なんかいろいろバグもちっぽいので注意しましょう(一応つながるけど)
次にインスタンスタイプを適宜選びます。
ネットワークは先ほど作成したネットワーク、サブネットに外側(例であればPublic Subnet)を指定します。またNetwork Interfacesを追加して内側(例であればPrivate Subnet)を選択し、それぞれ外側と内側のIPアドレスを指定します。
ストレージとか名前は適宜。
セキュリティグループは外側用として新たに作成しSSHを受け付けるようにします。
※後で編集しますがとりあえず。
認証に使用するキーペアは適宜作成・選択します。
「Launch Instances」をクリックしてEC2インスタンスを作成します。次にElastic IPをVPC用に確保します。
確保したElastic IPをVPNゲートウェイ(VyOS)インスタンスの外側(10.0.0.10)に対して割り当てます。
割り当てられているNetwork InterfaceのSource/Dest. Checkを無効にします。(内側、外側両方とも)
ネットワークの構成します。ルートテーブルとか。
Azure側(172.16.0.0/16)への通信はVPNゲートウェイ(VyOS)の内側インターフェースにルーティングされるようにRoute Tableを追加します。
VPCを選択して作成します。
作成したRoute TableにRouteを追加します。※指定するTargetはVPNゲートウェイの内側のネットワークインターフェースIDを指定します。
Subnet Associationsで内側のサブネットを割り当てます。
とりあえずAWS側はここまで。VyOSの構成とかは後ほど。
Azure側の構成
さくっとVNET作っていきます。
「サイト間VPNの構成」にチェックし、「新しいローカルネットワークを作成する」を選択します。
VPNデバイスのIPアドレスにAWSのElastic IPで割り当てられたグローバルIPアドレスを指定し、アドレス空間はAWS側のアドレス空間(10.0.0.0/16)を指定します。
Azure側のネットワーク アドレス空間は172.16.0.0/16とし、サブネット 172.16.0.0/24 とゲートウェイ用サブネットを追加してVNETを作成します。
VNET作成後、「動的ルーティング」を作成します。
ゲートウェイ作成完了後、ゲートウェイIPアドレスとキーを控えます。
Azure側はこんな感じです。
VPNゲートウェイ(VyOS)の構成
AWS側のVPNゲートウェイも構成していきましょう。
最初にセキュリティグループの設定していきます。VPNゲートウェイ用のセキュリティグループにInboundルールを追加します。
Azure側のVPNゲートウェイのグローバルIPアドレスからのESP、UDP/500、UDP/4500ポートを許可します。NAT-T環境じゃないのでUDP/4500はいらないかも。詳しい人に聞いてみてください。
また内側サブネット(10.0.1.0/24)からの受信は許可するようにします。
次にVyOSの設定します。SSHでつないでください。
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管理ポータル上で接続されていることを確認します。
疎通確認
疎通確認用にAzure上に仮想マシンを、AWS上にEC2インスタンスをそれぞれ作成します。(Windows Server 2012 R2を指定します)
AWS側は作成したネットワークのPrivate Subnetを指定して作成します。
テスト用なので、すべてのトラフィックの受信を許可します。(良い子はまねしないように)
Azure側は作成したVNETに所属するように仮想マシンを作成します。
出来上がったらAzure上の仮想マシンにRDPで接続し、AWS側の疎通用Windowsサーバー(子の場合10.0.1.101)にアクセスします。※ PINGやRDP接続など
まぁサーバー上のファイアウォールの設定とかすっ飛ばしてますが適宜オフったり許可すればつながると思います。
結局、VyOS 1.1.x以降であればAzureの動的ゲートウェイ(IKEv2を使うVPNゲートウェイ)にちゃんと接続できるようになったので、細かい設定さえ気を付ければ普通につながるということです。ちなみにAzure側のルーティングはほぼ弄れないのであんまり無茶な構成できません。(Azure側の強制トンネリング使う手もあるけど使いどころが微妙ですね)
とりあえずお蔵入りというのもアレなので放出してみました。あくまで参考程度でどうぞ。
※去年のVyatta User Groupでつながらねーという話したけど改善された感じですかね。ちなみにVyOSをAzure上で動かすのはあれからチャレンジしてませんが動く程度ならなんとかなるかと思います。動く程度なら。