Auf unserem Linux-Server läuft eine Anwendung. Wenn wir von dieser Anwendung aus versuchen, auf localhost (127.0.0.1): localport zuzugreifen, sollte es an eine externe IP weitergeleitet werden. Benutzer werden nur an einem bestimmten Port versuchen, auf den lokalen Host zuzugreifen, der automatisch weitergeleitet wird. Ich habe die nat-Tabelle von iptables gelesen, aber PREROUTING und POSTROUTING sind nicht anwendbar, wenn dies richtig ist, da ich von localhost selbst auf einen Port auf localhost zugreife, der die Netzwerkschnittstelle überhaupt nicht berührt. Die Frage nach der OUTPUT-Tabelle mag nützlich sein, aber als ich einige Kombinationen ausprobierte, funktionierte sie nicht. Benutze ich das Richtige oder ist es überhaupt nicht möglich, es zu tun?
Kann mich jemand in die richtige Richtung weisen?
quelle
lo
) über die Loopback-Schnittstelle . Sie sollten in der Lage sein, iptables-Regeln darüber einzurichten.Antworten:
Ich habe mir vorgenommen, dies selbst zu tun.
Um dies zu erreichen, sollten 2 Regeln und ein Flag gesetzt werden.
Das hier verwendete Beispiel ist für "telnet localhost XXXX", sollte Pakete an Ext.er.nal.IP weiterleiten: JJJJ.
sysctl -w net.ipv4.conf.all.route_localnet = 1
Dieses Flag existiert leider nur auf den neuesten Linux-Kerneln und ist auf einem alten Kernel nicht verfügbar (es gibt auch kein alternatives Flag im alten Kernel). Ich bin mir nicht ganz sicher, von welchem Kernel die Flagge verfügbar ist. Ich glaube, es ist auf Kernel-Versionen 3.XX verfügbar. Dieses Flag dient dazu, die Loopback-Adressen als geeignete Quell- oder Zieladresse zu betrachten. Quelle: https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
iptables -t nat -A OUTPUT -p tcp --dport XXXX -j DNAT - zum Ziel Ext.er.nal.IP: YYYY
Der obige Befehl ändert die Pakete, die an localhost: XXXX gesendet werden, mit der Ziel-IP als Ext.er.nal.IP: YYYY
iptables -t nat -A POSTROUTING -j MASQUERADE
Der Befehl ändert die Quell-IP als öffentliche IP Ihres Computers.
Sie können Ihre Regeln etwas strenger gestalten, indem Sie mit -s, -d, -i und -o die entsprechenden Quell- und Ziel-IPs und -Schnittstellen hinzufügen. Siehe "man iptables".
Vielen Dank an John WH Smith und Wurtel. Vorschläge waren sehr hilfreich.
quelle
Der einfachste Weg, dies zu erreichen, ist die Installation von
netcat
undinetd
(Debian hat dies inopenbsd-inetd
).Fügen Sie eine Zeile hinzu zu
/etc/inetd.conf
:Ersetzen Sie die
1234
durch die echte Portnummer undex.ter.nal.ip
durch die echte externe IP-Adresse. Möglicherweise müssen Sie.1000
dernowait
Option eine größere Anzahl hinzufügen, wenn mehr als 128 Verbindungen pro Minute hergestellt werden müssen. Dies soll verhindern, dass außer Kontrolle geratene Verbindungen Ihr System unnötig laden.Ich habe auch
-q 4 -w 10
alsnc
Optionen wie die in meiner Situation hilft, aber man braucht es nicht.inetd
Nach dem Ändern derinetd.conf
Datei neu laden .Doing es auf diese Weise Anwendungen
nc
gestartet , indeminetd
als Relais - Prozess, die recht gut funktioniert.quelle
iptables
aber ziemlich bald aufgegeben und meineninetd
Trick angewendet . Ich habe nur ein wenig Forschung getan und offenbar muss es in der getan werdennat
TischOUTPUT
Kette mit einem-j DNAT --to-destination ex.ter.nal.ip:port