OS X El Capitan port forwarding su Parallels VM usando pfctl

4

Ho Parallels Desktop 11, che non supporta il port forwarding su VM (solo la versione Pro lo supporta). Quindi sto cercando di usare pfctl per inoltrare le porte alla mia macchina virtuale Parallels.

Ho seguito questa risposta per configurare il port forwarding. L'inoltro è abilitato con sysctl net.inet.ip.forwarding=1

Ho specificato questa regola.

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

10.211.55.9 è l'IP statico della macchina virtuale di Parallels.

Tuttavia il port forwarding non funziona per VM. Può inoltrare correttamente la porta x alla porta y su 127.0.0.1, ma non può inoltrare la porta x dal Mac alla porta x su Parallels VM.

Che cosa potrebbe andare storto? Parallels sta abbandonando i pacchetti ecc?

    
posta Sudhir N 19.11.2016 - 18:12
fonte

1 risposta

2

Ci sono due soluzioni per il tuo problema con Parallels Desktop 11 (questo non si applica a Parallels Desktop Pro / Enterprise 11, che fornisce entrambe una comoda interfaccia per configurare il port forwarding - tuttavia le soluzioni dovrebbero funzionare anche in quelle versioni avanzate) :

Invece di collegare l'interfaccia di rete della VM alla "Rete condivisa", utilizzare un'interfaccia a ponte (ad esempio en0 o en1) e configurarla con una maschera IP / di rete nella rispettiva rete. Quindi non hai bisogno di NAT / port forwarding.

Se insisti su una rete NAT fare quanto segue:

Nell'esempio seguente utilizzo nc come server. Per eseguire un server inserisci nc -l -4 port e per connetterti a questo server usa nc server-IP port . Puoi anche specificare una porta di origine: nc -p source-port server-IP port .

Qui utilizzo nc -l -4 11111 sulla VM. Per connetterti a questo server, eseguirò nc server-IP 11111 da un host nella stessa rete. Dopo aver avviato il server e aver connesso il client, è possibile inserire semplicemente del testo, che viene inviato all'altra console. Per connetterti da un terzo host su una rete diversa al VM nc-server voglio usare nc NAT-host-IP 22222 . Quindi devo inoltrare NAT-host-IP: 22222 a VM-IP: 11111. L'host NAT in questo caso è il Mac che ospita la macchina virtuale Parallels.

  1. collega l'interfaccia di rete del guest VM alla "Rete solo host". Solitamente la rete host-only di Parallels ha la seguente configurazione host (controlla questo inserendo ifconfig sulla macchina host):

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

    Quindi configurare il guest VM come segue:

    • IP: 10.37.129.x (con x ≠ 0,1,2,255) - di seguito suppongo che sia 10.37.129.10
    • Maschera di rete: 255.255.255.0
    • Gateway: 10.37.129.2
    • DNS: un vero server DNS come 8.8.8.8
  2. Sulla macchina host NAT, abilitare l'inoltro in /etc/sysctl.conf:

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

    e riavvia l'host.

  3. Sulla macchina host NAT (con un IP di esempio di en0: 192.168.0.2) crea un file di ancoraggio org.user.forwarding in /private/etc/pf.anchors

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

    con il seguente contenuto e una riga vuota finale:

    rdr pass on en0 inet proto tcp from any to any port 22222 -> 10.37.129.10 port 11111
    
  4. Sulla macchina host NAT modifica il file /private/etc/pf.conf mantenendo una riga vuota finale

    file originale:

    ...
    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. Analizza e verifica il tuo ancoraggio e il tuo file pf.conf per assicurarti che non ci siano errori:

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

    sudo pfctl -e -f /etc/pf.conf
    
  7. Per testare questo avvia il server nc sulla VM con nc -l -4 11111 . Ora su un terzo host nella tua rete fisica inserisci nc 192.168.0.2 22222 .

Dopo un riavvio devi ricominciare pf. Se vuoi abilitare pf controlla permanentemente le mie altre risposte pf .

Dopo un aggiornamento del sistema o l'aggiornamento di alcuni dei file originali di cui sopra potrebbe essere stato sostituito e devi riapplicare tutte le modifiche.

    
risposta data 29.11.2016 - 23:06
fonte

Leggi altre domande sui tag