Hi again,

On 11/03/2020 11:33 am, Paul Wouters wrote:
On Tue, 10 Mar 2020, Reuben Farrelly wrote:

I'd like to convert an existing, working configuration from VTI to XFRM support.  But obviously I am missing something as it doesn't seem to be a straightforward change.

My existing config looks like this:

conn router-2.reub.net-ipv4

        leftsubnet=0.0.0.0/0

        rightsubnet=0.0.0.0/0

        mark=1/0xffffffff
        vti-interface=vti-1
        leftvti=192.168.6.1/30

That all works just fine.  It is entirely route based, whatever traffic is routed down the link is encrypted, and it works as expected.

However to convert over to use xfrm I changed the following:

- change leftvti= to be leftinterface-ip=
- change vti-interface= to ipsec-interface=

Yes, but it has to be either "yes" (meaning 1) or a number.

- remove mark=  (is this even necessary for vti anymore?)

It was needed for VTI but not for XFRMi. We should probably not allow it
with ipsec-interface= set.

Ok so my current xfrm config now looks like this:

conn router-2.reub.net-ipv4
        left=172.105.178.21
        [email protected]
        leftsubnet=0.0.0.0/0
        right=%any
        [email protected]
        rightsubnet=0.0.0.0/0
        authby=secret
        ikev2=insist
        ikelifetime=86400s
        salifetime=3600s
        # IOS XE
        ike=aes-sha2_512;dh19
        # Classic IOS
        #ike=aes-sha2_512;dh5
        dpddelay=15
        dpdtimeout=45
        dpdaction=clear
        auto=add
        ipsec-interface=yes
        leftinterface-ip=192.168.6.1/30

asynchronous network error report on eth0 (172.105.178.21:500) for message to 1.144.144.75 port 500, complainant 172.105.178.21: No route to host [errno 113, origin ICMP type 3 code 1 (not authenticated)] Mar 10 11:27:35.161044: "router-2.reub.net-ipv4"[1] 1.144.144.75 #2: liveness_check - peer 1.144.144.75 has not responded in 59 seconds, with a timeout of 45, taking action:clear

This looks like an imploded route that caused IKE traffic to fail?

Mar 10 11:27:35.185931: "router-2.reub.net-ipv4"[1] 1.144.144.75: unroute-client output: leftsubet == rightsubnet = 0.0.0.0/0 can not add route

this is fine. you need to do the routing into the ipsec interface for
0/0 to 0/0 tunnels.

Mar 10 11:25:50.161136: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: received unsupported NOTIFY v2N_SET_WINDOW_SIZE

You can ignore that.

Mar 10 11:25:50.161141: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: received unsupported NOTIFY v2N_NON_FIRST_FRAGMENTS_ALSO

And that.

Mar 10 11:25:50.202585: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: route-client output: leftsubet == rightsubnet = 0.0.0.0/0 can not add route

This is okay, you need to route manually because only you know what
traffic should go into the ipsecX interface.

At this stage I only need to get 192.168.6.1/30 talking to the far end IPSec tunnel on 192.168.6.2/30 - so only a directly connected subnet for now.  But yes I'd like to have it work in such a way that I only need to route traffic down the tunnel using standard IP routing and not have to reconfigure anything with the tunnel in future if this changes.

Mar 10 11:25:50.210179: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: route-client output: /usr/libexec/ipsec/_updown.netkey: doroute "ip -4 rule add prio 100 to 0.0.0.0/0 fwmark 1/0xffffffff lookup 50" failed (RTNETLINK answers: Operation not supported)

This seems to indicate you mistakenly used the mark= option with XFRMi.

Even without mark= configured the mark option seems to still be set.

As it turns out, this error was caused by missing bits of kernel support for the use of 'ip rule'.  As this wasn't required in the past I hadn't had to enable advanced IP routing and a bunch of other kernel options for the 'ip link' arguments to be accepted. To be fair this wasn't really an issue with libreswan, but the fact that 'ip rule' didn't work without them meant that there is a soft dependency there that perhaps should be documented, or present in an error message.

So things are looking better now:

