YAMAHA RTX1200とNEC IX2015による両側動的IPでのIPSec VPN相互接続

IPsecでVPNを張るときに，異機種の相互接続で，両側動的IPのパターンはハマるパターンなので，備忘録も兼ねてうまく接続できた事例を紹介します．

使用機材がRTX1200 (動的IP対応) とIX2015 (動的IP未対応) なので，RTX1200がイニシエータ(始動側)で，IX2015はレスポンダ(応答側)になるしかありません．逆のパターンはウェブ上に事例が沢山ありますが，RTX1200が固定IPです．

なるべく正しいことを書いてるつもりですが，IPSecの仕様は高度に複雑化されているせいで，難解過ぎて正しいことを書いている保証ができません．

# 前提条件

|      | イニシエータ | レスポンダ |
|:----|:-----------:|:---------:|
| 機種 | RTX1200 | UNIVERGE IX2015 |
| 動的IP対応  | ○ | × |
| IKEv1対応  | ○ | ○ |
| IKEv2対応  | ○ | × |
| ローカルIP  | 192.168.1.1  | 192.168.0.1  |
| サブネット  | 192.168.1.0/24  | 192.168.0.0/24  |
| グローバルIP  | PPPoEによる動的IP  | PPPoEによる動的IP  |
| ホスト名  | 不要  | RESPONDER.example.com  |

# 設定項目
イニシエータとレスポンダの設定は当たり前ですがそろえないとダメです．RTXとIXでは未設定の項目についての挙動が異なるのでなるべく明示的に指定する必要があります．同機種だとデフォルトの設定値や動作が同じなので，ちょっとの設定で接続できますが，異機種だとそうはいきません．

次の表はIKEv1 Phase1 (ISAKMP SAのネゴシエーション)についての設定です．

| 項目 | イニシエータ | レスポンダ |
|:----|:-----------|:---------|
|接続相手   | RESPONDER.example.com  | any  |
|IKE交換モード| aggressive  | 同左  |
|認証方式 | 事前共有鍵 |同左  |
|暗号化アルゴリズム |AES-CBC (256 bits)  |同左  |
|認証アルゴリズム  |HMAC-SHA-1-96       |同左       |
|DH group   | DH group 2 (1024-bit)      |同左       |
|事前共有鍵   | IPSEC_PSK  | 同左  |
|rekey   | 28800秒  | 同左  |
|keepalive   | DPD  | 同左  |
|IDタイプ|未指定|タイプ1(ID_IPV4_ADDR)|
|自装置のID| 未指定 | 192.168.0.1 |
|NATトラサーバル| off | 同左 |
|ダングリング SA   | 不許可  | 同左  |

次の表はIKEv1 Phase2 (IPsec SAのネゴシエーション)についての設定です．理由は不明だがIDタイプはタイプ1(ID_IPV4_ADDR)必須．タイプ4(ID_IPV4_ADDR_SUBNET)ではRTXとうまく折衝できない．

| 項目 | イニシエータ | レスポンダ |
|:----|:-----------|:---------|
|SAモード|トンネル|同左|
|セキュリティープロトコル|ESP（暗号＋認証）|同左 |
|ESP 暗号アルゴリズム    | ESP Triple DES-CBC  | 同左 |
|ESP 認証アルゴリズム    | ESP HMAC-SHA1-96  | 同左 |
|DH group   | DH group 2 (1024-bit)      |同左       |
|IDタイプ|タイプ1(ID_IPV4_ADDR)|同左|
|自装置のID | 192.168.1.1  | 192.168.0.1  |
|rekey   | 28800秒  | 同左  |
|ESPのカプセル化   | off  | 同左 |
|PFS   | on/offどちらでも可  | 同左  |

# RTX1200の設定

