Faire passer le Trafic d'une seule application par VPN

Bonjour, Je suis débutant dans ce qui concerne la gestion firewall et route sous linux : je dit cela car j’ai déjà posé ma question sur divers forums et la seule réponse que j’ai eu c’est : cherche du côté des Namespaces… routage et compagnie.

Donc, j’aimerais qu’avant toute réponse que l’on m’explique en quoi consiste votre solution (si vous en avez une :slightly_smiling:) car c’est bien de me dire d’aller chercher par ci ou par là, si je ne comprend pas, j’en reste au même point…

En bref : J’aimerai faire faire transiter tout le trafic de Transmission à travers un VPN, et uniquement ce programme, c’est à dire que Transmission —> Tun0 et All ----> Eth0 :slightly_smiling:, sauf que je ne sais pas comment m’y prendre :frowning:

En clair, cela me permettrait d’accéder aux autres services de mon NAS (sous OpenMediaVault) depuis l’IP du FAI qui est fixe, et de faire transiter le trafic de Transmission (pour partager mes photo :stuck_out_tongue: ) de manière sécurisé derrière une IP dynamique :slightly_smiling:

On m’a parler de redirection avec IPtables et le nom de l’user qui lance Transmission (debian-transmission), seul hic, c’est que par défaut, lorsque le VPN est démarré, tout mon trafic passe par celui-ci, j’aimerai que le reste passe par l’interface eth0, mais je ne sais pas comment faire avec IPtables.

Quel genre de photos nécessite d’être diffusé en pair-à-pair à travers un VPN anonymisant ? En demandant de l’aide tu n’inciterais pas à commettre un délit de complicité ?

Apparemment ton client VPN est configuré pour modifier la route par défaut et la faire passer par le VPN. Il faut commencer par désactiver cette option. C’est quel type de VPN ? PPTP, OpenVPN, autre ?

Pour identifier les paquets à faire passer dans le VPN, il y a différents moyens. En effet on peut utiliser l’UID ou le GID du processus émetteur, s’il est spécifique.
Une règle iptables avec la correspondance [mono]owner[/mono] et la cible [mono]MARK[/mono] permet de marquer les paquets émis avec un UID ou GID donné. Une règle de routage [mono]ip rule fwmark[/mono] permet de spécifier une table de routage différente pour ces paquets, et il ne reste plus qu’à remplir cette table de routage avec les routes désirées, notamment une route par défaut via le VPN. Pour finir il faudra ajouter une règle iptables MASQUERADE sur l’interface du VPN pour remplacer l’adresse source initiale par l’adresse de l’interface du VPN.

Un autre moyen consiste à forcer le processus (s’il le permet) à utiliser une adresse source spécifique, celle de l’interface VPN, mais c’est moins facile si elle est variable (dans ce cas une idée est d’automatiquement lancer le processus quand le VPN monte et l’arrêter quand le VPN tombe). Pas besoin d’iptables ici, il suffit de créer une règle de routage [mono]ip rule from[/mono] et de remplir la table de routage correspondante comme précédemment.

Dans les deux cas peut se poser le problème de la résolution DNS. Tu as le choix d’utiliser soit les DNS accessibles par le FAI, soit les DNS accessibles par le VPN. Mais pas les deux à la fois avec les uns pour transmission et les autres pour le reste, car il n’y a qu’un seul fichier /etc/resolv.conf pour tout le système, à moins de faire une isolation de type chroot ou autre. Sachant que si transmission utilise les DNS du FAI, ses requêtes DNS doivent passer hors du VPN, ce qui peut constituer une fuite d’information dans la mesure où le trafic hors VPN peut être corrélé au trafic du VPN (une requête DNS hors VPN pour telle adresse puis une connexion par le VPN à cette adresse et vice versa).