Ciscoルータでトンネルの中にトンネルを掘ってみる（誰得？）

# はじめに

　ネットワークスペシャリスト試験（ネスペ）の令和6年度春試験午後Ⅰ問3設問1(4)では，IPIPのパケットをIPsecトンネルモードにした場合のパケット構成が問われました。
　この設問ですが，当初私は「IPIP+トランスポートモードのVPN」を「IPsecトンネルモードのVPN」に変更した場合のパケット構成と理解していました。ところが公式解答を見ると「IPIPパケットにIPsecトンネルモードを適用した場合」の構成を前提としています。つまり，IPsecトンネルの中にIPIPトンネルという二重トンネルです。
　設定が複雑とかトラブルシューティングが複雑とか処理負荷とかパケットがやたら大きくなって非効率とか，とにかくデメリットしか思いつきません。
　それに，そもそもそんな設定ができるのか，IPsecが設定できるルータが転がっていたので試してみました。誰得記事です。
 
# 結論
　設定できます。疎通もします。

# 材料
- Cisco892J×2台。
- Ping用のホスト×2台
- LANケーブル少々

# 構成図
![名称未設定ファイル.drawio (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/f59423c5-cd71-518f-a9b9-f6256003c0a3.png)
IPsecトンネルとして，Tunnel0インタフェースを作成し，IPアドレス(10.0.1.0/30)を付与します。その中にIPIPトンネルとして，UnNumberedなTunnel1インタフェースを作成し，インタフェースとしてTunnnel0を使います。

# Router-AのConfig

```
!
! IPsec用のPSK
crypto keyring VPN-KEYRING
  pre-shared-key address 203.0.113.55 key VPN-KEY
!
! IPsecパラメータ
crypto isakmp policy 1
 encr aes 256
 authentication pre-share
 group 14
 lifetime 28800
crypto isakmp keepalive 10 10
crypto isakmp profile VPN-ISAKMP-PROFILE
   keyring VPN-KEYRING
   match identity address 203.0.113.55 255.255.255.255
!
!
crypto ipsec transform-set VPN-TFSET esp-aes 256 esp-sha256-hmac
 mode tunnel
!
crypto ipsec profile VPN-IPSEC-PROFILE
 set transform-set VPN-TFSET
 set pfs group14
!
! IPsecトンネル
interface Tunnel0
 ip address 10.0.1.1 255.255.255.252
 ip virtual-reassembly in
 tunnel source GigabitEthernet0
 tunnel mode ipsec ipv4
 tunnel destination 203.0.113.55
 tunnel protection ipsec profile VPN-IPSEC-PROFILE
!
! IPIPトンネル
interface Tunnel1
 ip unnumbered Tunnel0
 tunnel source Tunnel0
 tunnel mode ipip
 tunnel destination 10.0.1.2
!
! 物理インタフェース
interface GigabitEthernet0
 ip address 203.0.113.1 255.255.255.0
 duplex auto
 speed auto
!
interface Vlan1
 ip address 192.168.1.254 255.255.255.0
!
! 対向側サブネットへの経路を，Tunnel1(IPIPトンネル）へ
ip route 172.16.1.0 255.255.255.0 Tunnel1
!
```

# Router-BのConfig
```
crypto keyring VPN-KEYRING
  pre-shared-key address 203.0.113.1 key VPN-KEY
!
crypto isakmp policy 1
 encr aes 256
 authentication pre-share
 group 14
 lifetime 28800
crypto isakmp key PRE-SHARED-KEY address 0.0.0.0
crypto isakmp keepalive 10 10
crypto isakmp profile VPN-ISAKMP-PROFILE
   keyring VPN-KEYRING
   match identity address 203.0.113.1 255.255.255.255
!
!
crypto ipsec transform-set VPN-TFSET esp-aes 256 esp-sha256-hmac
 mode tunnel
!
crypto ipsec profile VPN-IPSEC-PROFILE
 set transform-set VPN-TFSET
 set pfs group14
 interface Tunnel0
 ip address 10.0.1.2 255.255.255.252
 ip virtual-reassembly in
 tunnel source GigabitEthernet0
 tunnel mode ipsec ipv4
 tunnel destination 203.0.113.1
 tunnel protection ipsec profile VPN-IPSEC-PROFILE
!
interface Tunnel0
 ip address 10.0.1.2 255.255.255.252
 ip virtual-reassembly in
 tunnel source GigabitEthernet0
 tunnel mode ipsec ipv4
 tunnel destination 203.0.113.1
 tunnel protection ipsec profile VPN-IPSEC-PROFILE
!
interface Tunnel1
 ip unnumbered Tunnel0
 tunnel source Tunnel0
 tunnel mode ipip
 tunnel destination 10.0.1.1
!
 interface GigabitEthernet0
 ip address 203.0.113.55 255.255.255.0
 duplex auto
 speed auto
!
interface Vlan1
 ip address 172.16.1.254 255.255.255.0
!
ip route 192.168.1.0 255.255.255.0 Tunnel1
```

# （もう一度）結論
設定はできてPingは通りました。ただ，負荷とかパケットサイズとかは全然調べていません。

# 参考
- 外側のIPsecトンネルインタフェースをUnNumberedに設定し，かつ内側のIPIPトンネルインタフェースをUnNumberedに設定することはできませんでした。つまり，UnNumberedの中にUnNumberedは設定できません。