Loopback zur weitergeleiteten öffentlichen IP-Adresse aus dem lokalen Netzwerk - Haarnadel-NAT

45

Dies ist eine kanonische Frage zu Hairpin NAT (Loopback NAT).

Die allgemeine Form dieser Frage lautet:

Wir haben ein Netzwerk mit Clients, einem Server und einem NAT-Router. Auf dem Router gibt es eine Portweiterleitung zum Server, sodass einige seiner Dienste extern verfügbar sind. Wir haben DNS, das auf die externe IP zeigt. Lokale Netzwerkclients können keine Verbindung herstellen, aber externe Arbeit.

  • Warum schlägt dies fehl?
  • Wie kann ich ein einheitliches Benennungsschema erstellen (DNS-Namen, die sowohl lokal als auch extern funktionieren)?

Diese Frage wurde aus mehreren anderen Fragen zusammengeführt. Sie verwiesen ursprünglich auf FreeBSD, D-Link, Microtik und andere Geräte. Sie alle versuchen jedoch, dasselbe Problem zu lösen.

Adopilot
quelle
1
Wenn Sie den Zugriff über das Internet testen möchten, ist es sinnlos, die Routen und / oder DNS-Einstellungen des Routers im besten Fall zu ändern. Von innen würden Sie überprüfen, ob der interne Teil des Routers funktioniert. Ich schlage vor, Sie verwenden einen Proxy-Server irgendwo auf der Außenseite.

Antworten:

16

Was Sie suchen, heißt "Haarnadel NAT". Anfragen von der internen Schnittstelle nach einer der externen Schnittstelle zugewiesenen IP-Adresse sollten so behandelt werden, als ob sie von der externen Schnittstelle eingegangen wären.

