Aqui está um exemplo de conjunto de regras relevante com 2 exemplos nftables
de regras NAT que mascaram o IP da máquina virtual para a LAN:
#!/usr/sbin/nft -f
add table nat_4
# Sees all packets after routing, just before they leave the local system
add chain nat_4 postrouting_nat_4 {
type nat hook postrouting priority srcnat; policy accept;
comment "Postrouting SNAT IPv4 traffic"
}
# Masquerade all packets going from VMs to the LAN/Internet
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade to :1024-65535
# Same rule as above but without [to :PORT_SPEC]
add rule nat_4 postrouting_nat_4 meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade
O endereço IP de exemplo 192.168.122.0/24
é o endereço de rede no qual a máquina virtual opera.
Eu entendo o que masquerade
acontece, ele funciona SNAT
alterando o IP de origem para o IP da interface de saída.
Nesse sentido, entendo o que faz a segunda regra do exemplo acima.
O que não entendo é a declaração [to :PORT_SPEC] ( docs link ), no exemplo (1ª regra):masquerade to :1024-65535
O que exatamente faz masquerade to :1024-65535
e é necessário especificá-lo?
Essas duas regras são basicamente iguais ou em que são diferentes?
Qual é o preferido para fazer NAT da máquina virtual para a Internet em vez do switch virtual no host local?
Acho que as coisas ficam mais claras se você olhar a documentação do
MASQUERADE
destino iptables. Deiptables-extensions(8)
:A
to :PORT_SPEC
opção na regra NFT realiza a mesma coisa: especifica as portas de origem a serem usadas para conexões mascaradas.