Cisco ISR 2911で自宅からAmazon VPCにSite-to-Site VPNを構築

最近、自宅に大量(15台程度)のCisco ISR 2911ルータが溜まっています。ヤフオクで出品しても3000円程度しか値段が付かないので、処分に困っています。昔、CiscoのASAを利用して自宅のネットワークからAmazon VPCにSite-to-Site VPNを構築したことはあるが、ISRルータでもできるのでは?と思い、やってみました。

まず準備作業として、ISRルータのIOSバージョンとライセンスを確認しておきます。バージョンは、よほど古くなければ問題ありません。

router#show version
Cisco IOS Software, C2900 Software (C2900-UNIVERSALK9-M), Version 15.7(3)M8, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2021 by Cisco Systems, Inc.
Compiled Tue 02-Mar-21 07:51 by prod_rel_team
(以下省略)

IPSec VPNを設定するには、「securityk9」というライセンスフィーチャーが必要です。securityk9がインストールされていない・有効化されていないISRルータではVPN関連のコマンドが利用できません。試しにsecurityk9が存在しない・有効化されていない場合のcryptoコマンドのヘルプを見てみると:

router(config)#crypto ?
  key           Long term key operations
  pki           Public Key components
  provisioning  Secure Device Provisioning
  wui           Crypto HTTP configuration interfaces

一方、securityk9が有効な場合だと、以下の結果になります:

router(config)#crypto ?
  call          Configure Crypto Call Admission Control
  ctcp          Configure cTCP encapsulation
  dynamic-map   Specify a dynamic crypto map template
  engine        Enter a crypto engine configurable menu
  gdoi          Configure GKM (Group Key Management, GDOI or G-IKEv2) Policy
  gkm           Configure GKM (Group Key Management, GDOI or G-IKEv2) Policy
  identity      Enter a crypto identity list
  ikev2         Configure IKEv2 Options
  ipsec         Configure IPSEC policy
  isakmp        Configure ISAKMP policy
  key           Long term key operations
  keyring       Key ring commands
  logging       logging messages
  map           Enter a crypto map
  mib           Configure Crypto-related MIB Parameters
  pki           Public Key components
  provisioning  Secure Device Provisioning
  vpn           Configure crypto vpn commands
  wui           Crypto HTTP configuration interfaces
  xauth         X-Auth parameters

ちなみにsecurityk9ライセンスは、permanentもしくはRTU(RightToUse)のどちらの形態になります。RTUの場合は、以下のコマンドで有効化しておく必要があります:

router(config)#license accept end user agreement
router(config)#license boot module c2900 technology-package securityk9

設定を保存してから再起動するとライセンスが有効になります:

router#show license detail securityk9
Index: 1        Feature: securityk9                        Version: 1.0
        License Type: RightToUse
        License State: Active, In Use
        License Count: Non-Counted
        License Priority: Low
        Store Index: 0
        Store Name: Built-In License Storage

これで準備作業は完了です。

システム構成

今回は検証のため最もシンプルな構成でシステムを作っていきます。AWS側はPrivate SubnetのみのVPCを作成します。自宅の環境では、ISR 2911ルータのg0/0ポートをLANケーブルでブロードバンドルータにつなげるだけです。VPNアクセスの際に、パケットは自分のPCからいったん2911に流れ、トンネリングされブロードバンドルータ、インターネット経由でAWSのVGWに到着し、VPC内のEC2インスタンスに転送されます。

1. ISRルータのルーティング設定

ISRルータでは、まずインターフェースのIPアドレスと、インターネットにアクセスするためのスタティックルートを設定します。VPN接続においてBGPのルーティング設定も必要ですが、これは後ほどAWSから提供されるコマンドに含まれているのでこの段階では設定しません。

router#show running-config
(一部抜粋)
interface GigabitEthernet0/0
 ip address 192.168.1.241 255.255.255.0
 duplex auto
 speed auto
!
ip route 0.0.0.0 0.0.0.0 192.168.1.1

2. VPCでCGWとVGWを作成

CGW(Cutomer Gateway)とは、Amazon VPCにおいてユーザ側デバイス(今回の場合は私の自宅にあるCisco ISR 2911)を表しているエンティティです。一方、VGW(Virtual Private Gateway)は、IGW(Internet Gateway)と同様にVPCにアタッチするエンティティです。VGWとCGWを作成してから、VGWとCGWとの間に、「Site-to-Site VPN」という接続を設定するという流れになります。

