Reenvío de puerto OS El Capitan a Parallels VM usando pfctl

4

Tengo Parallels Desktop 11, que no tiene soporte para reenvío de puertos a máquinas virtuales (solo la versión Pro lo admite). Por lo tanto, estoy tratando de usar pfctl para reenviar puertos a mi VM Parallels.

He seguido esta respuesta para configurar el reenvío de puertos. El reenvío se habilita con sysctl 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 con éxito el puerto x al puerto y en 127.0.0.1, pero no puede reenviar el puerto x desde Mac al puerto x en Parallels VM.

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

    
pregunta Sudhir N 19.11.2016 - 18:12

1 respuesta

2

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

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

Si insiste en una red NAT, haga lo siguiente:

En el siguiente ejemplo, uso nc como servidor. Para ejecutar un servidor, ingrese nc -l -4 port y 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í uso nc -l -4 11111 en la máquina virtual. Para conectarme a este servidor, ejecutaría nc server-IP 11111 desde un host en la misma red. Después de iniciar el servidor y conectar el cliente, simplemente puede ingresar algún texto, que se envía a la otra consola. Para conectarme desde un tercer host en una red diferente al VM nc-server, quiero usar nc NAT-host-IP 22222 . Así que 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. conecte la interfaz de red del invitado de VM a la "Red de solo host". Por lo general, la red de host solo de Parallels tiene la siguiente configuración de host (verifique esto ingresando ifconfig en la máquina host):

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

    Configura el invitado de máquina virtual de la siguiente manera:

    • IP: 10.37.129.x (con x ≠ 0,1,2,255): a continuación, asumo 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 reinicia el host.

  3. En la máquina NAT-host (con un ejemplo de IP 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. Habilita pf con:

    sudo pfctl -e -f /etc/pf.conf
    
  7. Para probar esto, inicie el servidor nc en la máquina virtual 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 reiniciar tienes que iniciar pf de nuevo. Si desea habilitar pf, revise mis otras pf relacionadas de forma permanente.

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

    
respondido por el klanomath 29.11.2016 - 23:06

Lea otras preguntas en las etiquetas