It would be good to add load balancing capabilities.
A possible cli could be:
set nat destination rule <rule> load-balance mode <round-robin|random> set nat destination rule <rule> load-balance translation-address <address> probability <prob>/<total>
A complete example using random:
set nat destination rule 10 inbound interface eth0 set nat destination rule 10 protocol tcp set nat destination rule 10 destination port 80 set nat destination rule 10 destination address 192.168.0.165 set nat destination rule 10 load-balance mode random set nat destination rule 10 load-balance translation-address 10.0.0.101 probability 50/100 set nat destination rule 10 load-balance translation-address 10.0.0.102 probability 30/100 set nat destination rule 10 load-balance translation-address 10.0.0.103 probability 20/100 ## nft rule generated: sudo nft add rule ip vyos_nat PREROUTING ip daddr 192.168.0.165 tcp dport 80 counter dnat to numgen random mod 100 map { 0-49 : 10.0.0.101, 50-79 : 10.0.0.102 , 80-99 : 10.0.0.103 }
An example using round robin
set nat destination rule 10 inbound interface eth0 set nat destination rule 10 protocol tcp set nat destination rule 10 destination port 80 set nat destination rule 10 destination address 192.168.0.165 set nat destination rule 10 load-balance translation-address 10.0.0.7 probability 1/3 set nat destination rule 10 load-balance translation-address 10.0.0.2 probability 1/3 set nat destination rule 10 load-balance translation-address 10.0.0.5 probability 1/3 ## nft rule generated: sudo nft add rule ip vyos_nat PREROUTING ip daddr 192.168.0.165 tcp dport 80 counter dnat to numgen inc mod 3 map { 0 : 10.0.0.101, 1 : 10.0.0.102, 2 : 10.0.0.103 }
Reference: https://manpages.debian.org/testing/nftables/nft.8.en.html#NUMGEN_EXPRESSION