Pour résoudre ce problème, vous devrez configurer à la fois iptables et les règles de routage. Le problème spécifique que vous rencontrez est que les paquets SSH sortants sont routés via votre interface de tunnel VPN anonyme au lieu de votre interface Ethernet. Cela se produit car votre logiciel VPN a mis en place une règle de routage pour envoyer tout le trafic non géré via l'interface du tunnel. Bon pour anonymiser votre trafic réseau; mauvais pour établir des connexions SSH à votre ordinateur.
Il existe plusieurs façons de résoudre ce problème, mais je vais partager avec vous celle qui a fonctionné pour moi dans une situation identique. Voici ce que nous devons faire:
- Créer une nouvelle table de règles IP pour gérer le trafic non VPN
- Ajoutez une règle IP pour rechercher dans notre table sans VPN les paquets marqués d'un masque de filtre réseau spécifique
- Ajoutez une route IP qui dirige tout le trafic dans notre table sans VPN pour utiliser votre interface Ethernet au lieu du tunnel
- Ajoutez une règle iptables pour marquer tout le trafic SSH avec notre masque netfilter désigné
Remarque: je travaillais avec Raspbian en procédant comme suit, vous devrez donc peut- être ajuster les commandes un peu pour l'adapter à votre distribution.
Création d'une nouvelle table de règles IP
Commencez par inspecter le fichier de définition de table d'iproute2. Nous voulons nous assurer que nous n'utilisons pas le nom ou le numéro des tables de règles existantes.
cat /etc/iproute2/rt_tables
Vous verrez probablement quelque chose dans ce sens:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Choisissez un nombre et un nom arbitraires pour votre nouvelle table de règles - tout ce qui n'est pas utilisé ci-dessus. J'utiliserai le numéro 201 et le nom novpn
pour le reste de cette réponse.
Ajoutez une définition directement au fichier de définition ou modifiez-la dans l'éditeur de texte de votre choix:
echo "201 novpn" >> /etc/iproute2/rt_tables
Ajouter une nouvelle règle IP pour rechercher la table sans VPN
Vérifiez les règles ip existantes qui traitent des masques netfilter:
ip rule show | grep fwmark
Si grep ne révèle rien, vous êtes en clair. S'il imprime certaines lignes, notez le nombre hexadécimal à droite du mot fwmark
dans chaque ligne. Vous devrez choisir un numéro qui n'est pas actuellement utilisé. Comme je n'avais pas de règles fwmark existantes, j'ai choisi le nombre 65.
ip rule add fwmark 65 table novpn
Ce que cela fait, c'est que tous les paquets avec le masque 65 de netfilter recherchent dans notre nouveau novpn
tableau des instructions sur la façon d'acheminer les paquets.
Dirigez tout le trafic dans notre nouveau tableau pour utiliser l'interface Ethernet
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
La chose importante à noter ici est dev eth0
. Cela force tout le trafic qui traverse la novpn
table à utiliser uniquement l'interface Ethernet matérielle, au lieu de l'interface de tunnel virtuel créée par votre VPN.
Le moment serait venu de vider votre cache iproute pour vous assurer que vos nouvelles règles et routes prennent effet immédiatement:
ip route flush cache
Demander à la règle de pare-feu de marquer tout le trafic SSH avec le masque de filtre réseau désigné
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
Il y a trop d'options ici pour que j'explique en profondeur. Je vous encourage fortement à lire la page de manuel d'iptables pour avoir une idée de ce qui se passe ici:
man iptables
En bref: nous ajoutons une règle de sortie à la table mangle du pare-feu (pour la gestion spécialisée des paquets) qui lui demande de marquer tous les paquets TCP provenant du port source 22 avec notre masque de filtre réseau 65 désigné.
Et ensuite?
À ce stade, vous devez être prêt à tester SSH. Si tout se passe bien, vous devriez être satisfait de l'invite "login as".
Pour des raisons de sécurité, je vous recommande de demander à votre pare-feu de supprimer toutes les demandes SSH entrantes de l'interface du tunnel:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
Notez que toutes les instructions ci-dessus sont transitoires (à l'exception de la création de l'ID de la table de règles) - elles s'effaceront au prochain redémarrage de votre ordinateur. Les rendre permanents est un exercice que je vous laisse.