概要

IPSecで暗号化するパケットに対するNATのアドレス変換について、設定ミスの切り分けと修正を行います。

ネットワーク構成

次のネットワーク構成で、IPSec-VPNにより拠点間の通信を行いたいと考えています。

図 IPSec 設定ミスの切り分けと修正 Part1
図 IPSec 設定ミスの切り分けと修正 Part1
サブインタフェースを利用しているのは、検証環境の機器の都合のためです。IPSecの設定自体にはまったく関係ありません。

R1の拠点内には192.168.1.0/24のネットワークがあります。また、R2の拠点内には192.168.2.0/24のネットワークがあります。R1、R2をVPNゲートウェイとして拠点間の通信のパケットをIPSecで暗号化します。また、インターネットへ接続するためにR1、R2でNATによって拠点内のプライベートアドレスをISPに接続しているグローバルアドレスに変換できるようにしています。なお、インターネットへ通信確認は150.1.1.100のIPアドレスで行うものとします。

設定概要

R1、R2で下記の設定を行っています。

R1

crypto isakmp policy 1
 encr 3des
 hash md5
 authentication pre-share
 group 2
crypto isakmp key cisco address 100.2.2.2
crypto isakmp keepalive 30 periodic
!
crypto ipsec transform-set myset esp-3des esp-sha-hmac
!
crypto map IPSEC 10 ipsec-isakmp
 set peer 100.2.2.2
 set transform-set myset
 match address 100
!
interface Loopback0
 ip address 192.168.1.1 255.255.255.0
 ip nat inside
!
interface FastEthernet0/0.101
 encapsulation dot1Q 101
 ip address 100.1.1.1 255.255.255.0
 ip nat outside
 crypto map IPSEC
!
ip route 0.0.0.0 0.0.0.0 100.1.1.100
!
ip nat inside source list 1 interface FastEthernet0/0.101 overload
!
access-list 1 permit 192.168.1.0 0.0.0.255
access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255

R2

crypto isakmp policy 1
 encr 3des
 hash md5
 authentication pre-share
 group 2
crypto isakmp key cisco address 100.1.1.1
crypto isakmp keepalive 30 periodic
!
crypto ipsec transform-set myset esp-3des esp-sha-hmac
!
crypto map IPSEC 10 ipsec-isakmp
 set peer 100.1.1.1
 set transform-set myset
 match address 100
!
interface Loopback0
 ip address 192.168.2.2 255.255.255.0
 ip nat inside
!
interface FastEthernet0/0.102
 encapsulation dot1Q 102
 ip address 100.2.2.2 255.255.255.0
 ip nat outside
 crypto map IPSEC
!
ip route 0.0.0.0 0.0.0.0 100.2.2.100
!
ip nat inside source list 1 interface FastEthernet0/0.102 overload
!
access-list 1 permit 192.168.2.0 0.0.0.255
access-list 100 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255

トラブルの症状

R1やR2からはインターネットへの接続は問題なく行うことができます。R1からインターネット(150.1.1.100)へPingすると次のように成功します。

R1 インターネット(150.1.1.100)への通信

R1#ping 150.1.1.100 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 150.1.1.100, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/23/64 ms

ところが、R1とR2の拠点間のIPSecの通信ができません。

R1 拠点間の通信

R1#ping 192.168.2.2 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
U.U.U
Success rate is 0 percent (0/5)

IPSec SAを確認すると、R1とR2間でIPSec SAが確立できていないようです。

R1 show crypto ipsec sa

R1#show crypto ipsec sa

interface: FastEthernet0/0.101
    Crypto map tag: IPSEC, local addr 100.1.1.1

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
   remote ident (addr/mask/prot/port): (192.168.2.0/255.255.255.0/0/0)
   current_peer 100.2.2.2 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 0, #pkts encrypt: 0, #pkts digest: 0
    #pkts decaps: 0, #pkts decrypt: 0, #pkts verify: 0
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 100.1.1.1, remote crypto endpt.: 100.2.2.2
     path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0.101
     current outbound spi: 0x0(0)

     inbound esp sas:

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:

     outbound ah sas:

     outbound pcp sas:

問題

  • 拠点間の通信ができない原因はなんですか?
  • これを解決するためには、R1とR2でどのように設定を変更すればよいですか?

解答

拠点間の通信ができない原因はなんですか?

拠点間の通信のパケットがNAT変換されてしまい、暗号ACLに一致しないためIPSecで暗号化/カプセル化されていないから。

これを解決するためには、R1とR2でどのように設定を変更すればよいですか?

R1

no ip nat inside source list 1 interface FastEthernet0/0.101 overload
ip nat inside source route-map NO_NAT interface FastEthernet0/0.101 overload
!
access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
!
route-map NO_NAT deny 10
 match ip address 100
!
route-map NO_NAT permit 100

R2

no ip nat inside source list 1 interface FastEthernet0/0.102 overload
ip nat inside source route-map NO_NAT interface FastEthernet0/0.102 overload
!
access-list 100 permit ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255
!
route-map NO_NAT deny 10
 match ip address 100
!
route-map NO_NAT permit 100

