Le noyau Linux avant 3.6 utilisait la mise en cache de routage pour effectuer le routage multivoie IPv4, ce qui signifiait que le routage entre deux lignes / FAI distinctes était assez facile. À partir de 3.6, l'algorithme est devenu par paquet, ce qui signifie que certaines astuces de table de routage / règle / iptables étaient nécessaires pour atteindre les deux lignes / FAI.
Cependant, si vous aviez deux lignes avec le même FAI qui pouvaient acheminer une seule IP sur les deux lignes par paquet de manière équilibrée / avec basculement, alors à partir de 3.6, vous pourriez facilement obtenir une liaison de ligne (au niveau IP) en raison de le routage par paquet dans les deux sens.
Depuis la version 4.4, le noyau est à nouveau passé à un équilibrage de charge basé sur le flux basé sur un hachage sur les adresses source et de destination.
J'utilise actuellement le noyau 4.4.36 et j'utilise le routage par trajets multiples sur les connexions PPPoE. Mon trafic en aval du FAI est acheminé sur les deux lignes distinctes par paquet (une IP acheminée sur les deux lignes). Cela me donne une vitesse de téléchargement plus rapide que la vitesse d'une ligne individuelle. Presque la vitesse des deux lignes s'ajoutait. Cela fonctionne très bien, la vidéo Skype, la VoIP (UDP), YouTube, etc. fonctionnent tous très bien.
En raison de cette bonne expérience en aval, je veux l'essayer en amont, mais mon trafic en amont est acheminé selon le nouvel algorithme basé sur les flux sur les deux appareils ppp (qui ont la même adresse IP). Cela signifie que je ne peux pas atteindre une vitesse de téléchargement plus rapide que la vitesse d'une seule ligne.
Existe-t-il un moyen de configurer le noyau actuel pour utiliser l'algorithme par paquet? Ou une autre méthode pour réaliser un routage par trajets multiples par paquet? Aurais-je besoin de revenir à un ancien noyau (ce que je ne veux pas faire pour diverses autres raisons)?
Mon FAI ne prend pas en charge ppp multi-liens.
Au cas où cela serait pertinent, j'utilise actuellement Arch Linux ARMv7 sur un Raspberry Pi 3.
la source
Réponses:
Ok, donc après avoir eu plus de temps pour enquêter, j'ai trouvé un moyen de le faire en utilisant Linux TEQL (True Link Equalizer). Voici un lien que j'ai vaguement suivi, mais avec quelques ajustements.
http://lartc.org/howto/lartc.loadshare.html
Voici comment je l'ai fait fonctionner sur Arch Linux ARMv7 (Raspberry Pi 3)
Au démarrage:
La commande suivante doit être exécutée au démarrage pour charger le module de noyau approprié.
Les commandes suivantes doivent également être exécutées au démarrage en supposant que vous souhaitiez NAT depuis un réseau local sur eth0.
Le trafic de retour FORWARD est sur ppp + et le MASQUERADE POSTROUTING sur teql + car le trafic sortant sort sur teql et le trafic de retour revient sur ppp.
Lorsque des liens ppp apparaissent:
En supposant que les liens à équilibrer la charge sont ppp, les commandes suivantes à exécuter dans un script dans un
/etc/ppp/ip-up.d/
script.Où se
1.1.1.1
trouve votre adresse IP publique face au FAI. Des adresses IP publiques supplémentaires peuvent être attribuées au périphérique teql0, mais n'ont pas besoin d'être attribuées aux périphériques ppp. Dans ma configuration, les deux liens ppp partagent la même IP (négociée par pppoe, etc.) Le lien teql a été attribué manuellement comme indiqué ci-dessus. Le FAI doit envoyer le trafic pour l'IP également sur les deux liaisons.Le chemin inverse (
rp_filter
) est défini sur2
(lâche) dans le script ci-dessus afin que les paquets de retour ne soient pas supprimés car ils reviennent sur les interfaces ppp plutôt que teql0.Je l'ai configuré de cette façon et cela fonctionne parfaitement. Très facile! Lorsque les liens échouent, le basculement est transparent. Quand ils arrivent, ils recommencent à travailler. On dirait qu'il n'y a pas de perte ou de retard de paquet quand il bascule, et aucun quand il revient.
En outre, l'un des commentateurs a suggéré le lien ci-dessous qui utilise le routage des politiques, avec iptables pour marquer tous les autres paquets, etc., mais j'essaierai dans quelques jours pour voir s'il fonctionne mieux que ce qui précède et fournir des commentaires ici en conséquence.
http://support.aa.net.uk/Router_-_Linux_upload_bonding_using_policy_routing
la source
sysctl -w net.ipv4.ip_forward
mais devrait le diresysctl -w net.ipv4.ip_forward=1
, j'ai corrigé ci-dessus. Cela empêcherait certainement le trafic du LAN de descendre la liaison liée.