OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Composants · Réseau

Neutron-VPNaaS

VPN IPsec site à site : IKE, policies IPsec, connexions.

Go Agent IPsecopenkeel-neutron-vpnaas

Le module

OpenKeel implementation in Go of OpenStack neutron-vpnaas on the OVN path, generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. neutron-vpnaas-api serves the VPN API (/v2.0/vpn and the agent scheduler) and replaces the ovn-vpnaas service plugin and its driver: same routes, status codes, error bodies and policies, same tables. neutron-vpnaas-agent replaces neutron-ovn-vpn-agent: it runs strongSwan, the original's daemon, in one qvpn-<router> namespace per router. It runs beside openkeel-neutron, on its database and its OVN; clients reach it through a proxy in openkeel-neutron: see docs/NEUTRON-INTEGRATION.md. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.

  • Go module: github.com/openkeel/openkeel-neutron-vpnaas
  • Binaries: neutron-vpnaas-api (API on port 9696, agent API on 9697, health and metrics on 9090), neutron-vpnaas-agent (health on 9091; needs Linux, root and strongSwan: Dockerfile.agent)
  • Configuration: YAML, see config/config.example.yaml and config/agent.example.yaml
  • Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
  • Database schema, migrations and upgrades: docs/DATABASE.md

Extrait de openkeel-neutron-vpnaas/README.md (en anglais).

API REST

35 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel.

  • 35Implémenté

Comment la compatibilité est testée

Les échanges enregistrés du profil OVN sont rejoués contre le service Go, le rendu de configuration est comparé aux templates d'origine, et de vrais tunnels IPsec sont montés de bout en bout.

Rejeu des échanges enregistrés

Rejeu E2E du profil OVN

Les échanges VPNaaS enregistrés servis par ce service donnent les mêmes réponses ; ceux servis par Neutron sont vérifiés sur la vraie pile.

Exécution

make e2e-strict, sur go-mysql-server et sur MariaDB 11.4.

Dernier résultat 84 rejoués, 84 réussis (2026-10-31) ; 25 des 108 échanges enregistrés relèvent de Neutron ou ne s'appliquent plus.

Source : openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Tests unitaires et golden tests

Vecteurs de rendu de configuration

La configuration strongSwan correspond aux templates jinja2 d'origine pour chaque groupe et algorithme de l'API.

Exécution

tools/gen_render_vectors.py, 50 vecteurs issus des templates d'origine.

Dernier résultat 50 / 50, aux lignes vides près (2026-10-31).

Source : openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Scénario

Vrai tunnel IPsec

IKEv1 et IKEv2 avec AES-GCM, ping à travers ESP, admin down puis up, démon tué puis redémarré, suppression.

Exécution

make tunnel-test : strongSwan 5.9.13 des deux côtés, vrai XFRM du noyau.

Dernier résultat Réussi, 2 exécutions sur le code final (2026-10-31).

Source : openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Scénario

Pile complète avec Neutron et OVN

Via le proxy de Neutron, un port de tenant pingue un sous-réseau situé derrière un pair strongSwan, par le routeur OVN et le tunnel.

Exécution

make stack-test : openkeel-neutron, ovsdb-server, ovn-northd, ovn-controller, OVS, MariaDB, l'image de l'agent.

Dernier résultat Réussi, 2 exécutions sur le code final (2026-10-31).

Source : openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Concurrence sur Galera

Concurrence sur MariaDB Galera

Les opérations VPN restent cohérentes lorsque les requêtes arrivent par trois nœuds Galera.

Exécution

make galera-test sur un cluster à 3 nœuds.

Dernier résultat 3 tests réussis, 5 exécutions sur 5 (2026-10-31).

Source : openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Tempest

neutron-tempest-plugin vpnaas

Les tests d'API et de scénario VPNaaS amont.

Exécution

Nécessite un cloud déployé.

Dernier résultat Non exécuté.

Source : openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Écarté de la réécriture

VPNaaS conserve son API avec un seul driver strongSwan sur OVN, sans Libreswan, l'ancien chemin L3, rootwrap ni RabbitMQ.

Obsolète ou inutilisé en amont

Driver Libreswan et ancien chemin par agent L3

Pourquoi c'est écarté

Ils ne sont pas des cibles de la réécriture ; un seul driver est livré : strongSwan dans un namespace par routeur sur le chassis OVN.

Pourquoi la solution n'est pas affectée

Les connexions IPsec site à site se créent via la même API ; les déploiements qui dépendaient d'un comportement propre à Libreswan ne le retrouvent pas.

Source : openkeel-neutron-vpnaas/config/dropped-options.md

Mécanique interne simplifiée

RPC RabbitMQ et notifications d'agents

Pourquoi c'est écarté

L'agent interroge une API d'agents avec ETag toutes les 5 secondes au lieu de topics RPC ; aucun service OpenKeel ne consommait les notifications vpn_agent.

Pourquoi la solution n'est pas affectée

Aucune mise à jour ne peut être perdue, au prix d'un délai allant jusqu'à 5 s. Les notifications deviennent des lignes de log.

Source : openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Mécanique interne simplifiée

rootwrap et drivers d'interface

Repris par Kubernetes DaemonSet

Pourquoi c'est écarté

L'agent pilote OVS lui-même et tourne dans son conteneur avec les privilèges dont il a besoin.

Pourquoi la solution n'est pas affectée

Mêmes namespaces, ports et commandes strongSwan sur le nœud ; aucun filtre rootwrap à maintenir.

Source : openkeel-neutron-vpnaas/config/dropped-options.md

Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules

Interactions de Neutron-VPNaaS

Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.

Diagramme openkeel-neutron-vpnaas.svg Plein écran
Les 5 interactions du modèle
DeVersProtocoleQuoi
Neutron serverNeutron VPNaaSAPI RESTproxy /v2.0/vpn/*, vpn-agents, same token
Neutron VPNaaSNeutron serverAPI RESTcore and L3 calls: gateway ports, routes
Neutron VPNaaSOVN Southbound DBOVSDBlists VPN agents (Chassis_Private)
VPNaaS agentNeutron VPNaaSAPI RESTagent API :9697: services (ETag poll), status
VPNaaS agentOVN Southbound DBOVSDBregisters ovn-vpnagent, acks nb_cfg

Spécifications