Unterschied zwischen SNAT und Masquerade

38

Ich bin verwirrt, was der eigentliche Unterschied zwischen SNAT und Masquerade ist.

Wenn ich meine Internetverbindung im lokalen Netzwerk freigeben möchte, sollte ich dann SNAT oder Masquerade auswählen?

Chankey Pathak
quelle

Antworten:

41

Für das SNATZiel muss eine IP-Adresse angegeben werden, die für alle ausgehenden Pakete gilt. Mit dem MASQUERADEZiel können Sie ihm eine Schnittstelle zuweisen, und jede Adresse auf dieser Schnittstelle ist die Adresse, die auf alle ausgehenden Pakete angewendet wird. Außerdem werden mit SNATdem Connection Tracking des Kernels alle Verbindungen nachverfolgt, wenn die Schnittstelle heruntergefahren und wieder hochgefahren wird. Gleiches gilt nicht für das MASQUERADEZiel.

Gute Dokumente umfassen die HOWTOs auf der Netfilter-Site und die iptablesManpage .

Shawn J. Goff
quelle
2
Ich habe Probleme, den Nutzen von SNAT zu verstehen. Warum ist es wichtig, ob der Kernel Verbindungen verfolgt oder nicht, wenn die Schnittstelle ausfällt? In Bezug auf MASQUERADE heißt es in den Netfilter-Dokumenten: "Aber was noch wichtiger ist: Wenn die Verbindung ausfällt, werden die Verbindungen (die jetzt sowieso verloren gehen) vergessen, was bedeutet, dass weniger Störungen auftreten, wenn die Verbindung mit einer neuen IP-Adresse wiederhergestellt wird." Klingt vernünftig (obwohl, was sind die Pannen?) Wenn Sie sich nun SNAT ansehen, welchen Vorteil hat es, verlorene Verbindungen zu verfolgen? Warum nicht jedes Mal MASQUERADE verwenden?
Carl G
1
@CarlG, ich denke, die Störungen würden bei der permanenten Verfolgung auftreten -j SNAT(im Gegensatz zur Verfolgung des Recyclings mit -j MASQUERADE), wenn eine neue ausgehende Verbindung von einem LAN-Knoten dieselbe Quellportnummer verwendet wie die getrennte ausgehende Verbindung von demselben LAN-Knoten. In diesem Fall kann ich mir vorstellen, dass eingehende Pakete von der alten ausgehenden Verbindung an den Knoten gesendet werden und dessen TCP-Stapel verwirren. Was ist mit -j SNAT, wenn die NAT-Box mit derselben externen IP-Adresse konfiguriert ist und der Kernel weiterhin Pakete von alten Verbindungen weiterleitet, anstatt mit RST zu antworten?
Aal Ghez
SNAT ist nützlich, wenn Sie beispielsweise der ausgehenden Schnittstelle mehrere IP-Adressen zugewiesen haben und möchten, dass die NAT-Quelle eine bestimmte davon ist.
Pgoetz
19

Grundsätzlich SNATund MASQUERADEmachen Sie dasselbe wie in der NAT-Tabelle innerhalb der POSTROUTING-Kette.

Unterschiede

  • MASQUERADEerfordert nicht, --to-sourcewie es gemacht wurde, um mit dynamisch zugewiesenen IPs zu arbeiten

  • SNAT funktioniert nur mit statischen IPs, deshalb hat es --to-source

  • MASQUERADEEs hat zusätzlichen Overhead und ist langsamer als SNATjedes Mal, MASQUERADEwenn ein Ziel von einem Paket getroffen wird, muss es nach der zu verwendenden IP-Adresse suchen.

HINWEIS : Ein typischer Anwendungsfall für MASQUERADE: Eine AWS EC2-Instanz in einer VPC verfügt über eine private IP innerhalb der VPC-CIDR (z. B. 10.10.1.0/24) - 10.10.1.100. Außerdem verfügt sie über eine öffentliche IP, um mit dieser zu kommunizieren das Internet (vorausgesetzt es befindet sich in einem öffentlichen Subnetz) über welches die private IP 1: 1 NAT. Die öffentliche IP-Adresse kann sich nach dem Neustart der Instanz ändern (wenn es sich NICHT um eine EIP handelt). MASQUERADEDies ist in diesem Anwendungsfall die bessere Option.

Wichtig: Es ist weiterhin möglich, das MASQUERADEZiel mit statischer IP zu verwenden. Beachten Sie jedoch den zusätzlichen Aufwand.

Verweise

Terry Wang
quelle