URL: https://linuxfr.org/users/reynum/journaux/specifier-une-interface-reseau-a-un-processus-2-1 Title: Spécifier une interface réseau à un processus (2.1) Authors: reynum Date: 2014年08月08日T11:50:19+02:00 License: CC By-SA Tags: openvpn, réseau et network_namespace Score: 6 Suite à [mon journal précédent](https://linuxfr.org/users/reynum/journaux/specifier-une-interface-reseau-a-un-processus-2) et aux commentaires très constructifs que l'on y trouve (un grand merci aux auteurs). J'ai entrepris d'analyser et parfois tester les différentes solutions proposées. ### Les solutions : - Full virtualisation (la mienne, donc testée et fonctionnelle). - Virtualisation par cloisonnement LXC (testée et fonctionnelle) - Namespace réseau (testée, fonctionnelle et adoptée) - Tag du trafic par utilisateur (se base sur des règles Iptables, non testée mais potentiellement très puissante) - Utiliser [Shorewall](http://shorewall.net/manpages/shorewall-rules.html) (se base sur des règles Iptables, non testée) - La commande méconnue [unshare](//linuxfr.org/forums/astucesdivers/posts/specifier-une-interface-reseau-a-un-processus#comment-1320077)(qui ressemble beaucoup à la solution du namespace détaillée plus bas, non testée) - Un patch de transmission pour choisir la carte réseau (ne correspond pas entièrement car je veux pouvoir lancer d'autres programme sur le tunnel VPN). ### Détails : En ce qui concerne la solution avec LXC [ce post](//linuxfr.org/users/reynum/journaux/specifier-une-interface-reseau-a-un-processus-2#comment-1553758) donne déjà presque toute la solution (même si j'ai eu un peu peur de tomber sur un anneau), la seule chose que j'ai eu à faire c'est de modifier une ligne du fichier `/boot/grub/grub.cfg` : linux /vmlinuz-3.14-1-amd64 root=UUID=eb94f23a-7675-4d78-880c-521d776e68ae ro quiet **cgroup_enable=memory** pour que LXC fonctionne. Sinon une fois OpenVPN installé tout fonctionne bien, la configuration ressemble à celle qu'il faut faire dans une VM de type KVM. Pour les namespace réseau j'ai principalement suivi [ce lien](http://www.evolware.org/?p=293) qui m'avait été donné dans un des commentaires, donc une fois fait on arrive à une architecture comme ça : ![Titre de l'image](http://img11.hostingpics.net/pics/708036schmaarchivpn.png) Du coup je profite que ce soit frais pour détailler un peu la procédure (on ne sait jamais cela peut aider des gens). ### Prérequis Avoir un bridge br0 avec l'ip 10.0.0.1/24 Avoir une règle de NAT entre br0 et eth0 pour cela voir [le journal précédent](//linuxfr.org/users/reynum/journaux/specifier-une-interface-reseau-a-un-processus-2) Être root ### Création du Namespace réseau : `ip netns add vpn_ns` ### Création des interfaces virtuelles : `ip link add veth_vpn type veth peer name veth0` Cette commande crée 2 interfaces virtuelles connectées "physiquement" c'est à dire comme si il y avait un câble entre les deux, ceci permettra de faire la liaison entre l'intérieur et l'extérieur du namespace réseau. ### Paramétrage des interfaces virtuelles : `ifconfig veth0 10.0.0.253/24 up` On active veth0 avec une ip dans le même réseau que le bridge `brctl addif br0 veth0` On définit veth0 comme une interface du bridge `ip link set veth_vpn netns vpn_ns` On insère veth_vpn dans le namespace réseau A partir de maintenant pour agir sur le namespace réseau il faut le dire explicitement par la commande `ip netns exec vpn_ns` c'est pourquoi je trouve pratique de faire un alias : `alias vpnc='ip netns exec vpn_ns'` donc toute commande préfixée par `vpnc` (pour VPN Command, oui je suis un original) sera exécutée dans le namespace. `vpnc ifconfig veth_vpn 10.0.0.252/24 up` On définie veth_vpn dans le même réseau que le bridge, à ce stade on doit pourvoit "pinger" l'ip du bridge (10.0.0.1) `vpnc route add default gw 10.0.0.1` On définie l'IP du bridge comme gateway ### Pour finir `vpnc openvpn --config /etc/openvpn/.conf` On lance Openvpn qui va faire toute sa configuration dans le namespace `vpnc sudo -u transmission-gtk &` On lance transmission avec l'utilisateur _user_ `vpnc sudo -u &` On lance _votre_navigateur_ sur le tunnel VPN `sudo -u &` On lance une autre instance de _votre_navigateur_ On ouvre l'url http://www.whatismyip.com/ sur les deux navigateurs, cette page doit renvoyer 2 ip différentes, l'une doit donner l'adresse de votre serveur VPN, et l'autre celle attribuée par votre FAI. \o/

AltStyle によって変換されたページ (->オリジナル) /