LoginSignup
7
3

More than 5 years have passed since last update.

Cisco/StrongSwan IKEv2相性問題と解決法、そして少しだけAlibaba Cloud

Last updated at Posted at 2018-09-02

現象

StrongSWANでrightsubnetまたはleftsubnetに複数のCIDRを設定し、IKEv2でCisco社の機器(全部確認したわけじゃないけど)と接続しようとした場合、どちらか1つのCIDRとしか通信ができなくなる問題。
image.png

ipsec.confの設定例

config setup
        keyexchange=ikev2
        # 省略

conn strongswan_to_cisco
        # 省略
        type=tunnel
        leftsubnet=A.A.A.0/24,B.B.B.0/24
        # 省略

Cisco側の設定例

 # 省略

crypto map cisco_strongswan_vpn 10 ipsec-isakmp
 # 省略
 match address cisco_strongswan_acl

ip access-list extended cisco_strongswan_acl
 permit ip C.C.C.0 0.0.0.255 A.A.A.0 0.0.0.255
 permit ip C.C.C.0 0.0.0.255 B.B.B.0 0.0.0.255
 # 省略

原因

どちらのバグでもありません。IKEv2の機能の実装の仕方の問題。全部の機種を試した訳ではないけど、同じポリシーで実装されてるので、ASAとかISRとかASRとか全て当てはまるのではないかな?

IKEv2開始

トンネル作成のネゴシエーション。認証後、どのような暗号化や改ざん検知の仕組みを使うのかなどのやりとりを開始しますが、その中でトンネルにどのトラフィックを乗せるかの調整も含まれます。ちなみにIPSecトンネルの実態は最低in/out一つずつ、合計2本1ペアで作成されるSA(Security Accosiation)と呼ばれるものですが、以下、図では1本のパイプで表します。

image.png

StrongSWAN側の設定の意味

全ての"conn"にあるrightsubnetとleftsubnetの組み合わせを通す1組のSA、IPSecトンネルを作成するという意味です。ちなみにIKEv1ではできません。IKEv2の"Traffic Selector"の機能です。

image.png

Cisco側の設定の意味

ACL一行毎に必要なトンネルを作成しようとします。IKEv1の仕組みを踏襲したのでしょうか?とはいえ、IKEv2的にもNGではないという理解です。
image.png

何が起きるか

最初のSA

Cisco側から来たproposalは"A.A.A.0/24-C.C.C.0/24"ですが、これはStrongSWAN側の設定の一部に含まれるため、範囲を狭めた上でStrongSWANは受け入れることができます。(ポリシーの一部のみで合意することを”Traffic Selector Narrowing"と言います。)
image.png

2本目のSA

もう1組のSAをCiscoは要求しますが、StrongSWANの設定はあくまで1本のトンネル(2本1組のSA)を作成する設定なので、これを受け入れることができません
image.png

結果

Cisco側で1つのACLで定義されたトラフィック用に1本のトンネルが作成され、その範囲で通信はできますが、他の通信はできません。
image.png

Solution

1.StrongSWANをCisco側に合わせる

ipsec.confのConnectionを二つ作成すれば2つSAを作る設定となり、Ciscoの2本目のSAも受け入れます。
image.png
下記は本家StrongSWANのサイトの設定例です。
https://wiki.strongswan.org/issues/758

conn strongswan_to_cisco
        dpdaction=restart
        type=tunnel
        # no auto here
        leftauth=psk
        leftid=54.XXX.XX.XX ## our strongSwan public IP.  
        leftsubnet=172.xx.x.250/32 ## The IP assigned to our Gateway on the Cisco VPN
        lefthostaccess=yes
        right=65.XXX.XX.XX  ## Public IP of the Cisco VPN device
        # no rightsubnet here
        rightauth=psk
        ike=3des-sha1-modp1024
        esp=3des-sha1-modp1024

conn strongswan_to_cisco_1
        also=strongswan_to_cisco
        leftsubnet=10.zzz.zz.70/32
        auto=start

conn strongswan_to_cisco_2
        also=strongswan_to_cisco
        leftsubnet=10.zzz.zz.11/32
        auto=start

2.CiscoをStrongSWAN側に合わせる

すみません、私にはできませんでした。方法はあるのかな?

3.両方の設定を変える

やりようは色々あるかと思います。
以上はPolicy BasedなIPSecを前提として書きましたが、Routing Basedで設定するとか、GREなどの別の仕組みでトンネルを作成し、IPSecはtransport modeでhost to hostでの暗号化だけ担うとか。

そして少しだけAlibaba Cloud

StrongSWA的な設定

1つの"IPSec connection"を作成し、その中でローカルネットワークまたはリモートネットワークを複数設定することで、複数のポリシーのトラフィックを運ぶ一本トンネルを作成することができ、既述StrongSWANの設定で接続できます。もちろんIKEv2である必要があります。

image.png

Cisco的な設定

IPSec connection 同じAlibaba CloudのVPN GatewayとCustomer Gatewayを指定して複数のConnectionを作成すればその数だけトンネルが作成されます。これでCiscoのそれぞれのACLに合わせてIPSec connectionを作ることで既述Ciscoとも接続できます。これはIKEv2独自の部分を利用していないので、IKEv1でも接続することができます。

image.png

背景

数年前ハマったトラブルをすっかり忘れて再度ハマったので防備録も兼ねて。StringSWANのwikiでも時々話題になっていますね。
https://wiki.strongswan.org/issues/758
https://wiki.strongswan.org/issues/2529

FragmentationはEncryptionの後?先?問題や、Rekey問題はいっぱい日本語の情報ありますが、このドキュメントあんまりないですね。

なお、以上はエンジニアの完全に個人的な趣味であり、どの組織の見解も反映していません。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3