Je ne suis pas tout à fait sûr d'avoir compris, mais je pense que vous êtes juste dans la mauvaise chaîne. :-) J'étais confus aussi quand j'ai utilisé iptables pour la première fois. Mais la façon de transmettre la locale port ${LOCAL UNPRIV PORT} est la déclaration ci-dessous :
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT}
-j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}
C'est un mélange entre un problème sémantique et le fonctionnement de netfilter :Autrefois, le transfert d'un port local impliquait une connexion à la machine qui transmet, plus une seconde connexion à la destination. Iptables le fait en une seule étape. Ainsi, au lieu de deux connexions, vous transférez le trafic vers ce port directement vers la destination. Netfilter s'occupe de toutes les vérifications d'intégrité et de la comptabilité :seuls les paquets appartenant à une connexion valide sont NATtés et peuvent donc être transférés.
L'activation de DNAT n'autorise aucun transfert de paquets. Vous devez également ajouter une règle :
$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP
$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT
$IPT -A INET-PRIV -j DROP
Et vous devez bien sûr activer le transfert.
echo "1" > /proc/sys/net/ipv4/ip_forward
Tables Pro iptables :plus sécurisé, plus flexible, moins de mémoire et de CPU utilisés par connexion
Tableaux de contre-indications :transférer une connexion d'une machine interne vers une machine interne (la renvoyer dans eth0) n'a pas de sens avec iptables (bien sûr, vous pouvez toujours vous connecter directement), transférer le trafic généré localement ne fonctionne pas (un port le démon de transfert peut aider - mais n'a généralement pas de sens)
C'est peut-être le problème :vous essayez d'utiliser NAT sur un non-routeur, vous devez donc utiliser un démon de transfert ou ignorer complètement ce transfert de port supplémentaire et faire :
ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box
Sur special-vpn-box, vous ne pouvez autoriser que les connexions entrantes du routeur et les connexions sortantes vers ${ANOTHER SYSTEM} :${REMOTE PORT} à l'aide d'iptables. De cette façon, les utilisateurs de la boîte VPN spéciale ne peuvent accéder qu'à ${ANOTHER SYSTEM} :${REMOTE PORT} et ne pourront rien faire d'autre s'ils ne sont pas dignes de confiance.
Voici ce que je fais spécifiquement pour le transfert localhost :
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
sysctl -w net.ipv4.conf.all.route_localnet=1
Assurez-vous de remplacer ip.ip.ip.ip
pour votre vraie IP publique et aussi le --dport 3306
pour le port que vous souhaitez rediriger.
Enfin, exécutez la commande sysctl et mettez également à jour votre /etc/sysctl.conf
Vous pouvez mettre à jour sysctl.ctl
pour autoriser le routage de localhost avec la commande suivante :
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf
Maintenant, tout cela semble simple et bon, mais il a fallu des recherches et de la chasse. Soyez averti et comprenez que le transfert localhost/127.0.0.1 nécessite cette méthode et que les autres exemples typiques ne fonctionnent pas. Quelques exemples de solutions qui ne fonctionnent pas avec localhost :
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE
http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles
# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}
iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}