Hi,
You may try with vpp-swan plugin that makes Strongswan offloading IPsec
to VPP and keep the IKE part to itself.
The project is still not perfect but takes care of child-SA and
overlapped subnet.
As of ipip interface instead of ipsec interface - it is correct behavior
as it allows sharing tunnel implementation between IPsec/wireguard/gso etc.
However vpp-swan did not use the ipip interface feature in VPP due to
the problem you noticed.
You may find the vpp-swan in vpp/extra/strongswan/vpp_swan.
Regards,
Fan
On 3/1/2023 4:02 AM, Ashish Mittal wrote:
Hi Varun,
Pls find my inputs inline.
Regards
Ashish Mittal
On Sat, 25 Feb, 2023, 11:23 pm Varun Tewari, <tewari.va...@gmail.com>
wrote:
Hello Team,
I am new to VPP and probing this technology to build an IPSec
responder for our use-cases.
Our initial tests do show the performance might of VPP.
However on probing this further in depth, I noticed a few
limitations and I am dropping this rider seeking clarification
around these.
All my observations are for VPP 23.02 and am using VPP’s Ikev2
plugin.I am using a linux with strongswan as the peer for my tests.
My observations:
1.
VPP seems doesn’t support multiple child-sa (phase 2 sa, ipsec sa)
within the same tunnel.
Single IPsec SA works fine. An interface ipip0 gets created and
SPD shows the correct binding (show ipsec all).
However ,when I bring up the second child-sa for a different TS, I
se the SPD gets overwritten for the interface and the new child-sa
gets installed overwriting the previous one.
For sure this is leading to traffic drop for the traffic hitting
the first TS.
Q: Is this by design or have I got my config wrong in some way.
Here the quick output from the VPP and strongswan
sudo swanctl --list-sas
net-1: #11, ESTABLISHED, IKEv2, abb046c62a60c38a_i* dc95e079629854ca_r
local 'roadwarrior.vpn.example.com
<http://roadwarrior.vpn.example.com>' @ 17.17.17.1[500]
remote 'vpp.home' @ 17.17.17.2[500]
AES_CBC-256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_2048
established 848s ago, reauth in 84486s
net-1: #16, reqid 16, INSTALLED, TUNNEL,
ESP:AES_CBC-192/HMAC_SHA1_96/ESN
installed 848s ago, rekeying in 84690s, expires in 85552s
in cec3d263, 24717 bytes, 107 packets, 687s ago
out a1816d8f, 179718 bytes, 778 packets, 0s ago
local 16.16.16.0/24 <http://16.16.16.0/24>
remote 18.18.18.0/24 <http://18.18.18.0/24>
net-2: #17, reqid 17, INSTALLED, TUNNEL,
ESP:AES_CBC-192/HMAC_SHA1_96/ESN
installed 686s ago, rekeying in 84831s, expires in 85714s
in cd14add0, 122199 bytes, 529 packets, 2s ago
out de989d78, 122199 bytes, 529 packets, 2s ago
local 16.16.15.0/24 <http://16.16.15.0/24>
remote 18.18.18.0/24 <http://18.18.18.0/24>
vpp# show ipsec all
[0] sa 2181038080 (0x82000000) spi 3468939875 (0xcec3d263)
protocol:esp flags:[esn anti-replay ]
[1] sa 3254779904 (0xc2000000) spi 2709613967 (0xa1816d8f)
protocol:esp flags:[esn anti-replay inbound ]
[2] sa 2181038081 (0x82000001) spi 3440684496 (0xcd14add0)
protocol:esp flags:[esn anti-replay ]
[3] sa 3254779905 (0xc2000001) spi 3734543736 (0xde989d78)
protocol:esp flags:[esn anti-replay inbound ]
SPD Bindings:
ipip0 flags:[none]
output-sa:
[2] sa 2181038081 (0x82000001) spi 3440684496 (0xcd14add0)
protocol:esp flags:[esn anti-replay ]
input-sa:
[3] sa 3254779905 (0xc2000001) spi 3734543736 (0xde989d78)
protocol:esp flags:[esn anti-replay inbound ]
IPSec async mode: off
vpp#
All 4 SAs exist, however the SPD binding shows the latest 2, that
overwrote the SAs for the previous TS leading to traffic drop.
AM=> IKEv2 plugin is experimental state yet. This behaviour that you
are observing, is unfortunately current implementation. Consider it
either a bug or simplification done for experimental implementation.
2.
Overlapping subnets between different Ipsec tunnel
When Ikev2 completes, I see, it creates an pip interface and
relevant Child-SAs and ties them to the interface to protect traffic.
So far all is good.
Now, we add an route into VPP to route the traffic via this ipip
interface for each of the source subnet that are expected to be
protected by the tunnel.
This works fine as long as I keep the subnets distinct.
Q: What’s the usual strategy when we have overlapping subnets in
two distinct tunnels ?
T1: SrcSubnet1 DestinationSubnet1
T2: SrcSubnet1 DestinationSubnet2
When T1 is brought up, we add a FIB entry for SrcSubnet1 via
ipipT1 and things works fine.
When T2 comes up, ipipT2 is created and now I need to add FIB
entry for SrcSubnet1 via ipipT2 and as expected things break here.
AM=> I am not sure but it can be done via ABF instead of FIB
entries. I have never tried that but ABF is used for that.
3.
IpIp vs Ipsec interface
For Route based VPP IPsec, I see two options as per the documentation.
The doc says, Ikev2 will create an ipsec interface, however it
creates an ipip interface. Is this expected ?
The interface works okay for me, but wasn’t sure why the difference.
Further on probing the code, I do see Ikev2 plugin is creating an
ipip interface not ipsec interface as the doc says.
AM=> Latest implementation uses ipip tunnel instead of ipsec
interface. You are looking at older documentation so kindly check
latest one.
Thank you in advance for all your comments here.
*
*
*शुभ कामनाएँ*,
Varun Tewari
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#22639): https://lists.fd.io/g/vpp-dev/message/22639
Mute This Topic: https://lists.fd.io/mt/97230775/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/1480452/21656/631435203/xyzzy
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-