では、まずCGWを作成していきます。CGWの作成に必要な情報は1つだけです。自宅のブロードバンドルーターのインターネット側のIPアドレス、つまりグローバルIPです。ちなみに自宅のグローバルIPを確認するには、AWSから提供されているURL「http://checkip.amazonaws.com/」が便利です。

ここで注意してほしいのは、1個のIPアドレスにつき1つのCGWしか作成できません。同じIPアドレスで新しいCGWを作成しようとすると、同じIPアドレスの古いCGWが上書きされます。

続けてVGWを作成します。VGWとVPCとの関係は、1対1です。つまり1つのVGWは複数のVPCにアタッチできません。1つのVPCに複数のVGWをアタッチすることもできません。VGW作成には特にIPアドレスなどを情報を必要としません。Amazon側のASNはデフォルトで64512になりますが、既存環境のAS番号と重複していない限り変更する必要はありません。

3. Site-to-Site VPN接続を作成

CGWとVGWを作成したら、Site-to-Site VPN接続を作成します。先ほど作成していたCGWとVGWを指定する以外のオプションは、デフォルトのままで構いません(セキュリティ向上のために通せるIPアドレス範囲を絞ることができますが、今回はいったん制限なしでいきます)。

また、ルーティングオプションについては、ISR 2911がBGPをサポートしているため、「動的」を選択しています。BGPをサポートしない機種の場合、「静的」を選択したうえ手動でルーティングを設定する必要があります。

4. NAT Traversalを考慮したConfig修正

VPNを作成した直後、下記のようにトンネルのステータスが「Down」になっており接続できていない状態です。これを解消するには、ISR 2911側でVPNの設定を投入する必要があります。

作成したVPN接続の画面で、「設定をダウンロードする」ボタンをクリックするとサンプルの設定ファイル(Config)をダウンロードできます。CiscoのISRシリーズを選択してダウンロードします。

ここでダウンロードしたConfigは、そのまま2911に投入してはいけません。なぜかというと、2911のインターフェースに設定されているIPアドレスが、AWSから認識しているIPアドレスが異なっています。つまり、2911とAWSとの間にNATが存在します。そのため、このConfigにある自宅のグローバルIPを、すべて2911の外部向けIP(この例では192.168.1.241)に置換する必要があります。CiscoのISRルータは、自動的にNAT Traversalに対応しているので、特に追加の設定は不要です。

実際に置換を行った個所は、それぞれのトンネル設定に3カ所で合計6カ所になります。

crypto keyring keyring-vpn-07f57a28492a0931f-0
  local-address 192.168.1.241

crypto isakmp profile isakmp-vpn-07f57a28492a0931f-0
  local-address 192.168.1.241

interface Tunnel1
  tunnel source 192.168.1.241

また、IOSのバージョンによるものかもしれませんが、下記コマンドが受け付けられなかったので、少し変更しました。

<サンプルConfigにあるコマンド>
crypto isakmp keepalive threshold 10 retry 10

<変更後のコマンド>
crypto isakmp keepalive 10 10 periodic

上記の変更をしたら、そのまま2911に投入します。投入後、数十秒待つと両方のトンネルが「Up」ステータスに変わります。

5. VPC側のルーティング設定

最後にVPC側で、自宅へのルートを追加します。

6. 動作確認

Amazon VPCへのVPNアクセスと、インターネットアクセスを同時に行いたいので、PCに手動でルートを追加します(インターネットアクセスが不要なら、デフォルトゲートウェイを2911のIPアドレスに向けるとば良い)。

C:\> route add 10.200.0.0 mask 255.255.0.0 192.168.1.241

PCにルートを追加したら、pingもしくはtracertで、VPC内とインターネットそれぞれに到達することを確認します。

C:\>tracert -d 10.200.129.75

10.200.129.75 へのルートをトレースしています。経由するホップ数は最大 30 です

  1     9 ms     3 ms     3 ms  192.168.1.241
  2    15 ms     9 ms     8 ms  10.200.129.75

トレースを完了しました。

C:\>tracert -d 8.8.8.8

8.8.8.8 へのルートをトレースしています。経由するホップ数は最大 30 です

  1     2 ms     1 ms     2 ms  192.168.1.1
(中略)
  9     6 ms    11 ms    10 ms  8.8.8.8

トレースを完了しました。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top