Iptables redirige vers localhost?

13

Supposons que j'ai un réseau avec un serveur acheminant toutes les connexions de l'intérieur du réseau vers Internet. Comment puis-je configurer iptables pour qu'au lieu de router les connexions entrantes vers Internet, il les achemine vers le port localhost 8080. Toute aide est appréciée.

DankMemes
la source
Le problème est qu'avec une redirection simple (adresse IP de destination NAT), vous perdrez l'adresse IP de destination d'origine. Voulez-vous configurer un proxy HTTP transparent ou doit-il également traiter d'autres protocoles que HTTP?
pabouk
Peu importe que ce soit transparent ou non
DankMemes
Rediriger tout le trafic vers un proxy est une base pour un proxy transparent :)
pabouk
Voici une autre réponse qui m'a vraiment aidé: unix.stackexchange.com/questions/111433/…
Wren T.

Réponses:

6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
Alex Antonov
la source
1
n'utilisez pas de gras ....
Merci! Je n'ai pas encore essayé mais je soupçonne que ce qui me manque est la commande de transfert ip. Et la prochaine fois, veuillez utiliser des blocs de code, pas en gras.
DankMemes
@AlexAntonov veuillez utiliser des blocs de code. Sélectionnez votre texte en mode édition et cliquez sur l'icône des crochets.
DankMemes
@ZoveGames, désolé, l'a corrigé.
Alex Antonov
2
J'ai expérimenté cela. Le sysctl ip_forward n'est pas nécessaire. Cependant, l'option route_localnet est ici . Je vois maintenant que c'est exactement ce que déclare la réponse de Juan Cespedes .
Matt Joiner
31

cela peut être fait avec iptables, mais uniquement avec le noyau> = 3.6.

Vous devrez faire:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardn'est pas nécessaire, car le paquet n'est pas transmis, mais si vous n'incluez pas le sysctl for route_localnet(qui ne fonctionne que dans les noyaux> = 3.6), le paquet sera abandonné par le noyau car il le considère comme un "martien", à venir de l'extérieur et ayant une adresse de destination de 127.0.0.1

Juan Cespedes
la source
Ouaip, ça marche
Nick De Greek
Ne connaissait pas route_localnet. Tellement vieille école et ne pouvait pas comprendre pourquoi ip_forward ne fonctionnait pas (soupçonné que ce n'était pas nécessaire mais a quand même essayé).
dmourati
1
Assurez- vous que vous enregistrez net.ipv4.conf.all.route_localnet=1dans /etc/sysctl.confsinon il ne sera pas persistant et après le redémarrage de la variable va revenir à 0, ce qui provoque le paquet abandonné. Ensuite, il serait très difficile de comprendre pourquoi maintenant tout ne fonctionne pas ... cela m'est arrivé. ;)
savoir
Désolé de poser une vieille question, mais existe-t-il un équivalent ipv6 net.ipv4.conf.all.route_localnetà utiliser avec ip6tables?
Kebian