extensions: libip6t_SNAT: Add translation to nft
PATCH 1/1 extensions: libip6t_SNAT: Add translation to nft
Add translation for SNAT target to nftables.
Examples:
$ sudo ip6tables-translate -t nat -A postrouting -o eth0 -p tcp -j SNAT --to [fec0::1234]:80 nft add rule ip6 nat postrouting oifname eth0 ip6 nexthdr tcp counter snat fec0::1234 :80
$ sudo ip6tables-translate -t nat -A postrouting -o eth0 -p tcp -j SNAT --to [fec0::1234]:1-20 nft add rule ip6 nat postrouting oifname eth0 ip6 nexthdr tcp counter snat fec0::1234 :1-20
$ sudo ip6tables-translate -t nat -A postrouting -o eth0 -p tcp -j SNAT --to [fec0::1234]:123 --random nft add rule ip6 nat postrouting oifname eth0 ip6 nexthdr tcp counter snat fec0::1234 :123 random
$ sudo ip6tables-translate -t nat -A postrouting -o eth0 -p tcp -j SNAT --to [fec0::1234]:123 --random-fully --persistent nft add rule ip6 nat postrouting oifname eth0 ip6 nexthdr tcp counter snat fec0::1234 :123 fully-random,persistent
Signed-off-by Shivani Bhardwaj <[email protected]>
--- extensions/libip6t_SNAT.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+)
extensions/libip6t_SNAT.c +50 -0
@@ -241,6 +241,55 @@ static void SNAT_save(const void *ip, const struct xt_entry_target *target)printf (" --persistent" ); } +static void print_range_xlate (const struct nf_nat_range *range, +struct xt_buf *buf) +{ +if (range->flags &NF_NAT_RANGE_MAP_IPS ) { +xt_buf_add (buf,"%s" , +xtables_ip6addr_to_numeric (&range->min_addr.in6)); + +if (memcmp (&range->min_addr, &range->max_addr, +sizeof (range->min_addr))) +xt_buf_add (buf,"-%s" , +xtables_ip6addr_to_numeric (&range->max_addr.in6)); + } +if (range->flags &NF_NAT_RANGE_PROTO_SPECIFIED ) { +xt_buf_add (buf," :%hu" ,ntohs (range->min_proto.tcp.port)); + +if (range->max_proto.tcp.port != range->min_proto.tcp.port) +xt_buf_add (buf,"-%hu" , +ntohs (range->max_proto.tcp.port)); + } +} + +static int SNAT_xlate (const struct xt_entry_target *target, +struct xt_buf *buf,int numeric) +{ +const struct nf_nat_range *range = (const void *)target->data; +bool sep_need = false; +const char *sep =" " ; + +xt_buf_add (buf,"snat " ); +print_range_xlate (range, buf); +if (range->flags &NF_NAT_RANGE_PROTO_RANDOM ) { +xt_buf_add (buf," random" ); + sep_need = true; + } +if (range->flags &NF_NAT_RANGE_PROTO_RANDOM_FULLY ) { +if (sep_need) + sep ="," ; +xt_buf_add (buf,"%sfully-random" , sep); + sep_need = true; + } +if (range->flags &NF_NAT_RANGE_PERSISTENT ) { +if (sep_need) + sep ="," ; +xt_buf_add (buf,"%spersistent" , sep); + } + +return 1 ; +} +static struct xtables_target snat_tg_reg = { .name ="SNAT" , .version =XTABLES_VERSION ,
@@ -254,6 +303,7 @@ static struct xtables_target snat_tg_reg = { .print = SNAT_print, .save = SNAT_save, .x6_options = SNAT_opts, + .xlate = SNAT_xlate, };void _init (void )
Signature · 1 line
1.9.1
Quoted 1 line · Shivani Bhardwaj
Add translation for SNAT target to nftables.
Applied, thanks.