WIP: feat(vault01/isp): moving to next network architecture #320

Draft
lbailly wants to merge 5 commits from vault01-isp into main
Member
  • kea pour le dhcp client (permettra de le monitor dans grafana)
  • merge de tout les prefix users
  • log dans ce nouveau modèle
  • update des script de requete
  • retirer le wg qui servait au tests
- [x] kea pour le dhcp client (permettra de le monitor dans grafana) - [x] merge de tout les prefix users - [x] log dans ce nouveau modèle - [x] update des script de requete - [x] retirer le wg qui servait au tests
lbailly changed title from WIP: feat(vault01/isp): moving to next network architecture to feat(vault01/isp): moving to next network architecture 2025-03-11 16:17:47 +01:00
Author
Member

Je pense que c'est plutôt prêt now.

Le changement c'est le serveur DHCP (oui, seulement ça) : plutôt que d'avoir un serveur par user, on a un unique DHCP (kea) pour tout les user, qui distribue dans toute la range attribué pour les user sans contrainte de préfixe.

Ainsi chaque user à l'impression d'avoir toute la range du /16, même si ce n'est pas vraiment le cas, et ça permet d'avoir beaucoup plus de user, en partant du principe que l’immense majorité des users auront max 3 appareil connecté en simultané, et rare seront ceux qui en ont plus.

Pour éviter les problème de spoofing, le serveur DHCP créer la route vers l'IP attribué dans l'interface du vlan dynamiquement, et la del à la fin du lease.

Pour les traces légal : c'est un changement assez conséquents pour l'identification de la source du traffic, puisqu'on a plus l'information d'appartenance par le seul préfixe, une autre table est donc ajouté dans la db ulogd pour log les leases attribué par kea, et le script à été update en conséquence.
Pour la compatibilité des anciennes trace légal, j'ai fait un script qui peuplera cette table avec les actuel préfixe, en les faisant apparaître comme des leases qui ont duré jusqu'à cette migration. Pour assurer qu'on est pas de problème il faudra assurer que le kea ne se lance pas tant qu'on a pas migré, et que seul kea soit actif après migration.

Je pense que c'est plutôt prêt now. Le changement c'est le serveur DHCP (oui, seulement ça) : plutôt que d'avoir un serveur par user, on a un unique DHCP (kea) pour tout les user, qui distribue dans toute la range attribué pour les user sans contrainte de préfixe. Ainsi chaque user à l'impression d'avoir toute la range du /16, même si ce n'est pas vraiment le cas, et ça permet d'avoir beaucoup plus de user, en partant du principe que l’immense majorité des users auront max 3 appareil connecté en simultané, et rare seront ceux qui en ont plus. Pour éviter les problème de spoofing, le serveur DHCP créer la route vers l'IP attribué dans l'interface du vlan dynamiquement, et la del à la fin du lease. Pour les traces légal : c'est un changement assez conséquents pour l'identification de la source du traffic, puisqu'on a plus l'information d'appartenance par le seul préfixe, une autre table est donc ajouté dans la db ulogd pour log les leases attribué par kea, et le script à été update en conséquence. Pour la compatibilité des anciennes trace légal, j'ai fait un script qui peuplera cette table avec les actuel préfixe, en les faisant apparaître comme des leases qui ont duré jusqu'à cette migration. Pour assurer qu'on est pas de problème il faudra assurer que le kea ne se lance pas tant qu'on a pas migré, et que seul kea soit actif après migration.
requested review from rlahfa 2025-03-11 16:41:10 +01:00
Author
Member

Il faudrait faire plus de testing aussi, actuellement les tests que j'ai fait ne comportait pas 850 interfaces, et je suis preneur de relecture pour le script hook de kea

Il faudrait faire plus de testing aussi, actuellement les tests que j'ai fait ne comportait pas 850 interfaces, et je suis preneur de relecture pour le script hook de kea
Author
Member