Mar 11 18:36:31.414035: Kernel supports NIC esp-hw-offload
Mar 11 18:36:31.414176: adding interface eth0 172.105.178.21:500
Mar 11 18:36:31.414207: adding interface eth0 172.105.178.21:4500
Mar 11 18:36:31.414223: adding interface lo 127.0.0.1:500
Mar 11 18:36:31.414239: adding interface lo 127.0.0.1:4500
Mar 11 18:36:31.414272: adding interface lo [::1]:500
Mar 11 18:36:31.414290: adding interface eth0 [2400:8907::f03c:92ff:fe08:4896]:500
Mar 11 18:36:31.416194: loading secrets from "/etc/ipsec.secrets"
Mar 11 18:36:31.416541: loading secrets from "/etc/ipsec.d/router-2.reub.net-ipv4.secrets" Mar 11 18:36:46.396013: "router-2.reub.net-ipv4"[1] 1.144.144.75: local IKE proposals (IKE SA responder matching remote proposals): Mar 11 18:36:46.396057: "router-2.reub.net-ipv4"[1] 1.144.144.75: 1:IKE=AES_CBC_256+AES_CBC_128-HMAC_SHA2_512-HMAC_SHA2_512_256-ECP_256 Mar 11 18:36:46.396071: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: proposal 1:IKE=AES_CBC_256-HMAC_SHA2_512-HMAC_SHA2_512_256-ECP_256 chosen from remote proposals 1:IKE:ENCR=AES_CBC_256;PRF=HMAC_SHA2_512;PRF=HMAC_SHA2_384;INTEG=HMAC_SHA2_512_256;INTEG=HMAC_SHA2_384_192;DH=ECP_256;DH=MODP2048;DH=ECP_521;DH=MODP1536[first-match] Mar 11 18:36:46.397249: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: STATE_PARENT_R1: received v2I1, sent v2R1 {auth=IKEv2 cipher=AES_CBC_256 integ=HMAC_SHA2_512_256 prf=HMAC_SHA2_512 group=DH19} Mar 11 18:36:46.437932: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: processing decrypted IKE_AUTH request: SK{V,IDi,AUTH,SA,TSi,TSr,N,N,N,N} Mar 11 18:36:46.437957: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: IKEv2 mode peer ID is ID_USER_FQDN: '[email protected]' Mar 11 18:36:46.438034: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: authenticated using authby=secret Mar 11 18:36:46.438130: "router-2.reub.net-ipv4"[1] 1.144.144.75: local ESP/AH proposals (IKE_AUTH responder matching remote ESP/AH proposals): Mar 11 18:36:46.438138: "router-2.reub.net-ipv4"[1] 1.144.144.75:   1:ESP=AES_GCM_C_256-NONE-NONE-DISABLED Mar 11 18:36:46.438143: "router-2.reub.net-ipv4"[1] 1.144.144.75:   2:ESP=AES_GCM_C_128-NONE-NONE-DISABLED Mar 11 18:36:46.438147: "router-2.reub.net-ipv4"[1] 1.144.144.75: 3:ESP=AES_CBC_256-HMAC_SHA2_512_256+HMAC_SHA2_256_128-NONE-DISABLED Mar 11 18:36:46.438152: "router-2.reub.net-ipv4"[1] 1.144.144.75: 4:ESP=AES_CBC_128-HMAC_SHA2_512_256+HMAC_SHA2_256_128-NONE-DISABLED Mar 11 18:36:46.438163: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: proposal 1:ESP=AES_CBC_256-HMAC_SHA2_256_128-DISABLED SPI=59169665 chosen from remote proposals 1:ESP:ENCR=AES_CBC_256;INTEG=HMAC_SHA2_256_128;ESN=DISABLED[first-match] Mar 11 18:36:46.438195: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: received unsupported NOTIFY v2N_SET_WINDOW_SIZE Mar 11 18:36:46.438200: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: received unsupported NOTIFY v2N_NON_FIRST_FRAGMENTS_ALSO Mar 11 18:36:46.479732: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: route-client output: leftsubet == rightsubnet = 0.0.0.0/0 can not add route Mar 11 18:36:46.486800: "router-2.reub.net-ipv4"[1] 1.144.144.75 #2: negotiated connection [0.0.0.0-255.255.255.255:0-65535 0] -> [0.0.0.0-255.255.255.255:0-65535 0] Mar 11 18:36:46.486825: "router-2.reub.net-ipv4"[1] 1.144.144.75 #2: STATE_V2_IPSEC_R: IPsec SA established tunnel mode {ESP/NAT=>0x59169665 <0xb940b851 xfrm=AES_CBC_256-HMAC_SHA2_256_128 NATOA=none NATD=1.144.144.75:4500 DPD=active} Mar 11 18:36:46.545742: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: STATE_PARENT_R2: received v2I2, PARENT SA established Mar 11 18:46:23.141516: packet from 146.88.240.4:49654: 0-byte length of ISAKMP Message is smaller than minimum Mar 11 18:46:23.141538: packet from 146.88.240.4:49654: received packet with mangled IKE header - dropped Mar 11 19:30:34.981137: "router-2.reub.net-ipv4"[1] 1.144.144.75: local ESP/AH proposals (CREATE_CHILD_SA responder matching remote ESP/AH proposals): Mar 11 19:30:34.981205: "router-2.reub.net-ipv4"[1] 1.144.144.75:   1:ESP=AES_GCM_C_256-NONE-ECP_256-DISABLED Mar 11 19:30:34.981211: "router-2.reub.net-ipv4"[1] 1.144.144.75:   2:ESP=AES_GCM_C_128-NONE-ECP_256-DISABLED Mar 11 19:30:34.981217: "router-2.reub.net-ipv4"[1] 1.144.144.75: 3:ESP=AES_CBC_256-HMAC_SHA2_512_256+HMAC_SHA2_256_128-ECP_256-DISABLED Mar 11 19:30:34.981223: "router-2.reub.net-ipv4"[1] 1.144.144.75: 4:ESP=AES_CBC_128-HMAC_SHA2_512_256+HMAC_SHA2_256_128-ECP_256-DISABLED Mar 11 19:30:34.981238: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: proposal 1:ESP=AES_CBC_256-HMAC_SHA2_256_128-ECP_256-DISABLED SPI=df4e8bde chosen from remote proposals 1:ESP:ENCR=AES_CBC_256;INTEG=HMAC_SHA2_256_128;DH=ECP_256;ESN=DISABLED[first-match] Mar 11 19:30:34.983938: "router-2.reub.net-ipv4"[1] 1.144.144.75 #3: negotiated new IPsec SA [0.0.0.0-255.255.255.255:0-65535 0] -> [0.0.0.0-255.255.255.255:0-65535 0] Mar 11 19:30:34.983994: "router-2.reub.net-ipv4"[1] 1.144.144.75 #3: negotiated connection [0.0.0.0-255.255.255.255:0-65535 0] -> [0.0.0.0-255.255.255.255:0-65535 0] Mar 11 19:30:34.984006: "router-2.reub.net-ipv4"[1] 1.144.144.75 #3: STATE_V2_IPSEC_R: IPsec SA established tunnel mode {ESP/NAT=>0xdf4e8bde <0x84709510 xfrm=AES_CBC_256-HMAC_SHA2_256_128-DH19 NATOA=none NATD=1.144.144.75:4500 DPD=active} Mar 11 19:30:35.032835: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: received Delete SA payload: delete IPsec State #2 now Mar 11 19:30:35.032858: "router-2.reub.net-ipv4"[1] 1.144.144.75 #2: deleting other state #2 (STATE_V2_IPSEC_R) aged 3228.594s and NOT sending notification Mar 11 19:30:35.032890: "router-2.reub.net-ipv4"[1] 1.144.144.75 #2: ESP traffic information: in=383KB out=0B Mar 11 19:30:35.032996: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: STATE_PARENT_R2: received v2I2, PARENT SA established Mar 11 20:24:38.019055: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: proposal 1:ESP=AES_CBC_256-HMAC_SHA2_256_128-ECP_256-DISABLED SPI=387d8674 chosen from remote proposals 1:ESP:ENCR=AES_CBC_256;INTEG=HMAC_SHA2_256_128;DH=ECP_256;ESN=DISABLED[first-match] Mar 11 20:24:38.021403: "router-2.reub.net-ipv4"[1] 1.144.144.75 #4: negotiated new IPsec SA [0.0.0.0-255.255.255.255:0-65535 0] -> [0.0.0.0-255.255.255.255:0-65535 0] Mar 11 20:24:38.021419: "router-2.reub.net-ipv4"[1] 1.144.144.75 #4: negotiated connection [0.0.0.0-255.255.255.255:0-65535 0] -> [0.0.0.0-255.255.255.255:0-65535 0] Mar 11 20:24:38.021429: "router-2.reub.net-ipv4"[1] 1.144.144.75 #4: STATE_V2_IPSEC_R: IPsec SA established tunnel mode {ESP/NAT=>0x387d8674 <0x6a994606 xfrm=AES_CBC_256-HMAC_SHA2_256_128-DH19 NATOA=none NATD=1.144.144.75:4500 DPD=active} Mar 11 20:24:38.085941: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: received Delete SA payload: delete IPsec State #3 now Mar 11 20:24:38.085956: "router-2.reub.net-ipv4"[1] 1.144.144.75 #3: deleting other state #3 (STATE_V2_IPSEC_R) aged 3243.104s and NOT sending notification Mar 11 20:24:38.085979: "router-2.reub.net-ipv4"[1] 1.144.144.75 #3: ESP traffic information: in=385KB out=0B Mar 11 20:24:38.086059: "router-2.reub.net-ipv4"[1] 1.144.144.75 #1: STATE_PARENT_R2: received v2I2, PARENT SA established