```sh
# IPの設定
ip routing on
ip route change log on
ip route default gateway pp 1
# 192.168.0.0/24の経路をトンネルに設定する
ip route 192.168.0.0/24 gateway tunnel 1
# 自身のIPアドレス
ip lan1 address 192.168.1.1/24


# トンネル番号の設定
tunnel select 1
 # トンネルのカプセル化の設定
 tunnel encapsulation ipsec
 # このトンネルで使用するSAのポリシ番号
 ipsec tunnel 101
  # SAのポリシを定義し，使用するセキュリティ・ゲートウェイの識別子を指定する
  # IKEv1 Phase2プロポーザルを指定する
  ipsec sa policy 101 1 esp 3des-cbc sha-hmac
  # 鍵交換に失敗しても再度交換を開始する
  ipsec ike always-on 1 on
  # IKEv1 Phase2の鍵の寿命
  ipsec ike duration ipsec-sa 1 28800 rekey 90%
  # IKEv1 Phase1の鍵の寿命
  ipsec ike duration isakmp-sa 1 28800 rekey 90%
  # IKEv1 Phase1の暗号アルゴリズム
  ipsec ike encryption 1 aes256-cbc
  # IKEv1 Phase1のESPをUDPでカプセル化しない
  ipsec ike esp-encapsulation 1 off
  # IKEv1 Phase1およびPhase2のDHグループの指定
  ipsec ike group 1 modp1024
  # IKEv1 Phase1のハッシュアルゴリズム
  ipsec ike hash 1 sha
  # keepaliveの設定
  ipsec ike keepalive log 1 on
  ipsec ike keepalive use 1 on dpd
  # IKEv1 Phase2 自分側のPhase2 IDの指定
  ipsec ike local id 1 192.168.1.1
  ipsec ike log 1 key-info message-info payload-info
  ipsec ike nat-traversal 1 off
  # IKEv1メッセージフォーマットをヤマハルーターのリリース 3 に合わせる
  ipsec ike payload type 1 2
  # IKEv1 Phase1 PFSはon/offどちらも可
  ipsec ike pfs 1 on
  # IKEv1 Phase1 事前共有鍵
  ipsec ike pre-shared-key 1 text "IPSEC_PSK"
  # IKEv1 Phase1 接続先
  ipsec ike remote address 1 RESPONDER.example.com
  # IKEv1 Phase2 相手側のPhase2 IDの指定
  ipsec ike remote id 1 192.168.0.1
  # IKEv1 Phase1 相手側のPhase1 IDの指定
  ipsec ike remote name 1 192.168.0.1 ipv4-addr
  # ダングリング SAを不許可
  ipsec ike restrict-dangling-sa 1 auto
  ipsec auto refresh 1 on
 ip tunnel tcp mss limit auto
 tunnel enable 1
ipsec auto refresh on
ipsec log illegal-spi on
ipsec ike retry 10 1 3

# DNSの有効化
# IKEの折衝開始時にドメイン名の名前解決のために必須
dns service recursive
# IKEの折衝開始時にキャッシュが有効でないと名前解決できない（YAMAHAに確認したところ仕様とのこと）
dns cache use on
# 外部のDNSサーバの指定
dns server 8.8.8.8
# PPPoEからDNSサーバのアドレスを取得する
dns server pp 1
# DDNSを使用する場合には，ドメインの権威サーバを指定しておく
dns server select 2112 210.197.74.202 any mydns.jp
# DNSキャッシュを定期的に削除．レスポンダのIPが変わったときに即応できるようにするため．キャッシュクリアの間隔は自分の要求する．
schedule at 1 */* *:* * clear dns cache

# PPPoEへのNATの設定
pp select 1
 description pp PPPoE
 # 省略
 ip pp nat descriptor 1000
 # 省略
 pp enable 1
nat descriptor type 1000 masquerade
nat descriptor timer 1000 600
nat descriptor timer 1000 tcpfin 30
nat descriptor address outer 1000 ipcp
nat descriptor address inner 1000 auto
nat descriptor masquerade incoming 1000 discard
# ahはなくてもいいかも．
nat descriptor masquerade static 1000 100 192.168.1.1 ah
# espは必須
nat descriptor masquerade static 1000 101 192.168.1.1 esp
nat descriptor masquerade static 1000 102 192.168.1.1 udp 500
nat descriptor masquerade static 1000 103 192.168.1.1 udp 4500
```

# IX2015

