Skip to content

Conversation

@giga1699
Copy link
Contributor

@giga1699 giga1699 commented Jan 2, 2026

Change summary

Adds support for IKEv2 post-quantum preshared keys

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes)
  • Migration from an old Vyatta component to vyos-1x, please link to related PR inside obsoleted component
  • Other (please describe):

Related Task(s)

https://vyos.dev/T8136

Related PR(s)

vyos/vyos-documentation#1733

How to test / Smoketest result

test_site_to_site_nist_800_77_cnsa_1_with_ppk (__main__.TestVPNIPsec.test_site_to_site_nist_800_77_cnsa_1_with_ppk) ... ok

----------------------------------------------------------------------
Ran 1 test in 3.671s

OK

Checklist:

  • I have read the CONTRIBUTING document
  • I have linked this PR to one or more Phabricator Task(s)
  • I have run the components SMOKETESTS if applicable
  • My commit headlines contain a valid Task id
  • My change requires a change to the documentation
  • I have updated the documentation accordingly

@github-actions
Copy link

github-actions bot commented Jan 2, 2026

👍
No issues in PR Title / Commit Title

Copy link
Member

@sarthurdev sarthurdev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking good, can you extend ipsec smoketests for the new use cases?

@giga1699
Copy link
Contributor Author

giga1699 commented Jan 3, 2026

I was going to make an attempt to write a smoke test. It’ll be my first run at writing a smoketest.

I have already tested against known working strongSwan configs. I’ll take those tests to put into smoketest and update.

I’m also planning to put together the documentation PR. Just haven’t gotten to that yet.

I’ll update the initial PR comment to reflect these updates when complete, and take this out of draft.

@giga1699 giga1699 marked this pull request as ready for review January 3, 2026 20:27
@giga1699
Copy link
Contributor Author

giga1699 commented Jan 3, 2026

Added relevant smoketest, and completed documentation update. I think this should be ready to go.

@giga1699 giga1699 requested a review from sarthurdev January 9, 2026 01:46
Copy link
Member

@sarthurdev sarthurdev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the smoketest.

Just needs couple extra steps for config validation and XML deduplication.

@giga1699
Copy link
Contributor Author

Much appreciated for catching those items. It got me thinking about some additional error checking.

I added in that PPK IDs need to be unique, so it now checks that all IDs are unique. Since I had to gather all the IDs for that check, the verify() also confirms that a PPK ID used in a connection is actually defined in the authentication config.

It might be useful to replicate that check for PSKs. I'm happy to open a new task and take care of that if it would be helpful.

Branch was also rebased to current.

@giga1699 giga1699 requested a review from sarthurdev January 10, 2026 00:41
Comment on lines 277 to 279
for ppkID in ppk_config['id']:
if ppkID in ppk_ids:
raise ConfigError(f'Authentication PPK "{ppk}" has duplicate ID "{ppkID}" from another PPK. IDs should be unique.')
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In my testing if you use the same ID for multiple PPKs, it seems like strongSwan will only use the last loaded PPK for that ID. That is why I put in a check. The ID needs not be an IP address, it is a string that is passed in the IKE phase 1 to let the other side know I'm using key XX. If the receiving side has a key with that same key ID, then it will use that secret to try and establish the SA.

@giga1699
Copy link
Contributor Author

Removed the check in the connection configurations to confirm that a PPK ID was defined in the authentication configuration. This allows an operator to define a wildcard match for the PPK ID, as referenced in the strongSwan example PPK configuration.

Copy link
Member

@sever-sever sever-sever left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add the ability to use PPK ID and secrets for IPsec connections

@giga1699 giga1699 force-pushed the T8136 branch 2 times, most recently from 117394b to a641609 Compare January 13, 2026 02:22
Copy link
Contributor

@alexandr-san4ez alexandr-san4ez left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please also fix linter errors for your changes.

Copy link
Contributor

@alexandr-san4ez alexandr-san4ez left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Post-quantum preshared key support well implemented and ready to merge.

