Diferența dintre SNAT și Masquerade (Unix, Iptables, Firewall)

Chankey Pathak a intrebat.
a intrebat.

Sunt confuz care este diferența reală dintre SNAT și Masquerade?

Dacă vreau să partajez conexiunea mea la internet în rețeaua locală, atunci ar trebui să selectez SNAT sau Masquerade?

3 răspunsuri
Shawn J. Goff

The SNAT țintă necesită să îi dați o adresă IP care să se aplice tuturor pachetelor de ieșire. Adresa MASQUERADE țintă vă permite să îi dați o interfață, iar orice adresă de pe acea interfață este adresa care se aplică tuturor pachetelor de ieșire. În plus, cu SNAT, urmărirea conexiunilor din kernel ține evidența tuturor conexiunilor atunci când interfața este oprită și repornită; nu același lucru este valabil și în cazul interfeței MASQUERADE țintă.

Printre documentele bune se numără HOWTOs de pe site-ul Netfilter și site-ul iptables pagina de manual.

Comentarii

  • Am probleme în a înțelege beneficiile SNAT. De ce contează dacă kernelul urmărește sau nu conexiunile atunci când interfața cade? În ceea ce privește MASQUERADE, se poate citi netfilter spune „Dar, mai important, dacă legătura se întrerupe, conexiunile (care acum sunt oricum pierdute) sunt uitate, ceea ce înseamnă mai puține probleme atunci când conexiunea revine cu o nouă adresă IP.” Sună rezonabil (deși care sunt glitch-urile?) Acum, uitându-ne la SNAT, care este beneficiul urmăririi conexiunilor pierdute? De ce să nu folosim de fiecare dată MASQUERADE? –  > Por Carl G.
  • @CarlG, presupun că defecțiunile ar apărea în cazul conexiunilor permanent urmărite -j SNAT (spre deosebire de urmărirea prin reciclare cu -j MASQUERADE) atunci când o nouă conexiune de ieșire dintr-un nod LAN utilizează același număr de port sursă ca și conexiunea de ieșire întreruptă din același nod LAN. În acest caz, îmi pot imagina că pachetele primite de la vechea conexiune de ieșire sunt trimise către nod, confundând stiva TCP a acestuia. În ceea ce privește beneficiul lui -j SNAT, ce se întâmplă dacă caseta NAT este configurată cu aceeași adresă IP externă și dacă kernelul continuă să redirecționeze pachetele de la conexiunile vechi în loc să răspundă cu RST? –  > Por eel ghEEz.
  • SNAT este util, dacă, de exemplu, aveți mai multe adrese IP atribuite interfeței de ieșire și doriți ca sursa NAT să fie o anumită adresă dintre acestea. –  > Por pgoetz.
Terry Wang

SNAT și MASQUERADE fac aceeași chestie de NAT sursă în nat în tabelul din cadrul fișierului POSTROUTING lanț.

Diferențe

  • MASQUERADE face NU necesită --to-source deoarece a fost creat pentru a funcționa cu IP-uri atribuite dinamic

  • SNAT funcționează NUMAI cu IP-uri statice, de aceea necesită --to-source

  • MASQUERADE implică un efort suplimentar și este mai lent decât SNAT deoarece de fiecare dată când MASQUERADE ținta este lovită de un pachet, trebuie să verifice adresa IP pe care trebuie să o folosească.

NOTĂ: Un caz tipic de utilizare pentru MASQUERADE: Instanța AWS EC2 într-un VPC, aceasta are un IP privat în cadrul CIDR VPC (de ex. 10.10.1.0/24) – 10.10.1.100 de exemplu, are asociat și un IP public pentru a comunica cu Internetul (presupunem că se află într-o subrețea publică) prin care IP-ul privat face NAT 1:1 (AWS Network Infrastructure magic). IP-ul public se poate schimba după cicluri de alimentare a instanței – oprirea, apoi pornirea (dacă NU este un EIP), MASQUERADE este o opțiune mai bună în acest caz de utilizare.

Important: este în continuare posibil să utilizați MASQUERADE țintă cu IP static, doar fiți conștienți de costurile suplimentare.

Referințe

Reîntoarcere

Răspuns scurt: folosiți SNAT

Explicație: Tocmai am încercat să înlătur regula de masquerade de pe routerul meu raspbian (care vorbește cu un alt router, prin eth0 unde adresa IP a interfețelor este 192.168.8.2 și este statică) și partajarea internetului a continuat să funcționeze. Comenzile pe care le-am încercat au fost următoarele: –

iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.8.2