I had to manually set an IP address on the ipsec1 interface, but it still doesn't work.

lightning ~ # ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether f2:3c:92:08:48:96 brd ff:ff:ff:ff:ff:ff
5: ipsec1@eth0: <NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/none
lightning ~ # ip xfrm state
src 1.144.144.75 dst 172.105.178.21
        proto esp spi 0x6a994606 reqid 16393 mode tunnel
        replay-window 32 flag af-unspec
        output-mark 0x1
        auth-trunc hmac(sha256) 0xe35ff0a1416b27730d7f8fb24f95a1d9d12a1a228f6d066d3db61f8d6863d1b6 128         enc cbc(aes) 0x0098ade94690231c3fb762d02721b7ad6da4ccab469fd70c1d48cf43df3c80a7
        encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
        anti-replay context: seq 0xd14, oseq 0x0, bitmap 0xffffffff
        if_id 0x1
src 172.105.178.21 dst 1.144.144.75
        proto esp spi 0x387d8674 reqid 16393 mode tunnel
        replay-window 32 flag af-unspec
        output-mark 0x1
        auth-trunc hmac(sha256) 0xac13eb8e16c96d75b1e45de834bafa8aaee3529b055043f1db3a8f57146c3d6b 128         enc cbc(aes) 0x813222dd3fdd3fd918b73990226ef48961eb4f84fd217ccc1be4a4324a86bfef
        encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
        anti-replay context: seq 0x0, oseq 0x504, bitmap 0x00000000
        if_id 0x1