vyos@vyos:~$ /usr/libexec/vyos/tests/smoke/cli/test_vpn_ipsec.py
...
test_site_to_site_nist_800_77_cnsa_1_with_ppk (__main__.TestVPNIPsec.test_site_to_site_nist_800_77_cnsa_1_with_ppk) ... ok
...
----------------------------------------------------------------------
Ran 20 tests in 101.409s
OK

@sever-sever sever-sever requested a review from zdc January 13, 2026 12:26
Copy link
Member

@sarthurdev sarthurdev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requested changes addressed, code looks good, adds smoketest coverage. Locally verified CLI and resulting strongswan config/instance.

@sever-sever sever-sever added the bp/circinus Create automatic backport for circinus label Jan 20, 2026
Copy link
Member

@dmbaturin dmbaturin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The implementation seems sensible but I left a few suggestions.

@dmbaturin dmbaturin changed the title T8136: IPSEC PPK Support ipsec: T8136: IPSEC PPK support Jan 22, 2026
Copy link
Member

@dmbaturin dmbaturin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I applied fixes for my aesthetic objections. The logic seems fine, I have reservations about the idea to show up-ppk as a distinct status but I don't think anything in the PR is problematic.

@giga1699
Copy link
Contributor Author

I applied fixes for my aesthetic objections. The logic seems fine, I have reservations about the idea to show up-ppk as a distinct status but I don't think anything in the PR is problematic.

I wasn’t sure the best way to indicate PPK in use without modifying the table more. If that’s a better approach, I would be open to it. Putting parenthesis around ppk after up made it stray into the next column more, making readability more difficult.

Copy link
Contributor

@zdc zdc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good work here!

Beyond the minor changes I noted in the code review, I’d like to clarify the use of childless. Is this mandatory for PPK? If so, it should be addressed in verify() and documented - currently, I don’t see it mentioned anywhere. If it’s not mandatory, I think it warrants a dedicated PR with a clear explanation.

P.S. I have a theory on why it might be mandatory, but either way, this should be covered in both the code and documentation.

Comment on lines +52 to +58
if 'state' in sa and s(sa['state']) == 'ESTABLISHED':
if 'ppk' in sa and s(sa['ppk']) == 'yes':
state = 'up-ppk'
else:
state = 'up'
else:
state = 'down'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's better to introduce a new field with PPK presense. State variable values may be used in scripts and automations already, including customer-made.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think any change to the table output may affect scripts either way. Do you think adding a column at the end for PPK would be the best approach? Would that cause the text to extend too far to the right, and possibly wrap around on certain consoles?

Comment on lines +281 to +287
for ppk_id in ppk_config['id']:
if ppk_id in ppk_ids:
raise ConfigError(
f'Authentication PPK "{ppk}" has duplicate ID "{ppk_id}" from another PPK. IDs should be unique.'
)
ppk_ids.append(ppk_id)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@giga1699 I've seen your comment about this.

As I know, for PSK, the logic is a bit more complicated, and it actually allows to have same ID in multiple entries. If strongSwan uses the same logic, this check may not be entirely correct or complete.

Can you point to the relevant place in the strongSwan documentation or the code where this is explained for PPK?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A PPK ID is identifying a specific secret. A secret may share multiple IDs, but two separate secrets should not have a common ID. If I define secret "abc" with ID of "ID-1", then later define secret "def" with the same ID of "ID-1", only one of those two secrets will actually be tied with the ID "ID-1".

During IKE_AUTH, the PPK_ID is sent. This ID should be tied to a single shared secret between those devices. If multiple secrets were defined for the same ID, I'm not sure how any device would be able to determine which key to actually use. The PPK secret itself is used as part of the generation of the shared secret for the CHILD SA encryption, rather than solely as a way to identify the remote end like a PSK is used for. If both sides don't have the same shared secret negotiated, it wouldn't be able to pass traffic.

From RFC8784, section 1, paragraph 3

