J'ai recherché des personnes précédentes posant des questions similaires, mais je n'ai pas encore obtenu de réponse directe qui fonctionnera pour ma situation donnée, alors voici ...
Je fonctionne sous Linux (Fedora 22) et j'ai un service VPN pour lequel je paie, mais je n'ai besoin que de programmes spécifiques pour utiliser le VPN pour leur trafic Internet, et je peux utiliser ma connexion ISP standard pour tout le reste (c'est-à-dire la navigation Web, etc)
Nous allons simplifier cela et le limiter au programme le plus utilisé, World of Warcraft, qui est exécuté via WINE.
Maintenant, j'ai une configuration VPN via l'interface réseau afin que tout mon trafic via enp10s0 (mon nom étrange pour eth0 sur mes ordinateurs) puisse être acheminé via le service VPN, cependant, je n'ai besoin que de programmes spécifiques (ou ports que ces programmes utilisent, pour être précis) pour passer par le VPN.
Comment puis-je configurer le tunnel et le faire router uniquement les ports nécessaires via le VPN, tout en laissant tout le reste non routé?
Réponses:
Ce que vous demandez n'existe pas . C'est pourquoi vous n'êtes pas satisfait des réponses que vous avez trouvées (certaines d'entre elles, peut-être, étant les miennes): toutes ont suggéré des solutions de contournement , pas une véritable solution, simple ou complexe.
Laisse-moi expliquer. Le routage dans tous les systèmes d'exploitation est déterminé par l'adresse de destination: vous pouvez très bien avoir plusieurs itinéraires, mais le choix entre eux n'est pas basé sur l'application invoquant la connexion, mais simplement sur l'adresse de destination. Arrêt complet.
Permettez-moi de vous donner un exemple non trivial. Lorsqu'un client VPN a établi une connexion avec son serveur, il est toujours possible de router une connexion vers un site donné, par exemple example.org, en dehors du VPN. Mais toutes les applications essayant d'atteindre cette adresse spéciale seront routées en dehors du VPN: vous ne pouvez pas avoir certaines applications allant sur example.org via le VPN tandis que d'autres applications passent en dehors du VPN.
La situation s'enrichit avec le noyau Linux, qui permet le routage source: cela signifie que vous pouvez avoir deux ou plusieurs tables de routage, et le choix entre elles est basé sur l'adresse source, pas sur l'adresse de destination.
Un exemple non trivial: mon PC a deux lignes extérieures, avec deux adresses IP publiques distinctes. Il peut être contacté via l'une ou l'autre des interfaces, et il est important que mes réponses à une connexion donnée passent par la même interface que celle via laquelle la connexion est entrée: sinon elles seront rejetées comme non pertinentes lorsqu'elles atteindront la personne qui a initié la connexion. Il s'agit du routage source.
Assez juste, qu'en est-il des connexions que nous commençons? Certaines applications vous permettent de spécifier l'adresse de liaison, comme le client openssh :
Pour eux, il n'y a aucun problème à ce qu'une instance passe par le VPN (par exemple, la table de routage 1) tandis qu'une autre instance sortira du VPN (par exemple la table de routage 2). Mais d'autres applications, comme Firefox, non seulement sont notoirement difficiles à lier à une adresse IP source spécifique (mais voir ici pour une solution de contournement très intelligente), mais sont également méchantes et méchantes en ce qu'elles ne vous permettront pas d'avoir deux copies d'elles-mêmes s'exécutant simultanément, chacun étant lié à une adresse source différente. En d'autres termes, alors que grâce à l'astuce référencée ci-dessus, vous pouvez obliger une instance à se lier à une adresse source de votre choix, vous ne pouvez pas en avoir une autre version se liant à l'autre adresse source.
Cela explique pourquoi nous utilisons des solutions de contournement: elles sont toutes basées sur la même idée, qu'elles fonctionnent avec une pile réseau distincte du reste du PC. Vous pouvez donc avoir, par ordre approximatif décroissant de complexité, des VM, des dockers, des conteneurs, des espaces de noms. Dans chacun d'eux, vous aurez une ou plusieurs tables de routage, mais vous pouvez avoir plusieurs instances de chacune (VM / dockers / conteneurs / espaces de noms) et vous pouvez également les mélanger librement, chacun exécutant sa propre application comme Firefox heureusement séparés des autres.
Peut-être êtes-vous toujours intéressé par l'une des solutions de contournement?
ÉDITER:
La solution de contournement la plus simple est un espace de noms réseau. Le script ci-dessous gère tous les aspects nécessaires d'un NNS: placez-le dans un fichier (vous choisissez votre nom, j'utilise généralement
newns
, mais vous faites ce que vous préférez)/usr/local/bin
, puischmod 755 FILE_NAME
, et vous pouvez l'utiliser comme suit:Il ouvrira un
xterm
pour vous (c'est parce que j'aime que xterm fonctionne, mais vous pouvez le changer si vous souhaitez utiliser autre chose), qui appartient au nouvel espace de noms. De l'intérieur du xterm, vous pouvez, si vous le souhaitez, démarrer votre vpn, puis commencer votre partie. Vous pouvez facilement vérifier que vous utilisez le VPN via la commande suivante:qui vous renvoie votre adresse IP publique. Après avoir configuré le VPN dans xterm, vous pouvez vérifier que votre IP publique est différente dans vos autres fenêtres. Vous pouvez ouvrir jusqu'à 254 xterms, avec 254 NNS différents et différentes connexions.
Si vous le souhaitez, vous pouvez même démarrer un bureau entier dans le nouvel espace de noms du réseau, au moyen de
alors vous pouvez le rechercher en utilisant Alt+ Ctrl+ Fn, où Fn est l'un des F1, F2, ....-
Je dois ajouter une mise en garde: la gestion DNS dans les espaces de noms est un peu boguée, soyez patient.
la source
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 50 0 0 ppp0 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 enp10s0 1.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp10s0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp10s0 199.168.112.120 192.168.1.1 255.255.255.255 UGH 100 0 0 enp10s0