Ich bin mit FreeBSD überhaupt nicht vertraut, lese aber im "pf" -Handbuch für OpenBSD ( http://www.openbsd.org/faq/pf/rdr.html ) die vorgeschlagenen Lösungen für Split-Horizon-DNS unter Verwendung von DMZ-Netzwerk oder TCP-Proxy lassen mich glauben, dass "pf" kein Haarnadel-NAT unterstützt.

Ich würde die Route des Split-Horizon-DNS einschlagen und nicht die internen IP-Adressen in URLs verwenden, sondern die Namen.

Evan Anderson
quelle
Ich bin auf diesen Thread gestoßen, als ich versucht habe, dasselbe Problem zu lösen, und obwohl FreeBSD kein Haarnadel-NAT-out-of-the-Box-Verfahren unterstützt, gibt es Möglichkeiten, den internen -> externen -> internen Datenverkehr umzuleiten und zu NAT.
Purpurreiher
Zum Beispiel: no nat on $int_if proto tcp from $int_if to $int_net , nat on $int_if proto tcp from $int_net to $hairpin_int port $hairpin_ports -> $int_if, rdr on $int_if proto tcp from $int_net to $ext_if port $hairpin_ports -> $hairpin_int
purpur Reiher
48

Da dies zur kanonischen Frage zu Haarnadel-NAT erhoben wurde , dachte ich, dass es wahrscheinlich eine allgemein gültige Antwort geben sollte als die derzeit akzeptierte, die sich (obwohl ausgezeichnet) speziell auf FreeBSD bezieht.

Diese Frage bezieht sich auf Dienste, die von Servern in IPv4-Netzwerken mit RFC1918-Adresse bereitgestellt werden und für externe Benutzer verfügbar sind, indem das Ziel-NAT (DNAT) am Gateway eingeführt wird. Interne Benutzer versuchen dann, über die externe Adresse auf diese Dienste zuzugreifen. Ihr Paket geht vom Client zum Gateway-Gerät, das die Zieladresse neu schreibt und sie sofort wieder in das interne Netzwerk einspeist. Es ist diese scharfe Kehrtwende, die das Paket am Gateway macht, die den Namen Haarnadel NAT in Analogie zur Haarnadelkurve hervorruft .

Das Problem tritt auf, wenn das Gateway-Gerät die Zieladresse, nicht jedoch die Quelladresse überschreibt. Der Server empfängt dann ein Paket mit einer internen Zieladresse (seiner eigenen) und einer internen Quelladresse (der des Clients). es weiß, dass es direkt auf eine solche Adresse antworten kann, also tut es das auch. Da diese Antwort direkt ist, wird sie nicht über das Gateway gesendet, sodass es nie möglich ist, die Auswirkung des eingehenden Ziel-NAT auf das ursprüngliche Paket auszugleichen, indem die Quelladresse des zurückgegebenen Pakets neu geschrieben wird.

Der Client sendet somit ein Paket an eine externe IP-Adresse, erhält jedoch eine Antwort von einer internen IP-Adresse. Es ist nicht bekannt, dass die beiden Pakete Teil derselben Konversation sind, daher findet keine Konversation statt.

Die Lösung besteht darin, dass für Pakete, die ein solches Ziel-NAT erfordern und das Gateway vom internen Netzwerk aus erreichen , auch das Quell-NAT (SNAT) für das eingehende Paket ausgeführt wird, indem die Quelladresse in der Regel auf die des Gateways umgeschrieben wird. Der Server glaubt dann, dass der Client das Gateway selbst ist, und antwortet direkt darauf. Dies gibt dem Gateway wiederum die Möglichkeit, die Auswirkungen von DNAT und SNAT auf das eingehende Paket auszugleichen, indem sowohl die Quell- als auch die Zieladresse auf dem Rückpaket neu geschrieben werden.

Der Client glaubt, mit einem externen Server zu sprechen. Der Server glaubt, mit dem Gateway-Gerät zu sprechen. Alle Parteien sind glücklich. Ein Diagramm kann an dieser Stelle hilfreich sein:

Bildbeschreibung hier eingeben

Einige Consumer-Gateway-Geräte sind hell genug, um die Pakete zu erkennen, für die der zweite NAT-Schritt erforderlich ist. In einem Haarnadel-NAT-Szenario funktionieren diese Pakete möglicherweise sofort. Andere sind es nicht und werden es auch nicht, und es ist unwahrscheinlich, dass sie zum Arbeiten gebracht werden können. Eine Diskussion darüber, welche Geräte für Endverbraucher geeignet sind, ist für Server Fault nicht relevant.

Ordnungsgemäße Netzwerkgeräte können in der Regel als funktionsfähig eingestuft werden, müssen jedoch - da sie nicht die Aufgabe haben, ihre Administratoren zu erraten - dazu aufgefordert werden, dies zu tun. Linux verwendet iptables, um die DNAT zu tun, also:

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j DNAT --to-destination 192.168.3.11

Dadurch wird einfaches DNAT für den HTTP-Port aktiviert, um einen internen Server einzuschalten 192.168.3.11. Aber um Haarnadel-NAT zu aktivieren, braucht man auch eine Regel wie:

iptables -t nat -A POSTROUTING -d 192.168.3.11 -p tcp --dport 80 -j MASQUERADE

Beachten Sie, dass solche Regeln in den relevanten Ketten an der richtigen Stelle sein müssen, damit sie ordnungsgemäß funktionieren. Abhängig von den Einstellungen in der filterKette sind möglicherweise zusätzliche Regeln erforderlich, damit der NAT-Verkehr fließen kann. Alle diese Diskussionen sind nicht Gegenstand dieser Antwort.

Aber wie andere bereits gesagt haben, ist es nicht die beste Möglichkeit, das Problem durch Aktivieren von Haarnadel-NAT zu lösen. Das Beste ist Split-Horizon-DNS , bei dem Ihre Organisation unterschiedliche Antworten für die ursprüngliche Suche bereitstellt, je nachdem, wo sich der anfordernde Client befindet. Dies geschieht entweder durch unterschiedliche physische Server für interne und externe Benutzer oder durch die Konfiguration des DNS-Servers, um entsprechend unterschiedlich zu reagieren die Adresse des anfragenden Kunden.

MadHatter unterstützt Monica
quelle
Ich frage mich ein bisschen über die Adressen auf Paketen, die zwischen Gateway und Server ausgetauscht werden. Wäre es nicht konsistenter, wenn der Server die öffentliche IP-Adresse des Routers als Client-IP sehen würde? Technisch kann beides funktionieren, aber um konsistent zu bleiben, wie andere Server die Clients sehen, muss die öffentliche IP verwendet werden.
Kasperd
1
Ich gehe davon aus, dass Sie sich auf den letzten Fall beziehen, "richtige Haarnadel NAT". Das Entscheidende ist, die Quelladresse auf dem eingehenden Paket so umzuschreiben, dass sie zum Router zurückgeht, der dann sowohl die DNAT als auch die SNAT umkehren kann und so das Problem vermeidet. Welche der vielen Adressen der Router verwendet, um dies zu tun, ist eher ein Geschmackskriterium. Wenn Sie dies tun iptables, können Sie dies auf jeden Fall konfigurieren, wenn Sie dies wünschen.
MadHatter unterstützt Monica
1
Viele Administratoren, auch ich, halten Split-Horizon-DNS für eine Heilung, die schlimmer ist als Krankheit. Wenn eine zusätzliche SNAT überhaupt als Krankheit bezeichnet werden kann. Ein DNS mit geteilter Ansicht verwirrt Menschen, während es das Leben von Routern erleichtert. Dieses Thema sollte besser von einer separaten ServerFault-Frage / Antwort behandelt werden.
Kubanczyk
Meine Antwort ist sehr über Haarnadel NAT. Ich sehe die Vor- und Nachteile des Öffnens einer kanonischen "Split-Horizon-DNS" -Frage: Zu den Vorteilen gehört eine Frage, die sich mit den Verwendungszwecken und Problemen von SHDNS befasst es verschmolz damit, so dass das auch mit deiner Frage passieren könnte. Wenn ich es wäre, würde ich das Thema auf Meta ansprechen und mich um Konsens bemühen. Wenn eine solche Frage geschrieben wird, freue ich mich darauf, Ihre Antwort darauf zu lesen!
MadHatter unterstützt Monica
@ MadHatter Wo soll ich den Befehl iptables schreiben? auf Client oder Gateway oder Server?
Rocky Balboa
9

Das Problem hierbei ist, dass Ihr Router die Adresse Ihres internen Clients nicht NAT-fähig macht. Daher schlägt der TCP-Handshake fehl.

Nehmen wir folgende IPs an

  • Client: 192.168.1.3
  • Server: 192.168.1.2
  • Interner Router: 192.168.1
  • Router extern: 123.123.123.1

Hier ist was passiert:

  1. Client (192.168.1.3) sendet TCP-SYN an Ihre externe IP, Port 80 (123.123.123.1:80)
  2. Der Router erkennt die Portweiterleitungsregel und leitet das Paket an den Server (192.168.1.2:80) weiter, ohne die Quell-IP (192.168.1.3) zu ändern.
  3. Client wartet auf ein SYN-ACK von der externen IP
  4. Der Server sendet seine Antwort direkt an den Client zurück, da er sich im selben Subnetz befindet. Das Paket wird nicht an den Router gesendet, wodurch das NAT umgekehrt wird.
  5. Der Client erhält ein SYN-ACK von 192.168.1.2 anstelle von 123.123.123.1. Und wirf es weg.
  6. Der Client wartet immer noch auf ein SYN-ACK von 123.123.123.1 und hat eine Zeitüberschreitung.
PEra
quelle
4

Warum nicht überall Split-Horizon-DNS anstelle von fest codierten IP-Adressen verwenden? Sie hätten eine externe Domain, die außen auf 217.xxx und innen auf 192.xxx zeigt.

Ryaner
quelle
1
Wenn Sie einen Moment Zeit haben, können Sie erläutern, was Split-Horizon DNS ist, wie es funktioniert und welche Nachteile es hat. Dies ist jetzt eine kanonische Frage und es wäre schön, eine vollständigere Antwort zu haben.
Chris S
2

Wenn es sich um einen Original-D-Link-Router handelt (dh nicht um Rev. D / Firmware Version 1.00VG von Virgin Media), sollten Sie in der Lage sein, die Einstellungen anzupassen, um dies zu umgehen. (Ich stimme jedoch aus vielen anderen Gründen dem Vorschlag des Vorgängers von DD-WRT zu!)

  1. Melden Sie sich bei der Weboberfläche des Routers an
  2. Klicken Sie oben auf die Registerkarte Erweitert
  3. Klicken Sie links auf die Registerkarte Firewall-Einstellungen
  4. Aktivieren Sie das Optionsfeld Endpoint Independent unter TCP Endpoint Filtering (siehe Abbildung unten) (oder rufen Sie den Router-Emulator auf der Website von D-Link auf).
  5. Änderungen speichern; Sie sind fertig

Screenshot der D-Link-Router-Weboberfläche

Dieser Screenshot stammt aus dem Rev. C-Modell. deine kann etwas anders sein.

David
quelle
2

Kürzlich beantwortete eine ähnliche Frage: Cisco Static NAT funktioniert nicht auf LAN-Seite und hat gerade festgestellt, dass dies eine Canonical Question ist. Lassen Sie mich die Lösung hier zusammenfassen.

Zuallererst: Vergessen Sie NAT (wenn Sie können) - es geht überhaupt nicht um die Konfiguration von NAT. Es geht darum, über das Internet und das LAN auf einen Server zuzugreifen, der sich hinter NAT befindet. Der Einsatz von zwei DNS-Zonen ist eine praktikable Alternative, aber nicht immer die Lösung. Aber die Lösung existiert und ist unglaublich einfach (obwohl wahrscheinlich nicht perfekt):

(1) Auf dem Server: Fügen Sie die öffentliche IP-Adresse als sekundäre IP-Adresse in die Netzwerkschnittstelle des Servers mit der Maske 255.255.255.255 ein (der Webdienst oder was auch immer Sie auf dem Server möchten, sollte auch diese IP-Adresse überwachen). Dies ist in allen modernen Betriebssystemen möglich (oder es kann eine Loopback-Schnittstelle mit der zugewiesenen öffentlichen IP-Adresse verwendet werden, anstatt der primären Schnittstelle eine sekundäre IP-Adresse hinzuzufügen).

(2) Auf den LAN-Hosts: Fügen Sie eine Hostroute für die öffentliche IP-Adresse hinzu. Verwenden Sie beispielsweise für Windows-Hosts den folgenden Befehl: route -p add 203.0.113.130 mask 255.255.255.255 192.168.1.11 (Sie können auch DHCP verwenden.) statische Route "Option zum Verteilen der Route). Wenn sich zwischen den Clients und dem mit dem Internet verbundenen Router ein oder mehrere L3-Switches / Router befinden, konfigurieren Sie diese Hostroute auf diesen Zwischen-Switches / Routern, nicht auf die Kunden.

Für diejenigen, die mit dem TCP-Drei-Wege-Handshake zu tun haben: In der vorgeschlagenen Konfiguration funktioniert dies in Ordnung.

Bitte geben Sie Feedback (mindestens, Abstimmung).

Sergio
quelle
Anforderung Nr. 2 bewirkt, dass dies in BYOD-Netzwerken nicht gut funktioniert ...
Michael,
1

Ich beantworte meine Fragen nur, um den Horizont für Menschen mit ähnlichen Problemen zu erweitern.

Ich werde von meinem ISP kontaktiert und gebeten, meine Probleme zu lösen. Was sie mir angeboten hatten, ist eine andere öffentliche IP-Adresse nur für Server. Jetzt habe ich lokalen Datenverkehr auf der WAN-Seite von FreeBSD und wir haben spezielle Pipes für einen schnelleren Durchsatz nach lokalem Datenverkehr zur öffentlichen IP des Servers erstellt

Adopilot
quelle
2
Diese Lösung implementiert ein Perimeter-Netzwerk oder eine DMZ und ist eine gute Alternative zu Hairpin NAT und Split-Horizon DNS.
Chris S
1

Aus technischer Sicht besteht die beste Lösung für dieses Problem darin, IPv6 in Ihrem Netzwerk zu aktivieren. Wenn IPv6 aktiviert ist, müssen Sie einen AAAA-Eintrag für Ihre Domain erstellen. Behalten Sie den vorhandenen A-Eintrag bei, der auf das externe IPv4 des Routers verweist . Erstellen Sie einen AAAA-Eintrag, der auf die IPv6-Adresse des Servers verweist .

IPv6 verfügt über genügend Adressen, um NAT zu vermeiden, sodass Sie für IPv6 kein Haarnadel-NAT benötigen. Sobald Sie IPv6 aktiviert und AAAA-Datensätze erstellt haben, versucht jeder Client, der RFC 8305 unterstützt , IPv6 vor IPv4. Dies bedeutet, dass Sie auch für IPv4 kein Haarnadel-NAT benötigen, da die Clients es nicht verwenden.

Sie benötigen weiterhin Ihr vorhandenes IPv4-NAT für ausgehende Verbindungen und die Portweiterleitung für eingehende Verbindungen, bis der Großteil der Welt auch IPv6 aktiviert hat.

Es ist auch schneller.

Wenn Sie IPv6 verwenden, erhalten Sie eine bessere Leistung als mit Haarnadel-NAT.

Mit Haarnadel-NAT sendet Ihr Client ein Paket über einen Switch an den Router. Anschließend führt der Router zwei Übersetzungsrunden durch und sendet das Paket schließlich über den Switch an den Server. Pakete vom Server zum Client durchlaufen den gesamten Pfad in umgekehrter Reihenfolge.

Mit IPv6 vermeiden Sie NAT, stattdessen werden Pakete direkt über den Switch zwischen Client und Server gesendet. Dies bedeutet, dass Sie bei einer Rundreise die Anzahl der Durchgänge durch den Switch von 4 auf 2 reduzieren und 2 Durchgänge durch den Router und die 4 vom Router durchgeführten Übersetzungen vermeiden. Dies führt zu einer besseren Leistung.

Dies gilt auch, wenn Sie einen Switch verwenden, der in der gleichen Box wie der Router eingebaut ist.

Was ist, wenn der ISP kein IPv6 hat?

Wenn Sie einen ISP verwenden, der IPv6 nicht unterstützt, werde ich Sie fragen, ob Sie Server in diesem Netzwerk hosten sollten. Dies sind meine Vorschläge, was zu tun ist, wenn der ISP derzeit IPv6 nicht unterstützt.

Teilen Sie dem ISP zunächst mit, dass Sie IPv6 benötigen . Und erinnern Sie sie vielleicht daran, dass es das IPv6-Protokoll seit 20 Jahren gibt. Wenn dies für den ISP nicht ausreicht, um Sie ernst zu nehmen, suchen Sie nach anderen ISPs.

Wenn Sie einen Internetdienstanbieter mit IPv6-Unterstützung finden, können Sie mit beiden Internetdienstanbietern für eine Übergangszeit zusammenarbeiten. Auf dem mit dem neuen ISP verbundenen Router können Sie IPv4 auf der LAN-Seite deaktivieren und dann die LAN-Seiten beider Router mit demselben Switch verbinden. IPv4 und IPv6 sind zwei unabhängige Protokolle und daher ist es überhaupt kein Problem, wenn diese Verbindungen über verschiedene Router laufen. Als Nebeneffekt erhalten Sie eine gewisse Redundanz, wenn eine der Verbindungen ausfällt.

Wenn Sie keinen ISP mit IPv6-Unterstützung finden, sollten Sie in Betracht ziehen, Ihren Server auf eine Hosting-Einrichtung zu verschieben. Mit einem Server in einer Hosting-Einrichtung sind Sie weniger abhängig von einem geografischen Standort. Aus diesem Grund gibt es mehr Wettbewerb zwischen Anbietern, um sicherzustellen, dass es einen gibt, der Ihre Anforderungen erfüllt.

Wenn Sie den Server auf eine Hosting-Einrichtung verschieben, erhalten Ihre Clients kein IPv6. Wenn Sie den Server jedoch verschieben, benötigen Sie kein Haarnadel-NAT mehr, um ihn zu erreichen.

Was du nicht tun solltest

Aktivieren Sie IPv6 nicht und erstellen Sie AAAA-Einträge, wenn Sie keine Möglichkeit haben, den IPv6-Verkehr weiterzuleiten. Wenn Ihr ISP IPv6 nicht unterstützt, Sie jedoch IPv6 in Ihrem LAN aktivieren (möglicherweise mithilfe von RFC 4193-Adressen) und AAAA-Einträge erstellen, funktioniert dies für Clients in Ihrem LAN, die den Server in Ihrem LAN erreichen. Die Kommunikation zwischen Ihrem LAN und der Außenwelt würde jedoch zuerst IPv6 versuchen (was nicht funktionieren würde), und Sie würden sich darauf verlassen, auf IPv4 zurückzugreifen, das im besten Fall etwas langsamer ist oder im schlimmsten Fall nicht funktioniert.

Kasperd
quelle
0

Da ich auch diese Frage gestellt habe (siehe Wie greife ich auf einen Netzwerkdienst zu, der hinter einer Firewall von innen mit seiner externen IP-Adresse NATed ist? ) Und hier umgeleitet wurde, lieferte die Antwort hier (im Gegensatz zu allgemeinen Erklärungen ) keine Lösung Biete hier meine Linux ( spezifische) Lösung an, um allen ein paar Stunden Experimentieren zu ersparen. Diese Datei hat ein Format und kann direkt in iptables eingelesen werden (nach dem Bearbeiten der IP-Adressen natürlich). Dies gilt für einen Webserver (Port 80) und nur für IPv4 - die Regeln für IPv6 und für SSL (Port 443) sind analog.iptablesiptables-restore


# Port forwarding for VM / Container access with „hairpin NAT“.
*nat
:PREROUTING ACCEPT [3:205]
:INPUT ACCEPT [59:670]
:OUTPUT ACCEPT [16:172]
:POSTROUTING ACCEPT [20:257]

# This was simple port forwarding - access works from outside but not from inside
#-A PREROUTING  -4 -p tcp -i eth0 --dport 80 -j DNAT --to web.local:80

# This is real hairpin NAT which allows „web.local“ to access itself via the VM hosts external IP.
# First we need to masquerade any traffic going out the external interface:
-A POSTROUTING -o eth0 -j MASQUERADE

# Then we need to reroute incoming traffic on the public IP to the local IP:
-A PREROUTING  -4 -p tcp -d web.public.com --dport  80 -j DNAT --to web.local:80

# And finally we need to tell the router that the source IP of any traffic
# coming from the LAN must be source-rewritten when going to the web server:
-A POSTROUTING -4 -p tcp -s lan.local/24 -d web.local --dport  80 -j SNAT --to-source web.public.com:80

COMMIT

Ersetzen lan.local, web.localund web.public.commit Ihrem lokalen Netzwerk (z. B. 10.0.x.0 / 24), der Webserver die lokale IP (zB 10.0.1.2), und der Router die öffentliche IP (zB. 4.5.6.7). Dies -4dient nur dazu, IPv6- und IPv4-Regeln in derselben Datei zuzulassen (solche Zeilen werden von ignoriert ip6tables). Denken Sie auch daran, IPv6-Adressen in [Klammern] einzutragen, wenn sie Portdeklarationen enthalten, z [fe0a:bd52::2]:80.

Das waren alles Dinge, die mich veranlassten, mir die Haare auszureißen, als ich versuchte, die Erklärungen in dieser Frage tatsächlich umzusetzen . Ich hoffe, ich habe nichts ausgelassen.

Jens
quelle
MASQUERADE auf der WAN-Oberfläche ist im Allgemeinen nützlich, hat aber nichts mit der Frage "Haarnadel-NAT" zu tun. In der kanonischen Antwort wird MASQUERADE auf der LAN-Schnittstelle vorgeschlagen, und Sie schlagen stattdessen ein SNAT vor ( SNAT entspricht in etwa MASQUERADE ). Sie erzwingen etwas seltsame Quell-IP: Port-Override.
Kubanczyk
0

Ich werde hier eine Antwort hinzufügen, da die Kommentare hier nicht mein spezielles Problem angesprochen haben. Ich vermute, das liegt daran, dass ich einen bösen Linux-Kernel-Bug habe. Das Setup ist:

internet <--> modem 1.1.1.1/30 <--> switch <---> LAN 10.1.1.0/24
                                      ^
        +----------------------+      |
        |              /--eth0 o <----/
        |              |       |           
        | 10.1.1.1/24 br0      |           v (antenna)
        |  1.1.1.2/30  |       |           |
        |              \-wlan0 o ----------/
        +----------------------+ 

Trotz des komplex aussehenden Bildes ist die einzige relevante Änderung der in anderen Kommentaren behandelten Situationen die Hinzufügung der Software-Brücke br0. Es ist da, weil die Gateway-Box auch ein drahtloser Zugangspunkt für das LAN ist.

Unsere Gateway-Box führt weiterhin NAT-Aufgaben für die Computer im LAN aus. Da es nur 1 Ethernet-Port hat, ist es gezwungen, Haarnadel-NAT durchzuführen. Ich vermute, es sollte nur mit den iptables-Regeln funktionieren, die in anderen Kommentaren hier angegeben sind, aber auf dem Linux-Kernel 4.9 zumindest nicht. Unter 4.9 können unsere Computer im LAN, die versuchen, über NAT darauf zuzugreifen, nicht auf das Internet zugreifen.

tcpdumpZeigt Antworten auf eingehende Pakete an, die eth0 treffen, aber nicht aus br0 herauskommen. Das Ausführen dieses Befehls behebt Folgendes:

ebtables -t brouter -A BROUTING -d 01:00:00:00:00:00/01:00:00:00:00:00 -j ACCEPT
ebtables -t brouter -A BROUTING -p IPv4 --ip-dst 10.1.1.0/24 -j ACCEPT
ebtables -t brouter -A BROUTING -p IPv4 --ip-src 10.1.1.0/24 -j ACCEPT
ebtables -t brouter -A BROUTING -p IPv4 -j DROP

Bevor dieser Befehl ausgeführt wird, werden eingehende Pakete gemäß dem Standardverhalten des Kernels verarbeitet. Dabei werden sie an die Bridge übergeben und dann an den Routing-Modulen des Kernels weitergeleitet. Der Befehl zwingt Pakete, die nicht aus dem LAN stammen, die Bridge zu umgehen und direkt zum Routing zu gelangen. Dies bedeutet, dass die Bridge keine Chance hat, sie zu verwerfen. Broadcast- und Multicast-Adressen müssen überbrückt werden, sonst funktionieren Dinge wie DHCP und mDNS nicht. Wenn Sie IPv6 verwenden, müssen Sie auch Regeln dafür hinzufügen.

Sie könnten versucht sein, das Problem folgendermaßen zu beheben:

brctl hairpin br0 eth0 on
brctl hairpin br0 wlan0 on

Ich war auf jeden Fall so versucht - es war mein erster Versuch. Sobald ich es geschafft habe, haben Maschinen im LAN Zugang zum Internet, so dass es für eine Weile funktioniert. Dann geschah Folgendes (und ich wollte das Experiment nicht wiederholen):

  1. Die Ping-Zeiten über das LAN zum Gateway haben sich in Intervallen von etwa 10 Sekunden verdoppelt und sind von 0,1 ms auf 0,2 ms, 0,4 ms, 0,8 ms, 2 ms usw. gestiegen, bis die Gateway-Box über das LAN nicht mehr erreichbar war. Es roch nach einem Paketsturm, aber STP war überall eingeschaltet.
  2. Nicht lange nachdem alle drahtlosen Zugangspunkte gestorben waren.
  3. Bei dem Versuch zu diagnostizieren, was mit dem Funknetzwerk passiert ist, wurden alle IP-Telefone neu gestartet.
  4. Nicht lange danach verloren verkabelte Maschinen den gesamten Kontakt zum LAN.

Der einzige Ausweg bestand darin, jede Maschine im Gebäude neu zu starten. Die einzige Ausnahme waren die Hardware-Switches, die nicht neu gestartet werden konnten. Sie mussten aus- und wieder eingeschaltet werden.

Russell Stuart
quelle
0

Wie es eine kanonische Frage ist. Ich werde antworten, wenn Sie einen Sonicwall-Router haben.

Der zu erkennende Ausdruck ist NAT-Loopback-Richtlinie

In diesem Dokument wird beschrieben, wie ein Host in einem SonicWall-LAN unter Verwendung der öffentlichen IP-Adresse des Servers für den FQDN auf einen Server im SonicWall-LAN zugreifen kann. Stellen Sie sich ein NSA 4500-Netzwerk (SonicOS Enhanced) vor, in dem das primäre LAN-Subnetz 10.100.0.0 / 24 und die primäre WAN-IP 3.3.2.1 lautet. Angenommen, Sie haben eine Website für Ihre Kunden und der Hostname lautet. Sie haben bereits die erforderlichen Richtlinien und Regeln geschrieben, damit Außenstehende auf die Website zugreifen können, diese wird jedoch auf einem privaten Server 10.100.0.2 ausgeführt. Stellen Sie sich nun vor, Sie verwenden privat einen Laptop mit einer IP-Adresse von 10.100.0.200. Sie möchten den Server über seinen öffentlichen Namen erreichen, da Sie dasselbe tun, wenn Ihr Laptop mit Ihnen unterwegs ist. Wenn Sie auf der privaten Seite sitzen und http://www.example.com anfordern>, Loopback macht es möglich, dass dies funktioniert, obwohl der Server tatsächlich auf einer lokalen IP-Adresse direkt neben Ihnen ist.

Um diese Funktionalität zu ermöglichen, müssten Sie eine NAT-Loopback-Richtlinie erstellen, die auch als NAT-Reflection oder Haarnadel bezeichnet wird.

Loopback-Richtlinie unter Verwendung der IP-Adresse der WAN-Schnittstelle

Login to the SonicWall Management GUI.
Navigate to Manage | Rules | NAT Policies submenu.
Click on the Add button.
Create the following NAT Policy.
Original Source: LAN Subnets (or Firewalled Subnets if you want hosts in other zones to be included)
Translated Source: WAN Interface IP
Original Destination: WAN Interface IP
Translated Destination: (LAN server object)
Original Service: Any
Translated Service: Original
Inbound Interface: Any
Outbound Interface: Any

Die Sonicwall erkennt den externen Dienst, den Sie kontaktieren möchten, und schreibt die Zieladresse so, dass sie der internen Adresse des Servers entspricht, sodass sie für den Computer transparent ist.

yagmoth555
quelle
-2

In FreeBSD mit PF ist es so einfach (in Ihrer pf.conf-Datei):

extif = "tun0"
intif = "em0"
{other rules}...
nat on $intif from any to 192.168.20.8 port 80 -> ($extif)

192.168.20.8 wäre der interne Webserver.

Otto
quelle