Non sono del tutto sicuro di aver capito, ma penso che tu sia solo nella catena sbagliata. :-) Anch'io ero confuso quando ho usato iptables la prima volta. Ma il modo per inoltrare il locale port ${LOCAL UNPRIV PORT} è l'istruzione seguente:
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT}
-j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}
È un misto tra un problema semantico e il modo in cui funziona netfilter:ai vecchi tempi l'inoltro di una porta locale implicava una connessione alla casella che sta effettuando l'inoltro, più una seconda connessione alla destinazione. Iptables lo fa in un solo passaggio. Quindi, invece di due connessioni, stai inoltrando il traffico a quella porta direttamente alla destinazione. Netfilter esegue tutti i controlli di integrità e la contabilità:solo i pacchetti che appartengono a una connessione valida sono NAT e possono quindi essere inoltrati.
L'abilitazione di DNAT non consente l'inoltro di alcun pacchetto. Devi anche aggiungere una regola:
$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
E devi abilitare l'inoltro ovviamente.
echo "1" > /proc/sys/net/ipv4/ip_forward
Pro iptables :più sicuro, più flessibile, meno memoria e CPU utilizzate per connessione
Contra iptables :l'inoltro di una connessione da una macchina interna a una macchina interna (restituiscila a eth0) non ha senso con iptables (ovviamente puoi sempre connetterti direttamente), l'inoltro del traffico generato localmente non funziona (una porta il demone di inoltro potrebbe aiutare, ma di solito non ha senso)
Proprio questo potrebbe essere il problema :provi a utilizzare NAT su un non router, quindi dovresti utilizzare un demone di inoltro o saltare completamente questo port forwarding aggiuntivo e fare:
ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box
Su special-vpn-box puoi solo consentire connessioni in entrata dal router e connessioni in uscita a ${ANOTHER SYSTEM}:${REMOTE PORT} utilizzando iptables. In questo modo gli utenti della special-vpn-box possono accedere solo a ${ANOTHER SYSTEM}:${REMOTE PORT} e non potranno fare nient'altro se non sono fidati.
Ecco cosa faccio specificamente per l'inoltro 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
Assicurati di sostituire ip.ip.ip.ip
per il tuo vero IP pubblico e anche il --dport 3306
per la porta che desideri inoltrare.
Infine esegui il comando sysctl e aggiorna anche il tuo /etc/sysctl.conf
Puoi aggiornare sysctl.ctl
per consentire il routing di localhost con il seguente comando:
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf
Ora tutto sembra semplice e buono, ma ci sono volute alcune ricerche e ricerche. Tieni presente che l'inoltro localhost/127.0.0.1 richiede questo metodo e gli altri esempi tipici non funzionano. Alcuni esempi di soluzioni che non funzionano con 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}