Je suis allé voir le mail en question, qui est très intéressant. Voici donc un peu plus de détails pour ceux que ça intéresse.
Premièrement :
il y avait un vieux patch sur le kernel pour lui ajouter des VRF ;
les namespaces étaient effectivement la réponse donnée quand quelqu'un voulait utiliser des VRF.
Mais les namespaces ne sont pas réellement adaptés. Quand on parle de VRF, on pense à une séparation L3 (Virtual Routing and Forwarding). Les namespaces eux séparent toute la stack réseau : L2 (interfaces) et L3 (RIB, FIB, Neighbors table). D'où les problèmes de mise à l'échelle (le coût d'un namespace est d'environ 200Ko de mémoire). En plus de cela s'ajoute des problèmes pratiques, puisqu'un processus qui veut pouvoir utiliser plusieurs namespaces doit avoir les droits root (ce qui n'est pas nécessaire pour ouvrir juste des sockets (même pour un port inférieur à 1024, on a pas besoin des droits root complets, juste de CAP_NET_BIND_SERVICE)).
Les VRF solutionnent ce problème en étant vraiment ce que leur nom indique, à savoir une séparation L3, et en ayant un coût quasi nul. On peut maintenant avoir plusieurs VRF dans un même namespace, et un processus peut changer la VRF d'un socket avec setsockopt sans être root.
Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.
[^] # Re: VRF vs Namespace
Posté par erdnaxeli (site web personnel) . En réponse à la dépêche Sortie du noyau Linux 4.4. Évalué à 7. Dernière modification le 21 février 2016 à 12:50.
Je suis allé voir le mail en question, qui est très intéressant. Voici donc un peu plus de détails pour ceux que ça intéresse.
Premièrement :
Mais les namespaces ne sont pas réellement adaptés. Quand on parle de VRF, on pense à une séparation L3 (Virtual Routing and Forwarding). Les namespaces eux séparent toute la stack réseau : L2 (interfaces) et L3 (RIB, FIB, Neighbors table). D'où les problèmes de mise à l'échelle (le coût d'un namespace est d'environ 200Ko de mémoire). En plus de cela s'ajoute des problèmes pratiques, puisqu'un processus qui veut pouvoir utiliser plusieurs namespaces doit avoir les droits root (ce qui n'est pas nécessaire pour ouvrir juste des sockets (même pour un port inférieur à 1024, on a pas besoin des droits root complets, juste de CAP_NET_BIND_SERVICE)).
Les VRF solutionnent ce problème en étant vraiment ce que leur nom indique, à savoir une séparation L3, et en ayant un coût quasi nul. On peut maintenant avoir plusieurs VRF dans un même namespace, et un processus peut changer la VRF d'un socket avec setsockopt sans être root.
Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.