1台のルータから同リージョンの2つのVPCに同時に接続してみた
1台のルータから、(同一リージョンの)2つのVPCへ接続したいというニーズがあると思われるので、試してみました。
用意するもの
- 仮想ルータ機能を持つルータ
今回はJuniper SSG5を利用しました。LAN側のCIDRは192.168.1.0/24となっています。 - 2つのグローバルIPアドレス
今回はフレッツのISPを2つ用意しました。 - VPCを2つ
CIDRは異なるようにしておきましょう。今回は172.21.0.0/16と172.20.0.0/16を使用しています。
下準備
ルータを初期化した所から始めます。
インターフェース | 用途 | Zone | VirtualRouter |
---|---|---|---|
ethernet0/0 | ISP1 | Untrust1 | untrust-vr |
ethernet0/1 | ISP2 | Untrust2 | untrust-vr2 |
bgroup0(ethernet0/2-6) | LAN | Trust | trust-vr |
という構成にします。
各インターフェースでPPPoEの設定をしてください。Auto-connectの設定にしておくとよいでしょう。
VPN connectionの作成(今回のミソ)
VPN connectionを各VPC毎に作成します。普通に作成するとtunnelに使用するアドレス(169.254.252.x)がかぶる可能性が高いので、2つ目のVPN connectionを作る前にダミーのIPアドレスを使って一時的に複数のVPN connectionを1つのVPC用に作り、かぶらないようなトンネルアドレスを使用できるようにします。
何を言ってるかよくわからないと思いますが、VPN connectionを作成する際に、下記のようにして作成します。
- 最初のVPC用にCustomer Gatewayの設定と、VPN connectionを作成し、configファイル(ScreenOS用)をダウンロード
- 2つめのVPCでCustomer GatewayにダミーのIPアドレス(既存のインスタンスについているIPなどのグローバルIP)で作成
- 2つめのVPCでCustomer Gatewayに本命のIPアドレスで作成
- 先にダミーのCustomer Gatewayを使用してVPN connectionを作成
- 本命のCustomer Gatewayを使用してVPN connectionを作成
- configをダウンロードしてみて、1で作成したVPC connectionとトンネルインターフェースのIPアドレスがかぶっていない事を確認
- ダミーのVPN connectionを削除
- ダミーのCustomer Gatewayを削除
コンフィグの修正
共通事項
今回はフレッツを使っているので、MTU/MSSをそれぞれ1390/1350に調整します。
1つめのコネクション
トンネルが属するゾーンをTrust->Untrust1に読み替えます。またVirtual Routerはuntrust-vrとなります。
$ perl -pe 's/1436/1390/;s/1396/1350/;s/Trust/Untrust1/;s/trust-vr/untrust-vr/;s/^#.+//;s/^\s+$//' < /path/to/vpn1-config.txt
で得られるコンフィグを投入します。
2つめのコネクション
トンネルが属するゾーンをTrust->Untrust2に読み替えます。tunnel.1/2をそれぞれtunnel.3/4と読み替えます。またVirtual Routerはuntrust-vr2となります。
$ perl -pe 's/1436/1390/;s/1396/1350/;s/Trust/Untrust2/;s/trust-vr/untrust-vr/;s/tunnel.1/tunnel.3/;s/tunnel.2/tunnel.4/;s/^#.+//;s/^\s+$//' < /path/to/vpn2-config.txt
で得られるコンフィグを投入します。
Routing設定
このままでは各Virtual Router間はルーティングが行われませんので、Routingの設定を行います。
CUIから入れるなら
set vrouter "trust-vr" set route 172.21.0.0/16 vrouter "untrust-vr" preference 20 metric 1 set route 172.20.0.0/16 vrouter "untrust-vr2" preference 20 metric 1 exit set vrouter "untrust-vr" set route 192.168.1.0/24 vrouter "trust-vr" preference 20 metric 1 exit set vrouter "untrust-vr2" set route 192.168.1.0/24 vrouter "trust-vr" preference 20 metric 1 exit
となります。
GUIで入れる場合には、Network > Routing > Virtual Routersから、Route Entriesをクリックし、右上の対象VRを指定してNewを押し、対象CIDRを指定して振り先のvirtual routerを指定してOKを押します。
Policy用オブジェクト作成
Routingされたとしても、Policyがない状態では各Zoneの通信はRejectされてしまうので、Policyを設定していきます。
それに先立って、VPCとInternet上のホストを区別するため、Policy用のオブジェクトを作成していきましょう。
Policy > Policy Elements > Addresses > Listに行き、左上の対象ゾーンを選び、Newを押します。
NameにVPCのID、IPアドレス/マスクをVPCのCIDRを入れていきます。それぞれのVPC毎にオブジェクトを作成しました。
Policy作成
Policy > Policiesに行き、
- Untrust1->Trust : Src:vpc-xxxxxxxx Dst:Any Service:Any Action:Permit
- Untrust2->Trust : Src:vpc-yyyyyyyy Dst:Any Service:Any Action:Permit
- Trust->Untrust1 : Src:Any Dst:Any Service:Any Action:Permit
- Trust->Untrust2 : Src:Any Dst:Any Service:Any Action:Permit
を投入します。もっと細かくポリシーを設定する場合(プロトコルを絞りたいなど)は、適宜設定しましょう。
疎通確認
$ ssh vyatta@172.20.0.254 Welcome to Vyatta Linux vyatta 2.6.37-1-586-vyatta-virt #1 SMP Thu Jul 7 22:30:24 PDT 2011 i686 Welcome to Vyatta. This system is open-source software. The exact distribution terms for each module comprising the full system are described in the individual files in /usr/share/doc/*/copyright. Last login: Mon May 7 15:47:47 2012 from 192.168.1.200 vyatta@vyatta:~$ logout Connection to 172.20.0.254 closed. $ ssh ec2-user@172.21.0.4 Last login: Mon May 7 15:47:27 2012 from 192.168.1.200 __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| See /usr/share/doc/system-release/ for latest release notes. [ec2-user@ip-172-21-0-4 ~]$ logout Connection to 172.21.0.4 closed.
どちらのVPCにも通信ができている事が確認できました!