The general idea is that we add an additional secret that is shared between the initiator and the responder; this secret is in addition to the authentication method that is already provided within IKEv2. We stir this secret into the SK_d value, which is used to generate the key material (KEYMAT) for the Child Security Associations (SAs) and the SKEYSEED for the IKE SAs created as a result of the initial IKE SA rekey. This secret provides quantum resistance to the IPsec SAs and any subsequent IKE SAs. We also stir the secret into the SK_pi and SK_pr values; this allows both sides to detect a secret mismatch cleanly.

This check is to prevent an operator from accidentally defining two separate secrets that share the same ID. It is not preventing multiple IDs from being tied to the same secret.

This is perfectly valid where multiple IDs are tied to the same secret.

[edit vpn ipsec authentication]
vyos@vyos# show | commands
set ppk test id 'asdf'
set ppk test id 'fdsa'
set ppk test secret 'asdlgsgsakfhafuh4h83hf73hf83hd8'

This will generate properly in the swanctl.conf file

secrets {

ppk-test {
    # ID's from auth ppk <tag> id xxx
    id-0ed09c14-8073-4590-b722-dd09dce508bb = "asdf"
    id-0376dadf-59b2-4470-90c1-2aeb513175cc = "fdsa"
    secret = "asdlgsgsakfhafuh4h83hf73hf83hd8"
}

}

What would become an issue is if the above configuration was commited, but an operator tried to do the following, trying to set a different secret for the ID 'asdf'.

set vpn ipsec authentication ppk test-2 id 'asdf'
set vpn ipsec authentication ppk test-2 secret 'this should not be valid, or it will cause unknown behavior'

I hope this explains my thought process on this check. Maybe I'm not fully understanding where you're coming from, so please let me know if we're not on the same page.

@giga1699
Copy link
Contributor Author

Good work here!

Beyond the minor changes I noted in the code review, I’d like to clarify the use of childless. Is this mandatory for PPK? If so, it should be addressed in verify() and documented - currently, I don’t see it mentioned anywhere. If it’s not mandatory, I think it warrants a dedicated PR with a clear explanation.

P.S. I have a theory on why it might be mandatory, but either way, this should be covered in both the code and documentation.

@zdc Childless is not a requirement for PPK. It is recommend in NIST 800-77 to use childless with PPK to hep protect some information in the initial IKE exchange, but there is no mandate.

Relevant excerpt from NIST 800-77:

While this protects the IPsec SAs (since their key material derivation depends on the PPK), the
initial IKE SA DH process is not protected by the PPK and can still be broken by a quantum
computer. This will lead to a loss of privacy of the IKE identities and other information
exchanged during the initial IKE Exchange, such as the traffic selectors used for the first IPsec
SA. This can be prevented if the IKE implementation allows for setting up a childless IKE SA
(without IPsec) and then immediately rekeying the IKE SA. This rekeyed IKE SA is protected by
the PPK, and IPsec SAs can then be set up using this new IKE SA without exposing any
information to adversaries with quantum computers.

We can certainly split the childless segment into a separate PR if you would prefer. RFC6023 lists multiple other use cases for childless.

o Checking the liveness status of the peer via liveness checks.

o Quickly setting up Child SAs without public key operations and
without user interaction.

o Authentication of the peer.

o Detection of NAT boxes between two hosts on the Internet.

I will work on the other changes today.

@zdc
Copy link
Contributor

zdc commented Jan 23, 2026

Childless is not a requirement for PPK. It is recommend in NIST 800-77 to use childless with PPK

This sounds like something that at least deserves a warning if PPK is configured without it. That was one of my concerns - if a user sets up PPK but doesn’t get full protection, it could be misleading and risky.

@giga1699
Copy link
Contributor Author

Childless is not a requirement for PPK. It is recommend in NIST 800-77 to use childless with PPK

This sounds like something that at least deserves a warning if PPK is configured without it. That was one of my concerns - if a user sets up PPK but doesn’t get full protection, it could be misleading and risky.

I will work on a check that if PPK is enabled, but childless is not, it will put a warning that says childless is recommended for use with PPK.

@giga1699
Copy link
Contributor Author

