Pentru ca DNAT-ul să funcționeze (în sensul că, pentru ca programul pornit să poată recunoaște răspunsurile), „reverse NAT” care schimbă portul sursă al traficurilor de răspuns din 192.168.30.1
(la 192.168.30.3:2001
) din 2003
la 2002
va trebui efectuată.
Totuşi, când sunt traficuri care vin din 192.168.30.1:2003
la 192.168.30.3:2001
că din punctul de vedere al conntrack nu sunt o consecință a DNAT-ului (deoarece conform intrării conntrack creată, gazda nu este cea care a inițiat conexiunea), NAT-ul invers va fi inadecvat.
Prin urmare, netfilter este „forțat” să efectueze și SNAT pentru traficurile care se potrivesc cu regula DNAT, astfel încât să poată diferenția traficurile de răspuns (adică și de 192.168.30.1:2003
) după destinație 192.168.30.3:$aleatoriu
.
Presupun ca netfilter fie va efectua NAT invers pentru DNAT (care este un SNAT) înainte de NAT invers pentru SNAT (care este un DNAT), fie va reuși să folosească destinația înainte de NAT invers pentru SNAT (adică. 192.168.30.3:$aleatoriu
) ca potrivire pentru NAT invers pentru DNAT, altfel SNAT forțat va fi inutil.(În cazul nereversării, totuși, niciuna dintre acestea nu este adevărată AFAIK: DNAT va fi efectuat în PREROUTING înainte de SNAT în INPUT, iar potrivirea destinației în regula SNAT, dacă există, va folosi valoarea rezultată în DNAT)
Chestia este că povestea de mai sus / „problema” din întrebarea ta nu are nici un sens în realitate. Luați ca exemplu un VPN wireguard cu două gazde: să presupunem că doriți să aveți Punct final=
setat pe ambele gazde (astfel încât oricare dintre ele să poată iniția comunicarea) și nu doriți ca valorile să fie „actualizate” în mod neașteptat din cauza SNAT-ului forțat (presupunând că ar putea fi declanșat), ceea ce ar trebui să faceți este pur și simplu un „întotdeauna -on" SNAT care "completează" DNAT / este echivalent cu NAT de rezervă:
iptables -t nat -A INPUT -s 192.168.30.1 -d 192.168.30.3 -p udp --sport 2003 --dport 2001 -j SNAT --to-source :2002
care în mod normal nu este necesar în modelul client-server din cauza NAT-ului invers automat pentru DNAT.
P.S. Încă nu ar trebui să ajungi 192.168.30.1:2003
de 192.168.30.1:2003
totuși, în caz contrar, NAT-ul sursă forțată va apărea și dacă îl ajungeți din nou până la 192.168.30.1:2002
înainte ca intrarea conntrack a fostului să fie abandonată. Nici regula SNAT suplimentară din INPUT nu ar trebui să vă provoace probleme suplimentare.