Ich bin mir nicht ganz sicher, ob ich das verstanden habe, aber ich glaube, du bist einfach in der falschen Kette. :-) Ich war auch verwirrt, als ich das erste Mal iptables benutzte. Aber der Weg nach vorwärts der Einheimische port ${LOCAL UNPRIV PORT} ist die folgende Anweisung:
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT}
-j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}
Es ist eine Mischung aus einem semantischen Problem und der Funktionsweise von Netfilter:Früher erforderte die Weiterleitung eines lokalen Ports eine Verbindung zu der weiterleitenden Box plus eine zweite Verbindung zum Ziel. Iptables erledigt dies in einem Schritt. Anstelle von zwei Verbindungen leiten Sie also den Datenverkehr zu diesem Port direkt an das Ziel weiter. Netfilter führt alle Plausibilitätsprüfungen und Buchhaltungen durch:Nur Pakete, die zu einer gültigen Verbindung gehören, werden NATted und können daher weitergeleitet werden.
Das Aktivieren von DNAT erlaubt keine Weiterleitung von Paketen. Sie müssen auch eine Regel hinzufügen:
$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
Und Sie müssen natürlich die Weiterleitung aktivieren.
echo "1" > /proc/sys/net/ipv4/ip_forward
Pro iptables :sicherer, flexibler, weniger Speicher- und CPU-Verbrauch pro Verbindung
Verhütungsmittel :Das Weiterleiten einer Verbindung von einer internen Maschine zu einer internen Maschine (Rückspeisung in eth0) macht mit iptables keinen Sinn (natürlich können Sie immer direkt eine Verbindung herstellen), das Weiterleiten von lokal generiertem Datenverkehr funktioniert nicht (ein port forwarding daemon könnte helfen - macht aber normalerweise keinen Sinn)
Genau das könnte das Problem sein :Sie versuchen, NAT auf einem Nicht-Router zu verwenden, also sollten Sie einen Weiterleitungs-Daemon verwenden oder diese zusätzliche Port-Weiterleitung vollständig überspringen und Folgendes tun:
ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box
Auf special-vpn-box können Sie nur eingehende Verbindungen vom Router und ausgehende Verbindungen zu ${ANOTHER SYSTEM}:${REMOTE PORT} mit iptables zulassen. Auf diese Weise können Benutzer der special-vpn-box nur auf ${ANOTHER SYSTEM}:${REMOTE PORT} zugreifen und nichts anderes tun, wenn ihnen nicht vertraut wird.
Folgendes mache ich speziell für die Localhost-Weiterleitung:
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
Stellen Sie sicher, dass Sie ip.ip.ip.ip
ersetzen für Ihre echte öffentliche IP und auch die --dport 3306
für den Port, den Sie weiterleiten möchten.
Führen Sie schließlich den Befehl sysctl aus und aktualisieren Sie auch Ihre /etc/sysctl.conf
Sie können sysctl.ctl
aktualisieren um das Routing von localhost mit dem folgenden Befehl zuzulassen:
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf
Nun, das alles scheint einfach und gut zu sein, aber es bedurfte einiger Recherche und Jagd. Seien Sie gewarnt und verstehen Sie, dass die Weiterleitung von localhost/127.0.0.1 diese Methode erfordert und die typischen anderen Beispiele nicht funktionieren. Einige Beispiele für Lösungen, die mit localhost nicht funktionieren:
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}