I think I have the minor revisions all complete. Just looking for some guidance on the best way to display PPK being in use, and to make sure everyone is on board with the check for unique PPK IDs. I went ahead and rebased as well to clean everything up.

@zdc and/or @dmbaturin I'm very open to thoughts on the best way to show PPK being active.

@giga1699
Copy link
Contributor Author

giga1699 commented Jan 23, 2026

Testing from VyOS with only a single PPK set

[edit vpn ipsec]
vyos@vyos# show | commands
set authentication ppk test id 'ppk-test'
set authentication ppk test secret '1b3718bf09b82e2d529253183cf4a934575c5a360d2a70a78a762b0b2dfc178cc05ed034d9ea61dca3b8d233b425b86b'
set authentication psk test id '10.0.48.85'
set authentication psk test secret '1b3718bf09b82e2d529253183cf4a934575c5a360d2a70a78a762b0b2dfc178cc05ed034d9ea61dca3b8d233b425b86b'
set esp-group test lifetime '30'
set esp-group test mode 'tunnel'
set esp-group test pfs 'dh-group20'
set esp-group test proposal 10 encryption 'aes256gcm128'
set esp-group test proposal 10 hash 'sha384'
set ike-group test close-action 'start'
set ike-group test dead-peer-detection action 'restart'
set ike-group test dead-peer-detection interval '30'
set ike-group test key-exchange 'ikev2'
set ike-group test lifetime '180'
set ike-group test proposal 10 dh-group '20'
set ike-group test proposal 10 encryption 'aes256gcm128'
set ike-group test proposal 10 hash 'sha384'
set site-to-site peer test authentication local-id '10.0.48.96'
set site-to-site peer test authentication mode 'pre-shared-secret'
set site-to-site peer test authentication ppk id 'ppk-test'
set site-to-site peer test authentication remote-id '10.0.48.85'
set site-to-site peer test connection-type 'initiate'
set site-to-site peer test default-esp-group 'test'
set site-to-site peer test ike-group 'test'
set site-to-site peer test local-address '10.0.48.87'
set site-to-site peer test remote-address '10.0.48.86'
set site-to-site peer test tunnel 10 local prefix '192.168.0.8/30'
set site-to-site peer test tunnel 10 remote prefix '192.168.0.0/30'

strongSwan 6.0.4 with two secrets set for the same PPK ID. Notice the correct one is set first, then the incorrect one is set second.

        vyos {
                ppk_id = ppk-test
                ppk_required = yes
                childless = prefer
                proposals = aes256gcm128-sha384-ecp384
                version = 2
                mobike = no
                local_addrs = 10.0.48.86
                remote_addrs = 10.0.48.87
                dpd_timeout = 120
                dpd_delay = 30
                rekey_time = 180s
                keyingtries = 1
                local {
                        auth = psk
                        id = "10.0.48.85"
                }
                remote {
                        id = "10.0.48.96"
                        auth = psk
                }
                children {
                        vyos-ts {
                                esp_proposals = aes256gcm128-sha384-ecp384
                                life_time = 30s
                                local_ts = 192.168.0.0/30
                                remote_ts = 192.168.0.8/30
                                mode = tunnel
                                start_action = trap|start
                                dpd_action = restart
                                close_action = restart
                                replay_window = 32
                        }
                }
        }
}

secrets {
        ike-test-b {
                id-b = "10.0.48.86"
                id-vyos = "10.0.48.96"
                secret = "1b3718bf09b82e2d529253183cf4a934575c5a360d2a70a78a762b0b2dfc178cc05ed034d9ea61dca3b8d233b425b86b"

        }
        ppk-test {
                id-ppk = "ppk-test"
                secret = "1b3718bf09b82e2d529253183cf4a934575c5a360d2a70a78a762b0b2dfc178cc05ed034d9ea61dca3b8d233b425b86b"
        }
        ppk-test2 {
                id-ppk = "ppk-test"
                secret = 0x1ca84e77684dd62663fad4daf05bd3bd28264e4461e9beb605581d1ed1fbec738a458d69f888f5b26f49344a0c411d4fc06e0858d33607c513c562f16f4051ff
        }
}

