最近、自宅に大量(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
トレースを完了しました。