Der Host verfügt über eine einzige externe IP-Adresse, sodass ich meine KVM-Gäste mit NAT einrichten kann.
Wie richte ich eine Portweiterleitung ein, um einige der Anfragen von außen an die Gäste weiterzuleiten?
Ich konnte dazu keine Dokumentation finden. Die naheliegendste Antwort ist wahrscheinlich diese Antwort , aber es wird auch erwähnt, dass es in libvirt 0.8.3 einfacher ist, dies zu tun. Kennt jemand einen aktuelleren Weg, dies zu tun?
Antworten:
Hier ist eine bessere Möglichkeit, die Portweiterleitung mithilfe eines Hook-Skripts ( Quelle ) einzurichten .
In
/etc/libvirt/hooks/qemu
:Sie sollten die vier Variablen oben einstellen, damit sie zu Ihrem libvirt-Setup passen.
Du musst libvirt-bin neu starten, was auf Ubuntu erledigt ist mit:
Dann müssen Sie den Gast neu starten. Unter Ubuntu müssen Sie die Einstellungen anpassen
/etc/apparmor.d/usr.sbin.libvirtd
, damit das Hook-Skript ausgeführt werden kann:Neben an
anhängen
Dann lade apparmor neu:
Es gibt wahrscheinlich eine Möglichkeit zur
$GUEST_IPADDR
automatischen Konfiguration mit virsh / dumpxml / iface-dumpxml, aber ich habe es nicht gefunden. : Alternativ kann die IP statisch im Netzwerk xml eingestellt werden Dokumentation .Soweit ich weiß, können Netzwerkfilter nur dazu verwendet werden, die Vorgänge im virtuellen Netzwerk einzuschränken, und sie sind für die Portweiterleitung nicht hilfreich.
quelle
/etc/libvirt/hooks/** rmix,
standardmäßig eine Zeile in der Konfigurationsdatei von apparmor, und dies scheint den gleichen Effekt zu haben. Ich konnte das Skript ausführen, ohne die Apparmor-Konfiguration zu ändern.Ich bin in einer ähnlichen Situation. Ich habe einen Windows Server in KVM im privaten NAT-Netzwerk, der auf dem Host über die Schnittstelle virbr0 verbunden ist. Ich möchte über einen Remotedesktop auf die VM zugreifen. Daher muss ich den Datenverkehr an Port 3389 (RDP) an den VM-Port 3389 weiterleiten. Dies habe ich mit einigen iptable-Regeln erreicht.
HOST-IP, VM-IP und VM-NET müssen selbstverständlich übernommen werden. Es ist jedoch schwierig, mit iptables und libvirt zu spielen. Im Moment bin ich auf der Suche nach einer Lösung, um Zugang zum Internet auf meiner VM zu erhalten, die ich durch das Durcheinander mit den iptable-Regeln verloren habe :-(
quelle
Ich glaube, dass die Antwort, auf die Sie verweisen, immer noch die entsprechenden Iptables-Regeln enthält. Jetzt können Sie jedoch mithilfe eines Skript-Hooks Regeln erstellen und löschen, wenn virtuelle Maschinen gestartet und gestoppt werden. Wie Isaac in der vorherigen Antwort sagte, gibt es auch Netzwerkfilter in der aktuellen Version von libvirt, aber ich bin mir nicht sicher, wie oder ob sie verwendet werden können, um Ports für NAT-Gäste zu öffnen.
quelle
Wie ist das Gast-Networking aufgebaut? Wenn es überbrückt ist, müssen Sie die Ports nur an die IP-Adressen der Gäste weiterleiten. Wenn sich Ihre Gäste hinter einem weiteren NAT befinden, das von einem libvirt eingerichtet wird, wird es kompliziert
In jedem Fall behandeln Sie die VMs hier einfach wie eine physische Maschine
quelle