Logs from strongSwan

Jan 23 16:27:58 strongswan-test charon-systemd[1158]: deleting IKE_SA vyos[2] between 10.0.48.86[10.0.48.85]...10.0.48.87[10.0.48.96]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: restarting CHILD_SA vyos-ts
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: initiating IKE_SA vyos[3] to 10.0.48.87
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: generating IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) N(USE_PPK) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[500] to 10.0.48.87[500] (304 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: IKE_SA deleted
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: generating INFORMATIONAL response 2 [ ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[500] to 10.0.48.87[500] (57 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[500] to 10.0.48.86[500] (312 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: parsed IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(USE_PPK) N(CHDLESS_SUP) N(MULT_AUTH) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: selected proposal: IKE:AES_GCM_16_256/PRF_HMAC_SHA2_384/ECP_384
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: authentication of '10.0.48.85' (myself) with pre-shared key
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: generating IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) N(PPK_ID) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[500] to 10.0.48.87[500] (186 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[500] to 10.0.48.86[500] (65 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: parsed IKE_AUTH response 1 [ N(AUTH_FAILED) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: received AUTHENTICATION_FAILED notify error
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[500] to 10.0.48.86[500] (304 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) N(USE_PPK) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: 10.0.48.87 is initiating an IKE_SA
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: selected proposal: IKE:AES_GCM_16_256/PRF_HMAC_SHA2_384/ECP_384
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(USE_PPK) N(CHDLESS_SUP) N(MULT_AUTH) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[500] to 10.0.48.87[500] (312 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[4500] to 10.0.48.86[4500] (346 bytes)
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: parsed IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) N(NO_PPK) N(PPK_ID) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: looking for peer configs matching 10.0.48.86[10.0.48.85]...10.0.48.87[10.0.48.96]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: selected peer config 'vyos'
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: tried 1 shared key for '10.0.48.85' - '10.0.48.96', but MAC mismatched
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: peer supports MOBIKE, but disabled in config
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: generating IKE_AUTH response 1 [ N(AUTH_FAILED) ]
Jan 23 16:27:58 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[4500] to 10.0.48.87[4500] (65 bytes)

NOTICE

Jan 23 16:27:58 strongswan-test charon-systemd[1158]: tried 1 shared key for '10.0.48.85' - '10.0.48.96', but MAC mismatched

Change VyOS config

[edit vpn ipsec]
vyos@vyos# show | commands
set authentication ppk test id 'ppk-test'
set authentication ppk test secret '1ca84e77684dd62663fad4daf05bd3bd28264e4461e9beb605581d1ed1fbec738a458d69f888f5b26f49344a0c411d4fc06e0858d33607c513c562f16f4051ff'
set authentication ppk test secret-type 'hex'
set authentication psk test id '10.0.48.85'
set authentication psk test secret '1b3718bf09b82e2d529253183cf4a934575c5a360d2a70a78a762b0b2dfc178cc05ed034d9ea61dca3b8d233b425b86b'
set esp-group test lifetime '30'
set esp-group test mode 'tunnel'
set esp-group test pfs 'dh-group20'
set esp-group test proposal 10 encryption 'aes256gcm128'
set esp-group test proposal 10 hash 'sha384'
set ike-group test close-action 'start'
set ike-group test dead-peer-detection action 'restart'
set ike-group test dead-peer-detection interval '30'
set ike-group test key-exchange 'ikev2'
set ike-group test lifetime '180'
set ike-group test proposal 10 dh-group '20'
set ike-group test proposal 10 encryption 'aes256gcm128'
set ike-group test proposal 10 hash 'sha384'
set site-to-site peer test authentication local-id '10.0.48.96'
set site-to-site peer test authentication mode 'pre-shared-secret'
set site-to-site peer test authentication ppk id 'ppk-test'
set site-to-site peer test authentication remote-id '10.0.48.85'
set site-to-site peer test connection-type 'initiate'
set site-to-site peer test default-esp-group 'test'
set site-to-site peer test ike-group 'test'
set site-to-site peer test local-address '10.0.48.87'
set site-to-site peer test remote-address '10.0.48.86'
set site-to-site peer test tunnel 10 local prefix '192.168.0.8/30'
set site-to-site peer test tunnel 10 remote prefix '192.168.0.0/30'
run reset vpn ipsec site-to-site all

Resulting strongSwan logs from Debian server

Jan 23 16:32:21 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[500] to 10.0.48.86[500] (304 bytes)
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(REDIR_SUP) N(USE_PPK) ]
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: 10.0.48.87 is initiating an IKE_SA
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: selected proposal: IKE:AES_GCM_16_256/PRF_HMAC_SHA2_384/ECP_384
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) N(FRAG_SUP) N(HASH_ALG) N(USE_PPK) N(CHDLESS_SUP) N(MULT_AUTH) ]
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[500] to 10.0.48.87[500] (312 bytes)
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[4500] to 10.0.48.86[4500] (346 bytes)
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: parsed IKE_AUTH request 1 [ IDi N(INIT_CONTACT) IDr AUTH SA TSi TSr N(MOBIKE_SUP) N(ADD_4_ADDR) N(MULT_AUTH) N(EAP_ONLY) N(MSG_ID_SYN_SUP) N(NO_PPK) N(PPK_ID) ]
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: looking for peer configs matching 10.0.48.86[10.0.48.85]...10.0.48.87[10.0.48.96]
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: selected peer config 'vyos'
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: authentication of '10.0.48.96' with pre-shared key successful
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: peer supports MOBIKE, but disabled in config
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: authentication of '10.0.48.85' (myself) with pre-shared key
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: using PPK for PPK_ID 'ppk-test'
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: IKE_SA vyos[5] established between 10.0.48.86[10.0.48.85]...10.0.48.87[10.0.48.96]
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: scheduling rekeying in 177s
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: maximum IKE_SA lifetime 195s
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: selected proposal: ESP:AES_GCM_16_256/NO_EXT_SEQ
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: CHILD_SA vyos-ts{8} established with SPIs c60cc1a1_i cdf7e32c_o and TS 192.168.0.0/30 === 192.168.0.8/30
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: generating IKE_AUTH response 1 [ IDr AUTH SA TSi TSr N(PPK_ID) ]
Jan 23 16:32:21 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[4500] to 10.0.48.87[4500] (217 bytes)
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[4500] to 10.0.48.86[4500] (301 bytes)
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: parsed CREATE_CHILD_SA request 2 [ N(REKEY_SA) SA No KE TSi TSr ]
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: selected proposal: ESP:AES_GCM_16_256/ECP_384/NO_EXT_SEQ
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: inbound CHILD_SA vyos-ts{9} established with SPIs c5e043cd_i c7c142b7_o and TS 192.168.0.0/30 === 192.168.0.8/30
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: generating CREATE_CHILD_SA response 2 [ SA No KE TSi TSr ]
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: sending packet: from 10.0.48.86[4500] to 10.0.48.87[4500] (289 bytes)
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: received packet: from 10.0.48.87[4500] to 10.0.48.86[4500] (69 bytes)
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: parsed INFORMATIONAL request 3 [ D ]
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: received DELETE for ESP CHILD_SA with SPI cdf7e32c
Jan 23 16:32:46 strongswan-test charon-systemd[1158]: closing CHILD_SA vyos-ts{8} with SPIs c60cc1a1_i (0 bytes) cdf7e32c_o (0 bytes) and TS 192.168.0.0/30 === 192.168.0.8/30

@github-actions
Copy link

CI integration 👍 passed!

Details

CI logs

  • CLI Smoketests 👍 passed
  • CLI Smoketests (interfaces only) 👍 passed
  • Config tests 👍 passed
  • RAID1 tests 👍 passed
  • CLI Smoketests VPP 👍 passed
  • Config tests VPP 👍 passed
  • TPM tests 👍 passed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bp/circinus Create automatic backport for circinus current

Development

Successfully merging this pull request may close these issues.

6 participants