Comment utiliser l'interface Tun / Tap pour diviser les paquets, le tunnel puis remonter. (similaire à MLPPP)

StackOverflow https://stackoverflow.com/questions/6018185

  •  14-11-2019
  •  | 
  •  

Question

Je cherche à créer une application client / serveur que je peux utiliser pour fendre les paquets de réseau en deux, tunnel chaque moitié du paquet sur une connexion UDP distincte (car chaque connexion UDP passera en revue un lien WiFi différent), puis remonte à la reprise de la connexion Papé de paquets à l'autre extrémité. En plus de diviser les paquets, chaque demi-paquet devra également avoir un numéro d'identification et de séquence afin qu'ils puissent être réassemblés correctement.

Fondamentalement, j'essaie de faire quelque chose de similaire à MLPPP

Je cherche à le faire en utilisant Python et le pilote Tun / Tap Network. J'ai trouvé les échantillons et modules de code Python suivants qui, je pense, pourraient être utiles pour ce projet.

Python Tun / Tap

Manipulation de paquets bruts python

Ma question est que la modification nécessaire des paquets peut être effectuée en utilisant Python et quel serait un moyen possible d'approcher cela? Puis-je utiliser les modules ci-dessus pour ce faire ou y a-t-il une meilleure solution? Je recherche une contribution qui me dirigera dans la bonne direction car je ne suis pas un programmeur expérimenté. Tous les échantillons de code ou liens supplémentaires sont les bienvenus.

Était-ce utile?

La solution

Nous faisons quelque chose comme ça en production et cela fonctionne assez bien. Nous ne divisons pas les paquets individuels. Nous fixons des poids fractionnaires pour chaque connexion (illimitée) et envoyons les paquets. Nous avons du code en place pour gérer différentes latences sur chaque ligne. De l'autre côté, nous les tampons et nous réorganisons. Les performances sont assez bonnes - nous avons des sites avec plus de 5 lignes ADSL et obtenons de bonnes vitesses, plus de 40 Mbps sur le téléchargement.

Les paquets de division (par exemple 1500/2 = 750) introduiraient des frais généraux inutiles ... Gardez vos paquets aussi gros que possible.

Nous avons développé notre propre protocole (format d'en-tête) pour les paquets UDP. Nous avons effectué des tests en boucle sur le tun / appuyez sur 200 Mbps, donc certainement l'interaction du noyau à l'espace utilisateur fonctionne bien. Auparavant, nous avons utilisé NFQueue mais cela avait des problèmes de fiabilité.

Tout ce qui précède a été écrit en Python.

Autres conseils

Cela me semble parfaitement possible.

Les modules Tun / Tap que vous avez découverts semblent faire le travail. Twisted sera de haute performance et le coût de la tête de votre tête en travaillant.

En ce qui concerne la division des paquets, vous n'avez pas besoin d'interpréter les données, de les traiter simplement comme une goutte de données binaires, de les diviser en deux et d'ajouter un en-tête - je n'utiliserais aucun module tiers pour cela, Juste la manipulation normale de la chaîne Python.

Ou vous pourriez utiliser littoral Si vous souhaitez un format d'encapsulation de paquets facile à utiliser.

Je ne suppose pas que ça irait comme une fusée, mais je suis sûr que vous apprendrez beaucoup à le faire!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top