(testé avec des container dans https://git.dgnum.eu/lbailly/vxlan-organiser )

(testé avec des container dans https://git.dgnum.eu/lbailly/vxlan-organiser )
lbailly changed title from feat(vault01/isp): moving to next network architecture to WIP: feat(vault01/isp): moving to next network architecture 2025-05-04 18:02:44 +02:00
@ -0,0 +208,4 @@
nixpkgs.overlays = [
(_: super: {
kea = super.kea.overrideAttrs (o: {
patches = o.patches ++ [ ./0001-fix-multiple-interface-with-same-IP.patch ];
Owner
patches = (o.patches or [ ]) ++ [ ... ];

Maybe un jour nixpkgs n'aura pas de patchs sur kea

```nix patches = (o.patches or [ ]) ++ [ ... ]; ``` Maybe un jour nixpkgs n'aura pas de patchs sur kea
lbailly marked this conversation as resolved
@ -0,0 +262,4 @@
after = [ "sys-subsystem-net-devices-enp67s0f0np0.device" ];
bindsTo = [ "sys-subsystem-net-devices-enp67s0f0np0.device" ];
script = builtins.concatStringsSep "\n" (
builtins.map (name: "${lib.getExe pkgs.ethtool} -K enp67s0f0np0 ${name} off") [
Owner
script = concatMapStringsSep "\n" (name: "${lib.getExe pkgs.ethtool} -K enp67s0f0np0 ${name} off") [
  ...
```nix script = concatMapStringsSep "\n" (name: "${lib.getExe pkgs.ethtool} -K enp67s0f0np0 ${name} off") [ ... ```
lbailly marked this conversation as resolved
@ -0,0 +311,4 @@
content = ''
chain postrouting {
type nat hook postrouting priority 100;
ip saddr 10.0.0.0/16 ip daddr != 10.0.0.0/16 snat ip to 129.199.195.130-129.199.195.157
Owner

Ce serait possible de faire une option startRange et endRange (ou un autre nom) pour stocker 129.199.195.130 et 129.199.195.157, comme ça quand on changera ça sera plus simple ?
Ou alors on (tu) changera bcp de choses quand on aura des vraies adresses

Ce serait possible de faire une option `startRange` et `endRange` (ou un autre nom) pour stocker `129.199.195.130` et `129.199.195.157`, comme ça quand on changera ça sera plus simple ? Ou alors on (tu) changera bcp de choses quand on aura des vraies adresses
lbailly marked this conversation as resolved
@ -0,0 +485,4 @@
name = "netuserctl";
runtimeInputs = [ pkgs.systemd ];
text = concatStringsSep "\n" (
map ({ interfaceName, ... }: ''networkctl "$1" ${interfaceName}'') userVlans
Owner
concatMapStringsSep "\n" (v: ''networkctl "$1" ${v.interfaceName}'') userVlans;
```nix concatMapStringsSep "\n" (v: ''networkctl "$1" ${v.interfaceName}'') userVlans; ```
lbailly marked this conversation as resolved
All checks were successful
Check meta / check_dns (push) Successful in 14s
Required
Details
Check meta / check_meta (push) Successful in 17s
Required
Details
Check workflows / check_workflows (push) Successful in 17s
Required
Details
Check workflows / check_workflows (pull_request) Successful in 17s
Required
Details
Check meta / check_meta (pull_request) Successful in 20s
Required
Details
Check meta / check_dns (pull_request) Successful in 21s
Required
Details
Build all the nodes / Jaccess01 (pull_request) Successful in 23s
Required
Details
Build all the nodes / Jaccess04 (pull_request) Successful in 24s
Required
Details
Run pre-commit on all files / pre-commit (push) Successful in 27s
Required
Details
Run pre-commit on all files / pre-commit (pull_request) Successful in 32s
Required
Details
Build all the nodes / ap01 (pull_request) Successful in 43s
Required
Details
Build all the nodes / netcore01 (pull_request) Successful in 25s
Required
Details
Build all the nodes / netcore02 (pull_request) Successful in 28s
Required
Details
Build all the nodes / bridge01 (pull_request) Successful in 50s
Required
Details
Build all the nodes / cof02 (pull_request) Successful in 54s
Required
Details
Build all the nodes / build01 (pull_request) Successful in 59s
Required
Details
Build all the nodes / geo01 (pull_request) Successful in 52s
Required
Details
Build all the nodes / geo02 (pull_request) Successful in 49s
Required
Details
Build all the nodes / hypervisor01 (pull_request) Successful in 53s
Required
Details
Build all the nodes / hypervisor02 (pull_request) Successful in 54s
Required
Details
Build all the nodes / hypervisor03 (pull_request) Successful in 54s
Required
Details
Build all the nodes / lab-router01 (pull_request) Successful in 54s
Required
Details
Build all the nodes / tower01 (pull_request) Successful in 57s
Required
Details
Build all the nodes / compute01 (pull_request) Successful in 1m27s
Required
Details
Build all the nodes / iso (pull_request) Successful in 1m10s
Required
Details
Build the shell / build-shell (pull_request) Successful in 30s
Required
Details
Build all the nodes / rescue01 (pull_request) Successful in 1m14s
Required
Details
Build all the nodes / web02 (pull_request) Successful in 50s
Required
Details
Build all the nodes / web03 (pull_request) Successful in 59s
Required
Details
Build all the nodes / zulip01 (pull_request) Successful in 55s
Required
Details
Build all the nodes / web01 (pull_request) Successful in 1m19s
Required
Details
Build all the nodes / vault01 (pull_request) Successful in 1m19s
Required
Details
Build all the nodes / krz01 (pull_request) Successful in 1m48s
Required
Details
Build all the nodes / storage01 (pull_request) Successful in 1m50s
Required
Details
This pull request has changes conflicting with the target branch.
  • REUSE.toml
  • default.nix
  • machines/nixos/vault01/networking.nix
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin vault01-isp:vault01-isp
git switch vault01-isp
Sign in to join this conversation.
No description provided.