J'ai un serveur fonctionnant sur mon réseau local qui fait office de routeur pour les ordinateurs de mon réseau. Je veux maintenant faire en sorte que les requêtes TCP sortantes vers certaines adresses IP soient tunnelisées par une connexion SSH, sans donner aux personnes de mon réseau la possibilité d'utiliser ce tunnel SSH pour se connecter à des hôtes arbitraires.
L'approche que j'avais en tête jusqu'à présent consistait à avoir une instance de chaussettes rouges écoutant sur localhost et pour rediriger toutes les requêtes sortantes vers les adresses IP que je veux détourner vers cette instance de redsocks. J'ai ajouté la règle iptables suivante :
iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --to-destination 127.0.0.1:12345
Apparemment, le noyau Linux considère les paquets provenant d'une adresse non 127.0.0.0/8 vers une adresse 127.0.0.0/8 comme des "paquets martiens" et les supprime. Ce qui a fonctionné, cependant, était de faire écouter redsocks sur eth0 au lieu de lo et ensuite de faire en sorte qu'iptables DNAT les paquets vers l'adresse eth0 à la place (ou en utilisant une règle REDIRECT). Le problème est que chaque ordinateur de mon réseau peut alors utiliser l'instance de redsocks pour se connecter à tous les hôtes sur Internet, mais je veux limiter son utilisation à un certain ensemble d'adresses IP.
Existe-t-il un moyen de faire en sorte qu'iptables envoie les paquets DNAT vers 127.0.0.1 ? Sinon, quelqu'un a-t-il une idée de la façon dont je pourrais atteindre mon objectif sans ouvrir le tunnel à tout le monde ?
更新しました。 J'ai également essayé de changer la source des paquets, sans succès :
iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 1.2.3.4 -j SNAT --to-source 127.0.0.1
iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 127.0.0.1 -j SNAT --to-source 127.0.0.1