So leiten Sie den Port von enp7s0 zu localhost:80 weiter

So leiten Sie den Port von enp7s0 zu localhost:80 weiter

Ich bin ziemlich verwirrt und verstehe es überhaupt nicht iptables.

Ich habe einen nginx-Server, der zuhört localhost:80, und ich möchte mit der IP-Adresse meiner Netzwerkkarte darauf zugreifen 192.168.29.167:80. Ich folgtedigitaloceanzum Einrichten der Regeln.

Mein:

Typ Schnittstelle Adresse
local lo 127.0.0.1
NIC lan enp7s0 192.168.29.167

Ich tat,

iptables -A FORWARD -i lo -o enp7s0 -p tcp --syn --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i lo -o enp7s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp7s0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 80 -d 127.0.0.1 -j SNAT --to-desitnation 127.0.0.1

Das Einrichten der PREROUTINGund POSTROUTINGRegeln FORWARDhat nichts bewirkt. Ich kann nicht localhost:80über zugreifen enp7s0.

(Anmerkung: Ich habe sudo sysctl -w net.ipv4.ip_forward=1)

Antwort1

  1. Sie haben einen Fehler in den natRegeln: Ihre Schnittstellennamen scheinen falsch zu sein. Verwenden Sie besser die DNATauf der Zieladresse basierenden, nicht den Namen der Eingabeschnittstelle. Sie benötigen also nur eine einzige Regel, um das gewünschte Ergebnis zu erzielen:
iptables -t nat -A PREROUTING --dst 192.168.29.167 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:80
  1. Diese Pakete werden nicht weitergeleitet (transitiert), sondern eingegeben. Sie sollten diesen Datenverkehr in der filter/INPUTKette zulassen, nicht in filter/FORWARD. Beachten Sie, dass DNATsich die Eingabeschnittstelle nach der Aktion nicht ändert (Sie sollten also enp7s0die Schnittstelle angeben, nicht lo). Sie können jedoch jede DNATVerbindung mit einer einzigen Regel zulassen.
iptables -t filter -A INPUT -m conntrack --ctstate DNAT -j ACCEPT
  1. Führen Sie den aus, sysctl -w net.ipv4.conf.enp7s0.route_localnet=1um den Empfang von Paketen von außerhalb zu ermöglichen, die an adressiert sind 127.0.0.1.
  2. Verwenden Sie besser iptables-save -cBefehle, um den vollständigen Regelsatz mit Zählern aufzulisten. Sie sollten nat/PREROUTINGzumindest eine Erhöhung der Regelzähler sehen. Verwenden Sie außerdem die , iptables-applyum neue Regeln anzuwenden. Lesen Sie die Dokumentation zu diesen Dienstprogrammen.
  3. Verwenden Sie dies tcpdump -ni enp7s0 'tcp port 80', um den Datenverkehr von außen zu beheben.
  4. Um den lokal generierten Datenverkehr umzuleiten, sollten Sie diese Regeln verwenden
  iptables -t nat -A OUTPUT -p tcp --dport 80 --dst 192.168.29.167 -j DNAT --to 127.0.0.1

Andernfalls können Sie vom Server selbst aus keine Verbindung zu Ihrem Nginx über die Adresse 192.168.29.167 herstellen.

verwandte Informationen