Je vis actuellement dans un pays qui bloque de nombreux sites Web et a des connexions réseau non fiables avec le monde extérieur. J'ai deux points de terminaison OpenVPN (disons: vpn1 et vpn2) sur des serveurs Linux que j'utilise pour contourner le pare-feu. J'ai un accès complet à ces serveurs. Cela fonctionne assez bien, à l'exception de la forte perte de packages sur mes connexions VPN. Cette perte de paquets varie entre 1% et 30% selon le temps et semble avoir une faible corrélation, la plupart du temps elle semble aléatoire.
Je pense à mettre en place un routeur domestique (également sous Linux) qui maintient les connexions OpenVPN aux deux points de terminaison et envoie tous les paquets deux fois, aux deux points de terminaison. vpn2 enverrait tous les paquets de la maison à vpn1. Le trafic de retour serait envoyé à la fois directement de vpn1 à la maison et également via vpn2.
+------------+
| home |
+------------+
| |
| OpenVPN |
| links |
| |
~~~~~~~~~~~~~~~~~~ unreliable connection
| |
+----------+ +----------+
| vpn1 |---| vpn2 |
+----------+ +----------+
|
+------------+
| HTTP proxy |
+------------+
|
(internet)
Pour plus de clarté: tous les paquets entre la maison et le proxy HTTP seront dupliqués et envoyés sur des chemins différents, pour augmenter les chances que l'un d'eux arrive. Si les deux arrivent, la première seconde peut être éliminée en silence.
L'utilisation de la bande passante n'est pas un problème, tant du côté de la maison que du côté du point de terminaison. vpn1 et vpn2 sont proches l'un de l'autre (ping de 3 ms) et ont une connexion fiable.
Avez-vous des indications sur la façon dont cela pourrait être réalisé en utilisant les politiques de routage avancées disponibles sous Linux?
la source
J'ai utilisé la réponse fournie par @ user48116 et cela fonctionne comme un charme. La configuration est en fait assez simple!
REMARQUE : J'ai implémenté cela avec deux connexions à un seul serveur, car cela a déjà résolu le problème pour moi. Si vous voulez essayer une configuration avec deux serveurs, le moyen le plus simple est probablement d'utiliser la redirection de port pour transférer le port UDP du deuxième serveur vers le premier, et d'utiliser la même recette que celle décrite ici. Je n'ai cependant pas testé cela moi-même.
Tout d'abord, assurez-vous que vous avez un noyau 2.6 avec prise en charge de la liaison (par défaut dans toutes les distributions modernes) et que vous avez installé ifenslave.
Ensuite, mettez-le dans votre /etc/rc.local ou dans tout autre endroit que vous préférez, mais assurez-vous qu'il est exécuté avant le démarrage de openvpn (car il essaiera de se lier à bond0):
Client:
Vous pouvez ajouter un routage si nécessaire ici, assurez-vous que vous effectuez également tout le routage approprié de l'autre côté.
Serveur:
Créez un script /etc/openvpn/tap-up.sh (et n'oubliez pas de le marquer comme exécutable avec chmod a + x tap-up.sh):
Ensuite, ajoutez un bridge0a.conf et bridge0b.conf à / etc / openvpn / avec une clé partagée. Les fichiers sont les mêmes pour a et b, sauf pour un port différent (par exemple, utilisez 3002 pour b). Remplacez 11.22.33.44 par l'IP publique de votre serveur.
Client:
Serveur:
N'oubliez pas de modifier / etc / defaults / openvpn pour vous assurer que vos nouvelles configurations VPN sont démarrées. Redémarrez vos machines ou chargez rc.local et redémarrez openvpn manuellement.
Vous êtes maintenant prêt à tester votre configuration:
Si tout se passe bien et que la ligne est bonne, vous verrez quatre réponses pour chaque package ICMP: vos packages sont dupliqués du côté local, et les réponses à ces deux packages sont à nouveau dupliquées du côté distant. Ce ne sera pas un problème pour les connexions TCP, car TCP ignorera simplement tous les doublons.
C'est un problème pour les paquets UDP, car c'est au logiciel de gérer les doublons. Par exemple, une requête DNS donnera quatre réponses au lieu des deux attendues (et utilisera quatre fois la bande passante normale pour la réponse au lieu de deux fois):
Bonne chance!
la source