Namespace réseau sans Docker

Namespace réseau sans Docker

Imaginons le cas suivant: Je suis connecté à plusieurs réseaux (wlan0, eth0, usb0).
Je veux choisir le réseau que je vais utiliser au lancement de mon application.
Mon application ne permet pas de choisir une interface quand plusieurs sont disponibles.
Je pourrais utiliser docker, ce dernier isole le réseau.
Cependant docker isole aussi plein d’autres choses, nécessite une image, et n’est pas adapté pour lancer des applications graphiques.

Nous allons donc utiliser le même mécanisme que docker, le namespacing, mais manuellement.
Le principe est assez simple.
On commence par créer un namespace réseau que l’on va nommer 4g

Ensuite on link une interface physique au namespace.
On peut passer par une interface virtuelle pour des configurations plus complexes.
La mienne se nomme enp0s20u2

Une fois cette opération faite, l’interface n’est plus visible dans le namespace par défaut.
On vérifie via:

Maintenant, il ne reste plus qu’à configurer l’interface classiquement. Il faut juste être bindé au namespace 4g.
Soit en préfixant chaque commande, soit en ouvrant un shell.

ou

à partir de là tout fonctionne mais on a pas configuré de DNS.
Petit soucis, les DNS se configurent depuis le fichier /etc/resolv.conf
le système de namespace offre un système de “mapping”  (default) /etc/netns/<ns>/resolv.conf -> (<ns>) /etc/resolv.conf

Donc on édite ce fichier (attention si on a choisi l’option shell pour setup l’interface, il faut le quitter…

Maintenant le namespace est pleinement fonctionnel. On peut lancer firefox par exemple :

Petit problème, le programme est lancé en root. Pour y remédier, on passe par sudo :

Le tour est joué.

By | 2017-10-24T12:15:33+00:00 July 6th, 2016|Blog, Hack|0 Comments

About the Author:

Leave A Comment

Time limit is exhausted. Please reload the CAPTCHA.