Reenvío de puertos de OS X El Capitan a Parallels VM mediante pfctl

Tengo Parallels Desktop 11, que no admite el reenvío de puertos a máquinas virtuales (solo la versión Pro lo admite). Así que estoy tratando de usar pfctl para reenviar puertos a mi máquina virtual Parallels.

He seguido esta respuesta para configurar el reenvío de puertos. El reenvío está habilitado consysctl net.inet.ip.forwarding=1

He especificado esta regla.

rdr pass inet proto tcp from any to any port 51414 -> 10.211.55.9 port 51414

10.211.55.9 es la IP estática de la VM de Parallels.

Sin embargo, el reenvío de puertos no funciona para VM. Puede reenviar correctamente el puerto x al puerto y en 127.0.0.1 pero no puede reenviar el puerto x de Mac al puerto x en Parallels VM.

¿Qué podría estar saliendo mal? ¿Es Parallels el que está descartando paquetes, etc.?

Miré esta esencia gist.github.com/kujohn/7209628 parece que muchas otras personas tienen problemas para reenviar puertos a diferentes IP

Respuestas (1)

Existen dos soluciones para su problema con Parallels Desktop 11 (esto no se aplica a Parallels Desktop Pro/Enterprise 11, ya que ambos brindan una interfaz conveniente para configurar el reenvío de puertos; sin embargo, las soluciones también deberían funcionar en esas versiones mejoradas):

En lugar de adjuntar la interfaz de red de la VM a la "Red compartida", use una interfaz puenteada (por ejemplo, en0 o en1) y configúrela con una IP/máscara de red en la red respectiva. Entonces no necesita NAT/reenvío de puertos.


Si insiste en una red con NAT, haga lo siguiente:

En el siguiente ejemplo, lo uso nccomo servidor. Para ejecutar un servidor ingrese nc -l -4 porty para conectarse a este servidor use nc server-IP port. También puede especificar un puerto de origen: nc -p source-port server-IP port.

Aquí lo uso nc -l -4 11111en la máquina virtual. Para conectarme a este servidor, ejecutaría nc server-IP 11111desde un host en la misma red. Después de iniciar el servidor y conectar el cliente, simplemente puede ingresar un texto, que se envía a la otra consola. Para conectarme desde un tercer host en una red diferente a la VM nc-server que quiero usar nc NAT-host-IP 22222. Entonces tengo que reenviar NAT-host-IP:22222 a VM-IP:11111. NAT-host en este caso es la Mac que aloja la VM de Parallels.

  1. adjunte la interfaz de red del invitado de VM a la "red de solo host". Por lo general, la red de solo host de Parallels tiene la siguiente configuración de host (verifique esto ingresando ifconfigen la máquina host):

    vnic1: ...
    ...
    inet 10.37.129.2 netmask 255.255.255.0 broadcast 10.37.129.255
    

    Así que configure el invitado de VM de la siguiente manera:

    • IP: 10.37.129.x (con x ≠ 0,1,2,255) - debajo supongo que es 10.37.129.10
    • Máscara de red: 255.255.255.0
    • Puerta de enlace: 10.37.129.2
    • DNS: un servidor DNS real como 8.8.8.8
  2. En la máquina NAT-host, habilite el reenvío en /etc/sysctl.conf:

    net.inet.ip.forwarding=1
    net.inet6.ip6.forwarding=1
    

    y reinicie el host.

  3. En la máquina NAT-host (con una IP de ejemplo de en0: 192.168.0.2), cree un archivo de anclaje org.user.forwarding en /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    con el siguiente contenido y una línea vacía al final:

    rdr pass on en0 inet proto tcp from any to any port 22222 -> 10.37.129.10 port 11111
    
  4. En la máquina NAT-host, modifique el archivo /private/etc/pf.conf pero mantenga una línea vacía al final

    archivo original:

    ...
    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    

    a

    ...
    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "org.user.forwarding"
    nat on en0 proto {tcp, udp, icmp} from 10.37.129.0/24 to any -> en0
    pass from {lo0, 10.37.129.0/24} to any keep state
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
    
  5. Analice y pruebe su ancla y su archivo pf.conf para asegurarse de que no haya errores:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    sudo pfctl -vnf /etc/pf.conf
    
  6. Habilitar pf con:

    sudo pfctl -e -f /etc/pf.conf
    
  7. Para probar esto, inicie el servidor nc en la VM con nc -l -4 11111. Ahora, en un tercer host en su red física, ingrese nc 192.168.0.2 22222.

Después de un reinicio, debe iniciar pf nuevamente. Si desea habilitar pf permanentemente, consulte mis otras respuestas relacionadas con pf .

Después de una actualización del sistema o una mejora, algunos de los archivos originales anteriores pueden haber sido reemplazados y debe volver a aplicar todos los cambios.

Lo probare..