```fortran
! IPルーティングの設定
ip route 192.168.1.0/24 Tunnel0.0
!
! IPsec用のACL
ip access-list sec-list permit ip src any dest any
ip access-list sec-list permit ip src 192.168.0.0/24 dest 192.168.1.0/24
ip access-list sec-list permit ip src 192.168.1.0/24 dest 192.168.0.0/24
!
!
!
! IKEv1 Phase1 プロポーザルの作成
ike proposal IKE-PRO1 encryption aes-256 hash sha group 1024-bit lifetime 28800
!
! IKEv1 Phase1 ポリシの設定
!   プロポーザルを紐付けて，ピアをanyにする
!   任意のアドレスからの接続要求を受け入れる：動的IP環境では必須
ike policy IKE-POLICY1 peer any key IPSEC_PSK mode aggressive IKE-PRO1
ike commit-bit IKE-POLICY1
ike keepalive IKE-POLICY1 10 3
! IKEv1 Phase1 IDの設定
ike local-id ike-policy1 address 192.168.0.1
! ダングリング SAを不許可
ike suppress-dangling IKE-POLICY1
!
!
!
! IKEv1 Phase2の自動鍵プロポーザルの生成
ipsec autokey-proposal IPSEC-PRO1 esp-3des esp-sha lifetime time 28800
!
! IKEv1 Phase2 の自動鍵ダイナミックポリシーマップの生成
!   接続相手が動的IPなのでダイナミックポリシーマップを使用する
!   自動鍵プロポーザル，ACL，IKEのポリシを紐付けし，PFSを設定する
ipsec dynamic-map IPSEC-DMAP1 sec-list IPSEC-PRO1 pfs 1024-bit ike IKE-POLICY1
ipsec rekey unconditional-rekeying policy IPSEC-DMAP1
! IKEv1 Phase2 IDの設定：これがイニシエータと合ってないと繋がらない
!   理由は不明だがタイプ1(ID_IPV4_ADDR)必須
!   タイプ4(ID_IPV4_ADDR_SUBNET)ではRTXとうまく折衝できない
ipsec local-id IPSEC-DMAP1 192.168.0.1
ipsec remote-id IPSEC-DMAP1 192.168.1.1
!
!
! PPPoEのプロファイル
ppp profile PPPOE_PROFILE
  authentication accept chap
  authentication myname <PPPOE_USER_ID>
  authentication password <PPPOE_USER_ID> <PPPOE_PASSWORD>
!
! インターフェースの設定
! LAN側
interface FastEthernet1/0.0
  description LOCAL
  ip address 192.168.0.1/24
  no shutdown
!
! インターフェースの設定
! WAN側
! PPPoEプロファイルの指定とNAPTの設定
interface FastEthernet0/0.1
  description PPPoEv4
  encapsulation pppoe
  auto-connect
  ppp binding PPPOE_PROFILE
  ip address ipcp
  ip mtu 1454
  ip tcp adjust-mss 1414
  ip napt enable
  ip napt translation max-entries 65000
  ip napt translation max-entries per-address 6500
  ip napt static FastEthernet0/0.1 udp 500
  ip napt static FastEthernet0/0.1 51
  ip napt static FastEthernet0/0.1 50
  ip napt static FastEthernet0/0.1 udp 4500
  no shutdown
!
! トンネルの設定
! 自動鍵ダイナミックポリシーマップを割り当てる
interface Tunnel0.0
  description VPN_IPSEC
  tunnel mode ipsec
  ip unnumbered FastEthernet0/0.1
  ip tcp adjust-mss auto
  ipsec policy tunnel IPSEC-DMAP1 out
  no shutdown
```

# 参考
* [Yamaha ルーターシリーズ コマンドリファレンス](http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/)
* [マニュアル : UNIVERGE IXシリーズ | NEC](http://jpn.nec.com/univerge/ix/Manual/)
* [YAMAHA RTXにおけるipsecの名前解決の実装仕様 | cloudpack技術情報サイト](https://blog.cloudpack.jp/2015/06/29/ipsec-dns-resolver-spec-for-yamaha-rtx/)
* [ネットワークの基礎の基礎を復習・その7 : インフラエンジニアに成る](http://blog.livedoor.jp/ume3_/archives/51096621.html)
* [VPN（IKE・フェーズ1・フェーズ2）　CCNP実機で学ぶ](http://atnetwork.info/ccnp4/vpn03.html)
* [IPsec 相互接続の手引き](http://www.rtpro.yamaha.co.jp/RT/docs/ipsec/interop.html)
* [CentreCOM AR450S 設定例集 2.9: #90](https://www.allied-telesis.co.jp/support/list/router/ar450s/docs/cfg-90.html)
* [IPsec IKE Phase2 - Ciscoコンフィグ](http://www.infraexpert.com/study/ipsec11.html)