lightning ~ #

lightning ~ # ip -d link show dev ipsec1
5: ipsec1@eth0: <NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/none  promiscuity 0 minmtu 68 maxmtu 65535
    xfrm if_id 0x1 addrgenmode random numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
lightning ~ # ip -s link show dev ipsec1
5: ipsec1@eth0: <NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/none
    RX: bytes  packets  errors  dropped overrun mcast
    1130640    13460    0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    170268     2027     0       12      0       0
lightning ~ #

lightning ~ # ip route
default via 172.105.178.1 dev eth0 metric 2
172.105.178.0/24 dev eth0 proto kernel scope link src 172.105.178.21
192.168.6.0/30 dev ipsec1 proto kernel scope link src 192.168.6.1
lightning ~ #

lightning ~ # ip rule show
0:      from all lookup local
100:    from all fwmark 0x1 lookup 50
32766:  from all lookup main
32767:  from all lookup default
lightning ~ #

Looks a lot like IPSec is happy but the routing/interface side of things is not.  The Cisco device on the far end is sending packets but not receiving any.  The ipsec1 interface is sending and receiving packets though.  The Cisco seems happy with the negotiation too so looks like we're close - but not quite there.

I've made no changes at all on the Cisco and I assume that I won't need to do so for this to work given it did previously with vti.

Reuben


_______________________________________________
Swan mailing list
[email protected]
https://lists.libreswan.org/mailman/listinfo/swan

Reply via email to