OS X El Capitan-Portweiterleitung an Parallels VM mit pfctl

Ich habe Parallels Desktop 11, das die Portweiterleitung an VMs nicht unterstützt (nur die Pro-Version unterstützt dies). Also versuche ich, pfctl zu verwenden, um Ports an meine Parallels-VM weiterzuleiten.

Ich bin dieser Antwort gefolgt , um die Portweiterleitung einzurichten. Die Weiterleitung wird mit aktiviertsysctl net.inet.ip.forwarding=1

Ich habe diese Regel angegeben.

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

10.211.55.9 ist die statische IP der Parallels-VM.

Die Portweiterleitung funktioniert jedoch nicht für VM. Es kann Port x erfolgreich an Port y auf 127.0.0.1 weiterleiten, aber Port x kann nicht von Mac an Port x auf Parallels VM weitergeleitet werden.

Was könnte schief laufen? Ist es Parallels, das Pakete usw. verwirft?

Betrachtet man diesen Kern gist.github.com/kujohn/7209628, sieht es so aus, als hätten viele andere Personen Probleme beim Weiterleiten von Ports an verschiedene IP-Adressen

Antworten (1)

Es gibt zwei Lösungen für Ihr Problem mit Parallels Desktop 11 (dies gilt nicht für Parallels Desktop Pro/Enterprise 11, die beide eine praktische Schnittstelle zum Konfigurieren der Portweiterleitung bieten - dennoch sollten die Lösungen auch in diesen erweiterten Versionen funktionieren):

Anstatt die Netzwerkschnittstelle der VM an das „Shared Network“ anzubinden, verwenden Sie eine Bridged-Schnittstelle (z. B. en0 oder en1) und konfigurieren Sie diese mit einer IP/Netzmaske im jeweiligen Netzwerk. Dann brauchst du kein NAT/Portforwarding.


Wenn Sie auf einem NAT-Netzwerk bestehen, gehen Sie wie folgt vor:

Im folgenden Beispiel verwende ich ncals Server. Um einen Server auszuführen, geben Sie ein nc -l -4 portund verwenden Sie , um sich mit diesem Server zu verbinden nc server-IP port. Sie können auch einen Quellport angeben: nc -p source-port server-IP port.

Hier verwende ich nc -l -4 11111auf der VM. Um eine Verbindung zu diesem Server herzustellen, würde ich nc server-IP 11111von einem Host im selben Netzwerk aus laufen. Nachdem Sie den Server gestartet und den Client verbunden haben, können Sie einfach einen Text eingeben, der an die andere Konsole gesendet wird. Um eine Verbindung von einem dritten Host in einem anderen Netzwerk zum VM-nc-server herzustellen, möchte ich nc NAT-host-IP 22222. Also muss ich NAT-Host-IP: 22222 an VM-IP: 11111 weiterleiten. NAT-Host ist in diesem Fall der Mac, der die Parallels-VM hostet.

  1. Verbinden Sie die Netzwerkschnittstelle des VM-Gasts mit dem „Host-only Network“. Normalerweise hat das Host-Only-Netzwerk von Parallels die folgende Host-Konfiguration (überprüfen Sie dies, indem Sie ifconfigauf dem Host-Rechner eingeben):

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

    Konfigurieren Sie also den VM-Gast wie folgt:

    • IP: 10.37.129.x (mit x ≠ 0,1,2,255) - unten nehme ich an, dass es 10.37.129.10 ist
    • Netzmaske: 255.255.255.0
    • Gateway: 10.37.129.2
    • DNS: ein echter DNS-Server wie 8.8.8.8
  2. Aktivieren Sie auf der NAT-Host-Maschine die Weiterleitung in /etc/sysctl.conf:

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

    und starten Sie den Host neu.

  3. Erstellen Sie auf dem NAT-Host-Computer (mit einer Beispiel-IP von en0: 192.168.0.2) eine Ankerdatei org.user.forwarding in /private/etc/pf.anchors

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

    mit folgendem Inhalt und einer abschließenden Leerzeile:

    rdr pass on en0 inet proto tcp from any to any port 22222 -> 10.37.129.10 port 11111
    
  4. Ändern Sie auf der NAT-Host-Maschine die Datei /private/etc/pf.conf, aber lassen Sie eine nachgestellte leere Zeile

    Originaldatei:

    ...
    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"
    

    Zu

    ...
    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. Analysieren und testen Sie Ihren Anker und Ihre pf.conf-Datei, um sicherzustellen, dass keine Fehler vorhanden sind:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    sudo pfctl -vnf /etc/pf.conf
    
  6. pf aktivieren mit:

    sudo pfctl -e -f /etc/pf.conf
    
  7. Um dies zu testen, starten Sie den nc-Server auf der VM mit nc -l -4 11111. Geben Sie nun auf einem dritten Host in Ihrem physischen Netzwerk nc 192.168.0.2 22222.

Nach einem Neustart müssen Sie pf neu starten. Wenn Sie pf dauerhaft aktivieren möchten, überprüfen Sie meine anderen pf-bezogenen Antworten.

Nach einer Systemaktualisierung oder -aktualisierung wurden möglicherweise einige der oben genannten Originaldateien ersetzt, und Sie müssen alle Änderungen erneut anwenden.

Werde es ausprobieren..