As seguintes regras de FP funcionam:
nat on vmnet8 from bridge100:network to any -> (vmnet8)
rdr pass on bridge100 inet proto tcp from any to any -> 172.16.122.128 port 8080
Isso encaminha todas as solicitações para 172.16.122.128, enquanto faz NAT entre elas.
O NAT é necessário para traduzir entre os endereços das duas redes, ou seja, 192.168.2.0/24 e 172.16.122.0/24. A parte anterior já funcionou (como descrito na minha pergunta), mas os pacotes foram encaminhados com o endereço de origem errado. O NAT altera esse endereço de origem para 172.16.122.1, para que a VM saiba enviar pacotes de volta ao meu MacBook, que os encaminha novamente ao telefone.