Bonjour à tous,
Je teste pour l'entraînement et apprentissage, quelques notions avec ip route + iptables. Problème : en plus d'être coincé dans mes recherches, je pense que je n'ai pas les "bons termes" (et/ou la bonne approche) pour la recherche. Si une bonne âme pouvait m'aiguiller...
J'ai deux postes sur le réseaux, tous deux sous Ubuntu (server + desktop) :
- le serveur (
192.168.1.43) dispose d'une instance MariaDB dont l'écoute n'est qu'en local (127.0.0.1) sur le port 3306
- le client (
192.168.1.30) doit y accéder par un autre port (admettons 3307) : le serveur doit donc récupérer la demande et faire les opérations réseaux de routage.
Pour me faciliter la vie (parce que le dépit m'a rapidement pris...), plutôt de passer par MariaDB, j'ai temporairement pris une instance Web avec Python :
python -m http.server
... qui écoute sur le port 8000 et toute interface. Le principe est le même que précédemment, mais la console me renvoie les requêtes...
Pour l'instant, j'ai ceci concernant Python - avec ce que j'en comprends :
$ iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 80 -j REDIRECT --to-port 8000
# ---> je redirige mes paquets reçus du port 80 vers le port 8000 en TCP
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
# ---> la "masquarade" pour les IP qui arrive (prenant l'IP de la machine qui traite la demande)
$ iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.1.43
# ---> le postrouting qui "transforme" l'IP de source (celle d'où vient le paquet) par l'adresse de la machine qui traite la demande
... en oubliant pas d'activer :
sysctl -w net.ipv4.conf.enp0s3.route_localnet=1
Lorsque du client je demande
http://192.168.1.43:80 tout va bien : l'instant en écoute de Python sur le serveur reçoit sur le port 8000 les paquets et l'échange se fait.
MAIS Python reçoit les paquets avec l'IP du client. Donc si je veux par exemple, faire la même chose avec MariaDB (mon client SQL sur ma machine client), j'ai un refus car le transfert ne se fait pas vers localhost.
Mon souhait en résumé :
[center]
- CLIENT : envoie une demande sur le port XXX de l'IP A
- SERVEUR : reçoit une demande sur le port XXX de l'IP A
- SERVEUR : traite la demande avec ses tables, et modifie la demande du port XXX vers YYY et de l'IP A vers son IP 127.0.0.1 (sur l'interface qui va bien ?)
- SERVEUR : le logiciel qui a bindé sur 127.0.0.1:YYY reçoit la demande, la traite, envoie une réponse
- SERVEUR : la réponse est remise avec l'IP d'origine de la demande
- CLIENT : reçoit la réponse
[/center]
J'imagine bien que je ne dois être très clair, j'en suis désolé...
Toute piste, explication ou solution vous honorera de ma gratitude éternelle (c'est peu je sais... 😉)
Bonne fin d'après-midi,
Julien.