
Estoy buscando el comando de Macos equivalente al de Linux:
sudo iptables -t nat -A POSTROUTING -o en0 -j MASQUERADE
La razón por la que quiero hacer esto es que tengo una VPN que tiene la ruta predeterminada, pero me gustaría que ciertas aplicaciones utilicen el enlace ascendente físico en lugar de la VPN.
Usando pfctl
he hecho lo siguiente:
pass out route-to (en0 192.168.4.1) group skipvpn flags any
¿Dónde 192.168.4.1
está la IP de mi puerta de enlace? Esto parece enrutar todos los paquetes de las aplicaciones del skipvpn
grupo a la en0
interfaz (en lugar del túnel). Verifico esto usandotcpdump
Sin embargo, las 'ips de origen' de todos los paquetes que han sido reenrutados todavía tienen la IP de origen de la VPN (una 10.0.0.0/8
IP de rango), lo que provoca que las cosas se rompan, por supuesto (es decir, los paquetes que regresan nunca pueden encontrar el camino de regreso...)
Como resultado, probé nat
las ips de origen usando esto:
nat on en0 from any to any -> en0
Pero esto noNOParece funcionar, las IP de origen aún están rotas y no corresponden a la IP de origen de mi en0
interfaz.
¿Cómo me aseguro de que las IP de origen estén configuradas correctamente para estos paquetes redireccionados?
Respuesta1
— Pf de Mac OS no hará esto por usted. Este es el por qué:
Si echas un vistazo a su manual, descubrirás queNAT está sucediendoantesfiltración. Pero las reglas NAT no admiten toda la variedad de características como lo hacen las reglas de filtrado. Es decir, no hay forma de comprobar la propiedad del socket mientras se realiza NAT. Puede restringir la aplicabilidad de las reglas NAT con, por ejemplo, IP de origen o destino, pero no con la propiedad.
Otra cosa a mencionar esdurante el procesamiento NAT, Pf realiza una búsqueda de ruta normal. Significa que no tendrá ningún trabajo: los paquetes se enrutan de acuerdo con la tabla de enrutamiento del kernel en ese momento. En su caso, se envían a través de la interfaz de ruta predeterminada, que es la interfaz VPN. Y estarían usando la dirección de la interfaz VPN como su IP de origen, lo cual no es sorprendente para búsquedas de rutas normales, pero obviamente no va con su plan.nat on en0
Para resumir las contradicciones, brevemente:
- Si no hace NAT, tiene una IP de origen incorrecta cuando
route-to
se aplica - Su regla NAT debe configurarse en la interfaz de ruta predeterminada (VPN) mientras cambia la IP de origen a la IP deno VPNinterfaz, como:
nat on vpn0 … -> (en0)
- Pero OTOH no puede tener una NAT personalizada (por propiedad) y si hace NAT de todos modos, el tráfico que se supone que va a través de VPN tendría una IP de origen incorrecta.
PD: El estado real de las cosas en Pf de Mac OS espeor aún. Una vez finalizada la NAT, la coincidencia de propiedad tampoco funcionará en las reglas de filtrado.