J'aimerais diriger certaines applications via le WiFi et d'autres applications via l'éthernet. Étant donné qu'OSX dispose d'une grande variété d'outils système et d'utilitaires ainsi que d'un riche écosystème d'applications, comment puis-je faire cela ?*
Réponses
Trop de publicités?Je souhaite router certaines applications via le WiFi et d'autres via l'éthernet.
Malheureusement, ce n'est pas comme cela que ça fonctionne. Vous ne pouvez pas dire que vous voulez que Safari passe par un port réseau et qu'iTunes passe par un autre. Le problème réside dans le fait que les applications elles-mêmes ne font pas la connexion réseau - elles font un appel à l'API de mise en réseau (Berkeley sockets) qui fait la connexion et relie le processus au socket lui-même.
En termes simples, le processus se déroule comme suit
Lorsque votre processus local (l'application en question) veut établir une connexion, il demande la création d'un socket. Une partie de cette demande comprend l'adresse IP, la connexion est ensuite établie et l'application y est liée. L'application envoie alors des données à travers ce socket.
La clé à retenir ici est que l'application demande un socket en fonction de l'adresse réseau. Sauf dans le cas où (si vous êtes sur un réseau avec un seul segment), vous avez seulement deux routes :
- Votre réseau local
- Tout le reste (c'est-à-dire Internet)
Si vous avez deux interfaces connectées à ce seul réseau, vos routes se chevaucheront et l'interface avec priorité sera la principale.
Peu importe l'application en cours d'exécution, elle va dire, "Je veux aller à foo.bar.com
" ce qui se traduira par une adresse IP et un socket sera créé sur la route qui vous y amène. Le point est que votre application n'a aucun contrôle sur la question.
Cependant, disons que vous êtes connecté à deux réseaux différents :
Éthernet (en0) -> 1.2.3.0
WiFi (en1) -> 5.6.7.0
S'il y a un serveur de fichiers avec une IP de 1.2.3.4, tout le trafic destiné à cette adresse passera par l'Éthernet. Si votre WiFi est configuré pour un accès Internet, tous les appels à 1.2.3.0 et à chaque autre adresse passeront par en1. Encore une fois, votre application n'a pas son mot à dire et le socket sera créé en fonction de la destination.
Une application peut-elle utiliser une interface réseau spécifique ?
Oui, bien sûr qu'elle le peut, mais c'est quelque chose qui se fait au niveau source de l'application car c'est elle qui fait l'appel à l'API. Si vous la programmez pour utiliser une interface spécifique, elle le fera (ce n'est pas pratique en aucun sens, mais vous en avez la possibilité).
En résumé : pour qu'une application externe reroute le trafic en fonction de l'application que vous utilisez, il faudrait qu'elle s'insère entre l'application et la pile de protocoles du système d'exploitation et cela ne se produira tout simplement pas.
La chose la plus proche à laquelle je peux penser pour cela s'appelle la priorisation des paquets (donc les applications ne seraient pas sur la même connexion Ethernet et ne se gêneraient pas mutuellement) est disponible dans la carte mère "Fatal1ty Z370 Professional Gaming i7", mais c'est une carte à 200 $ et c'est une solution matérielle. Je ne crois pas qu'il existe un logiciel capable de faire cela, mais je pourrais me tromper. J'espère que cela vous aidera.
Il dépend des apps dont nous parlons et de ce que vous voulez exactement réaliser. Dans certains cas, vous pouvez utiliser le routage en fonction des politiques (routage source) basé sur le port source ou les ports de destination de vos apps. Cependant, cela n'est normalement possible qu'avec des apps "simples" du point de vue réseau (c'est-à-dire qui se connectent par exemple uniquement à un seul serveur).
Une solution générique ne semble pas encore exister sous une forme parfaitement emballée que vous pouvez simplement télécharger et utiliser sans compétence particulière.
Si vous souhaitez implémenter une telle solution, vous voudrez utiliser la variable d'environnement DYLD_INSERT_LIBRARIES lors du lancement de vos apps pour injecter votre propre bibliothèque partagée dans le processus. Cette bibliothèque partagée devrait alors remplacer l'appel bind() pour s'assurer que le processus se lie à l'IP de votre interface WiFi ou Ethernet en fonction de l'app.
0 votes
Fondamentalement, je cherche quelque chose comme la suite d'applications de Rogue Amoeba, mais qui gère le réseau au lieu de l'audio
0 votes
Liés : superuser.com/q/181882/20634