Hallo Gruppe,
Ich habe in einem Skript mehrere IPv4 Portweiterleitungen einzurichten und dachte ein SET zu nehmen wäre "state of the art".
nft add table ip TABLE_NAT nft create chain ip TABLE_NAT PREROUTING { type nat hook prerouting priority dstnat; } nft add set ip TABLE_NAT DMZ_SET { type inet_service . ipv4_addr . inet_service } nft add element ip TABLE_NAT DMZ_SET { 443 . 192.168.1.1 . 443, 80 . 192.168.100.2 . 80 }
Obiges bereitet alles soweit vor (Gedächtnisprotokoll). Nun soll es zur Regel kommen, die das Set nutzt:
nft add rule ip TABLE_NAT PREROUTING ip daddr 2.3.4.5 tcp dport . dnat to . : . @DMZ_SET -> syntax error, unexpected dnat
nft add rule ip TABLE_NAT PREROUTING ip daddr 2.3.4.5 tcp dport 23 dnat to 192.168.1.3 : 23 Funktioniert hingegen. Also sollte die nft-Syntax doch ok sein.
Irgendwas läuft doch mit der Nutzung des Set schief? Ist allerdings nicht mein erstes und ich sehe nicht was ich bei anderen Sets anders mache, außer, dass diese einspaltig sind.
Kann mich bitte jemand auf den richtigen Pfad bringen?
Mit freundlichen Grüßen / Kind regards Ronny Seffner
Hier habe ich eine Lösung gefunden. Das sieht aus wie eine Map kombiniert mit einem Set, läuft aber als Map. https://wiki.nftables.org/wiki-nftables/index.php/Multiple_NATs_using_nftabl es_maps#Multiple_NAT_mapping_with_address_and_port
Nur kann ich die Regel (aus obigem Beispiel) nun nicht mehr recht lesen.
% nft add map nat foo { type inet_service : ipv4_addr . inet_service ; } % nft add element nat foo { \ 1100 : 192.168.1.2 . 5061, \ 1101 : 192.168.1.3 . 5061, \ 1400 : 192.168.1.4 . 5061 \ } % nft add rule nat pre ip protocol udp dnat ip addr . port to udp dport map @foo
Funktion ist hier, dass Pakete an die eigenen Ports 1100, 1101 usw. auf Hosts mit den Adressen 192.168.1.x und andere Ports dort umgeschrieben werden (DNAT). Jetzt zerlegen wir mal die Regel: "nft add rule nat pre ..." - füge eine Regel in die Tabelle nat und Chain pre hinzu "...ip protocol udp..." - matcht für Pakete vom Typ UDPv4 ... Und jetzt meine Unklarheiten "...dport map @foo" - ... an den EIGENEN Port "dport", der in der Map "foo" zu suchen ist? "...dnat ip addr . port to udp..." - und mache DNAT auf das "ip addr . port"-Paar aus der entsprechenden Zeile in der Map; das "to udp" am Ende irritiert an dieser Position
Mit freundlichen Grüßen / Kind regards Ronny Seffner
Am Montag, 1. November 2021, 17:35:21 CET schrieb ronny@seffner.de:
Hier habe ich eine Lösung gefunden. Das sieht aus wie eine Map kombiniert mit einem Set, läuft aber als Map. https://wiki.nftables.org/wiki-nftables/index.php/Multiple_NATs_using_nftabl es_maps#Multiple_NAT_mapping_with_address_and_port
Nur kann ich die Regel (aus obigem Beispiel) nun nicht mehr recht lesen.
% nft add map nat foo { type inet_service : ipv4_addr . inet_service ; } % nft add element nat foo { \ 1100 : 192.168.1.2 . 5061, \ 1101 : 192.168.1.3 . 5061, \ 1400 : 192.168.1.4 . 5061 \ } % nft add rule nat pre ip protocol udp dnat ip addr . port to udp dport map @foo
Funktion ist hier, dass Pakete an die eigenen Ports 1100, 1101 usw. auf Hosts mit den Adressen 192.168.1.x und andere Ports dort umgeschrieben werden (DNAT). Jetzt zerlegen wir mal die Regel: "nft add rule nat pre ..." - füge eine Regel in die Tabelle nat und Chain pre hinzu "...ip protocol udp..." - matcht für Pakete vom Typ UDPv4 ... Und jetzt meine Unklarheiten "...dport map @foo" - ... an den EIGENEN Port "dport", der in der Map "foo" zu suchen ist? "...dnat ip addr . port to udp..." - und mache DNAT auf das "ip addr . port"-Paar aus der entsprechenden Zeile in der Map; das "to udp" am Ende irritiert an dieser Position
Mit freundlichen Grüßen / Kind regards Ronny Seffner
Danke, dass Du uns die Lösung mitteilst. Ich war schon sehr neugierig ...
Bernhard
lug-dd@mailman.schlittermann.de