解説

IPSec VPNの設定を行うときには、NATとの関連も注意する必要があります。拠点内のホストは基本的に、プライベートアドレスでアドレッシングされています。そのため、インターネットへ通信するときには、NATでプライベートアドレスとグローバルアドレスの変換が必要です。

IPSec VPNで拠点間の通信を行うパケット、つまりIPSecで暗号化するパケットに対しては、NATの変換をしてはいけません。

図 IPSec VPNとNAT
図 IPSec VPNとNAT


もし、IPSecで暗号化するパケットをNAT変換すると、次のような問題点が出てきます。

  • ルーティングできない
  • IPSecで暗号化するべきパケットが暗号化されなくなる

拠点内はプライベートアドレスでアドレッシングされています。拠点間の通信なのにNATでグローバルアドレス変換をしてしまうと、ルーティングがうまくできなくなる可能性があります。また、IPSecで暗号化する対象のパケットをcrypto map内のアクセスリスト(暗号ACL)で指定します。拠点間の通信なのにNATでアドレス変換してしまうと、crypto mapのアクセスリストに一致しなくなります。つまり、IPSecで暗号化するべきパケットなのに暗号化されずにそのままインターネットへ転送されることになります。

今回のトラブルについては、たとえ拠点間の通信のパケットをNAT変換してしまってもルーティングは大丈夫です。R1、R2ではデフォルトルートがあるからです。ですが、crypto map内のアクセスリストに一致しなくなり、暗号化せずにインターネットへ転送されてしまいます。拠点間の通信のパケットは、送信先IPアドレスとしてプライベートアドレスが指定されています。これをそのままインターネットに転送しても、当然、ISPでルーティングしません。

解決するためには、NATの設定を変更します。R1、R2のNATの設定を振り返ります。すると、送信元IPアドレスがそれぞれの拠点内のアドレスになっているパケットをすべてアドレス変換の対象としています。

R1 NAT設定抜粋

ip nat inside source list 1 interface FastEthernet0/0.101 overload
!
access-list 1 permit 192.168.1.0 0.0.0.255

この設定を変更して、拠点間の通信はNATによるアドレス変換の対象から除外します。このために、新しく拡張アクセスリストを作ってもいいのですが、crypto map内でIPSec化対象パケットを指定する拡張アクセスリストがすでにあります。これを流用してルートマップを使って次のように設定できます。

R1 NAT設定の変更 拠点間の通信はNAT変換の対象外

no ip nat inside source list 1 interface FastEthernet0/0.101 overload
ip nat inside source route-map NO_NAT interface FastEthernet0/0.101 overload
!
access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
!
route-map NO_NAT deny 10
 match ip address 100
!
route-map NO_NAT permit 100

アクセスリスト100は、crypto mapで適用しているIPSec化対象パケットを指定する拡張アクセスリストです。IPSecで暗号化するパケットはNATの変換対象からはずすために、ルートマップ「NO_NAT」を作っています。NO_NATのシーケンス10のmatch条件でアクセスリスト100を関連づけて、これをdeny、つまりNATの変換対象からはずすようにしています。そして、シーケンス100ではそれ以外のすべてのパケットをNATの変換対象にしています。このルートマップ「NO_NAT」をip nat inside sourceコマンドで適用しています。R2でも、R1と同様に拠点間の通信、つまりIPSecで暗号化する対象パケットをNAT変換の対象からはずす設定を行います。

図 R1でのNAT設定変更のまとめ
図 R1でのNAT設定変更のまとめ

このようにNATの設定を変更すると、インターネットへの通信も拠点間の通信もすべて問題なく行うことができます。

R1 インターネット、拠点間の通信の確認とIPSec SA

R1#ping 150.1.1.100

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 150.1.1.100, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/25/64 ms
R1#ping 192.168.2.2 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 8/28/72 ms
R1#show crypto ipsec sa

interface: FastEthernet0/0.101
    Crypto map tag: IPSEC, local addr 100.1.1.1

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0)
   remote ident (addr/mask/prot/port): (192.168.2.0/255.255.255.0/0/0)
   current_peer 100.2.2.2 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 10, #pkts encrypt: 10, #pkts digest: 10
    #pkts decaps: 10, #pkts decrypt: 10, #pkts verify: 10
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 5, #recv errors 0

     local crypto endpt.: 100.1.1.1, remote crypto endpt.: 100.2.2.2
     path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0.101
     current outbound spi: 0x86F25C31(2264030257)

     inbound esp sas:
      spi: 0xAE57D550(2924991824)
        transform: esp-3des esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2001, flow_id: SW:1, crypto map: IPSEC
        sa timing: remaining key lifetime (k/sec): (4553498/3580)
        IV size: 8 bytes
        replay detection support: Y
        Status: ACTIVE

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x86F25C31(2264030257)
        transform: esp-3des esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2002, flow_id: SW:2, crypto map: IPSEC
        sa timing: remaining key lifetime (k/sec): (4553498/3579)
        IV size: 8 bytes
        replay detection support: Y
        Status: ACTIVE

     outbound ah sas:

     outbound pcp sas: