Grundlegende iptables NAT-Portweiterleitung


8

Ich habe drei Computer: einen lokalen PC (öffentliche IP 1.2.3.4), eine Ubuntu 10 Server-Box in einem Rechenzentrum (eth0 auf 5.6.7.8 öffentliche IP) und einen Server eines Drittanbieters, der eine Website außerhalb meines Netzwerks hostet (sagen wir) Slashdot am 216.34.181.45).

  • Wie greife ich mit iptables von meinem lokalen Computer aus mit 5.6.7.8:8080 auf Slashdot zu?
  • Würde sich dieser Prozess unterscheiden, wenn sich Slashdot im selben LAN wie meine Ubuntu-Box befindet?
  • Kann dies nur mit NAT PREROUTING / POSTROUTING gemacht werden, oder brauche ich MASQUERADE?

Antworten:


21
   PC ----- Ubuntu 10 Server ----- Slashdot 
(1.2.3.4)      (5.6.7.8)        (216.34.181.45)
  1. Aktivieren Sie die IP-Weiterleitung unter Ubuntu:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    

    und fügen Sie die folgenden Regeln hinzu:

    iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j DNAT \
                                           --to-destination 216.34.181.45:80 
    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 5.6.7.8
    
  2. Nein.

  3. Sie sollten MASQUERADE verwenden, wenn Ubuntu eine dynamische IP hat:

    iptables -t nat -A POSTROUTING -j MASQUERADE
    

Sie können in diesem Fall auch die lokale SSH-Portweiterleitung verwenden, indem Sie den folgenden Befehl auf Ubuntu ausführen:

$ ssh -L 5.6.7.8:8080:216.34.181.45:80 -N user@216.34.181.45

Es gibt noch einen anderen (oder mehr) Weg, dies zu tun. Schauen Sie sich das Rinetd an :

Name       : rinetd
Arch       : i386
Version    : 0.62
Release    : 6.el5.art
Size       : 41 k
Repo       : installed
Summary    : TCP redirection server
URL        : http://www.boutell.com/rinetd
License    : GPL
Description: rinetd is a daemon which redirects TCP connections from one IP address
           : and port to another IP address and port. This daemon is often used to
           : access services behind a firewall.

Die Konfiguration ist sehr einfach. Fügen Sie die folgende Zeile hinzu in /etc/rinetd.conf:

5.6.7.8 8080 216.34.181.45 80

und Start:

# /etc/init.d/rinetd start
Starting rinetd:                                           [  OK  ]

Es wird alles für Sie tun.


Fantastisch. Die iptables-Version funktioniert wie ein Zauber. Mir fehlte die POSTROUTING-Regel und ich kam nicht weiter. Wenn jemand versucht, dies mit einer gespeicherten .conf-Datei zu tun, ist dies das, wonach Sie *nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 8080 -j DNAT --to-destination 216.34.181.45:80 -A POSTROUTING -o eth0 -j SNAT --to-source 5.6.7.8 COMMIT
suchen


Perfekt! Nur eine kurze Frage. Wenn das Antwortpaket mit einer Zieladresse von 5.6.7.8 zum Ubuntu-Server zurückkehrt, welches Modul ist dafür verantwortlich, das Paket zu ändern und es auf 1.2.3.4 zurückzusenden? Ist es das Modul "Verbindungsverfolgung"?
Keeto
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.