Como fazer o mascaramento de IP no MacOS 10.14+?

Como fazer o mascaramento de IP no MacOS 10.14+?

Estou procurando o comando Macos equivalente ao Linux:

sudo iptables -t nat -A POSTROUTING -o en0 -j MASQUERADE

Quero fazer isso porque tenho uma VPN que tem a rota padrão, mas gostaria que determinados aplicativos passassem pelo uplink físico em vez da VPN.

Usando pfctleu fiz o seguinte:

pass out route-to (en0 192.168.4.1) group skipvpn flags any

Onde 192.168.4.1está o IP do meu gateway e parece rotear todos os pacotes dos aplicativos do skipvpngrupo para a en0interface (em vez do túnel). Eu verifico isso usandotcpdump

No entanto, os 'ips de origem' de todos os pacotes que foram redirecionados ainda têm o IP de origem da VPN (um 10.0.0.0/8range-ip), fazendo com que as coisas quebrem, é claro (ou seja, os pacotes que retornam nunca conseguem encontrar o caminho de volta.)

Como resultado, tentei natos ips de origem usando isto:

nat on en0 from any to any -> en0

Mas isso fazNÃOparecem funcionar, os IPs de origem ainda estão quebrados e não correspondem ao IP de origem da minha en0interface.

Como posso garantir que os IPs de origem estejam configurados corretamente para esses pacotes redirecionados?

Responder1

- O Pf do Mac OS não fará isso por você. Aqui está o porquê:

Se você desse uma olhada no manual, descobriria queNAT está acontecendoantesfiltragem. Mas as regras NAT não suportam toda a variedade de marcas como as regras de filtragem. Ou seja, não há como verificar a propriedade do soquete ao fazer o NAT. Você pode restringir a aplicabilidade das regras NAT com, digamos, IPs de origem ou destino, mas não com propriedade.

Outra coisa a mencionar édurante o processamento NAT Pf está fazendo busca de rota normal. Isso significa que você não terá nenhum trabalho — os pacotes são roteados de acordo com a tabela de roteamento do kernel naquele momento. No seu caso, eles são despachados para serem enviados através da interface da rota padrão, que é a interface VPN. E eles usariam o endereço da interface VPN como seus IPs de origem - o que não é surpreendente para pesquisas normais de rotas, mas obviamente não está de acordo com o seu plano.nat on en0

Para resumir as contradições, brevemente:

  • Se você não fizer o NAT, você terá o IP de origem errado quando route-tofor aplicado
  • Sua regra NAT deve ser definida na interface de rota padrão (VPN) ao alterar o IP de origem para IP denão VPNinterface, como:nat on vpn0 … -> (en0)
  • Mas OTOH você não pode ter NAT personalizado (por propriedade) e se você fizer NAT de qualquer maneira, o tráfego que deveria passar via VPN teria o IP de origem errado.

PS O estado real das coisas no Pf do Mac OS épior ainda. Depois que o NAT for concluído, a correspondência de propriedade também não funcionará nas regras de filtragem.

informação relacionada