Beobachtung zu nftables, Unterschied snat / masquerade

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Theophil T.
Beiträge: 402
Registriert: 22.10.2006 20:24:59
Lizenz eigener Beiträge: MIT Lizenz

Beobachtung zu nftables, Unterschied snat / masquerade

Beitrag von Theophil T. » 18.04.2023 11:02:20

Hallo,

bei der Einrichtung eines Routers hatte ich zunächst Probleme mit der Paket-Weiterleitung. Ich habe dann bemerkt, dass die IP-Pakete offenbar verschieden modifiziert werden, je nachdem ob man das NAT in der Form "snat" oder mit "masquerade" macht. Bisher dachte, ich "masquerade" sei nur eine andere Schreibweise für "snat <Absender-Netzwerk> to <ip output interface>:

https://wiki.nftables.org/wiki-nftables ... tion_(NAT)
"Masquerade is a special case of SNAT, where the source address is automagically set to the address of the
output interface."


Mein Test-Netzwerk:

Client1 -- LAN "NV" 192.168.169.0/24 -- Router -- LAN "INT" 192.168.44.0/24 mit Client2 -- Fritzbox 7590 -- Internet

Client1:
Debian Bookworm
192.168.169.103

Router:
Debian Bullseye
IP "NV" enp5s0 192.168.169.1
IP "INT" enp2s0 192.168.44.3

Client2:
Debian Bullseye
192.168.44.10


Bei folgender nftables-Regel auf dem Router

Code: Alles auswählen

nft add rule inet t-nat1 ch-nat1 ip saddr 192.168.169.0/24 oifname enp2s0 snat to 192.168.44.3
werden ICMP-Pakete von Client1 zwar vom Router weitergeleitet, aber von Client2 192.168.44.10 nicht beantwortet:

Code: Alles auswählen

# Auf dem Router: 
tcpdump -qnn -i any host 192.168.44.10
15:06:43.184771 enp5s0 In  IP 192.168.169.103 > 192.168.44.10: ICMP echo request, id 55445, seq 1, length 64
15:06:43.184825 enp2s0 Out IP 193.168.44.3 > 192.168.44.10: ICMP echo request, id 55445, seq 1, length 64
15:06:44.194424 enp5s0 In  IP 192.168.169.103 > 192.168.44.10: ICMP echo request, id 55445, seq 2, length 64
15:06:44.194437 enp2s0 Out IP 193.168.44.3 > 192.168.44.10: ICMP echo request, id 55445, seq 2, length 64


Ohne NAT (mit Eintrag einer Route auf 192.168.44.10 für die Route zurück) oder auf dem Router mit

Code: Alles auswählen

nft add rule inet t-nat1 ch-nat1 ip saddr 192.168.169.0/24 oifname enp2s0 masquerade
werden nun die Pakete vom Zielsystem beantwortet:

Code: Alles auswählen

# Auf dem Router:
tcpdump -qnn -i any host 192.168.44.10
# hier Test ohne SNAT, mit dem "masquerade" Befehl das entsprechende
15:05:13.424454 enp5s0 In  IP 192.168.169.103 > 192.168.44.10: ICMP echo request, id 53698, seq 1, length 64
15:05:13.424476 enp2s0 Out IP 192.168.169.103 > 192.168.44.10: ICMP echo request, id 53698, seq 1, length 64
15:05:13.424668 enp2s0 In  IP 192.168.44.10 > 192.168.169.103: ICMP echo reply, id 53698, seq 1, length 64
15:05:13.424684 enp5s0 Out IP 192.168.44.10 > 192.168.169.103: ICMP echo reply, id 53698, seq 1, length 64

Das ganze habe ich auf 2 verschiedenen Hardware-Systemen und auch mit Debian Bookworm als Router getestet, gleiche Ergebnisse, auch wenn die Fritzbox das Ziel ist oder Pakete ins Internet weitergeleitet werden sollen, kommt mit dem "snat" Befehl keine Verbindung zustande.

Mich würde interessieren, ob die unterschiedliche Funktionsweise einen Sinn hat und was die Ursache ist. Wenn das einer der Netzwerk-Spezialisten sagen könnte, würde ich mich freuen.

Viele Grüße
Theophil

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: Beobachtung zu nftables, Unterschied snat / masquerade

Beitrag von mat6937 » 18.04.2023 11:15:08

Theophil T. hat geschrieben: ↑ zum Beitrag ↑
18.04.2023 11:02:20
Mich würde interessieren, ob die unterschiedliche Funktionsweise einen Sinn hat und was die Ursache ist.
Ich bin kein Netzwerkspezialist, aber Sinn macht der Unterschied zwischen S-NAT und MASQUERADE schon. Denn MASQUERADE ist für Interfaces (NICs) mit dynamischen IP-Adressen, ... d. h. bestehende Verbindungen (mit der "alten" IP-Adresse) bleiben in einem _nicht geschlossenem_ Zustand. Und mit MASQUERADE werden diese ("offene") Verbindungen ignoriert/"vergessen".

EDIT:

BTW: Wenn man z. B.: "IPMasquerade=yes (oder gleichwertig)" in einer *.network-Datei (systemd) benutzt, werden keine nftables-Regeln, sondern (noch) iptables-legacy-Regeln für das masquerading, generiert. ;-)

Theophil T.
Beiträge: 402
Registriert: 22.10.2006 20:24:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Beobachtung zu nftables, Unterschied snat / masquerade

Beitrag von Theophil T. » 18.04.2023 12:48:55

Von dem Unterschied bzgl. dynamischer IP-Adressen habe ich gelesen, danke für die genauere Info.

Was ich aber noch nicht verstehe ist, wieso das Zielsystem einmal die ICMP-Requests beantwortet und im anderen Fall nicht. Im Router werden die Pakete ja mit beiden Befehlen weitergeleitet, die IP-Adressen sind zudem statisch.

Eine *.network-Datei habe ich nicht angelegt.

mat6937
Beiträge: 2953
Registriert: 09.12.2014 10:44:00

Re: Beobachtung zu nftables, Unterschied snat / masquerade

Beitrag von mat6937 » 18.04.2023 14:17:54

Theophil T. hat geschrieben: ↑ zum Beitrag ↑
18.04.2023 12:48:55
..., die IP-Adressen sind zudem statisch.

Eine *.network-Datei habe ich nicht angelegt.
*.network-Datei ist nicht erforderlich, ... das war nur so nebenbei erwähnt, weil man ja nftables benutzen sollte, aber die devs von systemd machen es auch (noch) nicht und benutzen iptables-legacy.

Um deine Frage zu beantworten, sind genauere Informationen (Quell-IP, Ziel-IP, gateway-IP, bessere tcpdump-Filter, iptables-Regeln für S-nat und masquerade) erforderlich.

Antworten