From 9599d9d25a6b383b72b119c709af33f6f6031786 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 24 Apr 2020 21:56:46 +0200 Subject: src: NAT support for intervals in maps This patch allows you to specify an interval of IP address in maps. table ip x { chain y { type nat hook postrouting priority srcnat; policy accept; snat ip interval to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } } } The example above performs SNAT to packets that comes from 10.141.11.4 to an interval of IP addresses from 192.168.2.2 to 192.168.2.4 (both included). You can also combine this with dynamic maps: table ip x { map y { type ipv4_addr : interval ipv4_addr flags interval elements = { 10.141.10.0/24 : 192.168.2.2-192.168.2.4 } } chain y { type nat hook postrouting priority srcnat; policy accept; snat ip interval to ip saddr map @y } } Signed-off-by: Pablo Neira Ayuso --- include/statement.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'include/statement.h') diff --git a/include/statement.h b/include/statement.h index 8fb459ca..8427f47e 100644 --- a/include/statement.h +++ b/include/statement.h @@ -119,6 +119,10 @@ enum nft_nat_etypes { extern const char *nat_etype2str(enum nft_nat_etypes type); +enum { + STMT_NAT_F_INTERVAL = (1 << 0), +}; + struct nat_stmt { enum nft_nat_etypes type; struct expr *addr; @@ -126,6 +130,7 @@ struct nat_stmt { uint32_t flags; uint8_t family; bool ipportmap; + uint32_t type_flags; }; extern struct stmt *nat_stmt_alloc(const struct location *loc, -- cgit v1.2.3