# kvm Fragen (virt-manager, Netzwerk)

## Tinitus

Hallo,

ich habe ein paar Fragen zu kvm:

1. wie kann ich von außerhalb auf meine virtuellen Maschinen zugreifen? D.h. per Remotedesktop auf ein Windows XP (vom Host zur VM auf dem Host)

Habe bisher die VM nur gestartet aber keinen Netzwerk Zugriff von "Außerhalb"

2. Hat schon mal jemand den virt-manger ausprobiert.

Bei mir funktioniert die Einstellung nicht. Er kann wohl kein DHCP starten....

(Ich habe schon herausgefunden, daß das ebuild iptables nicht mitinstalliert. Leider kann ich das Netzwerk trotzdem nicht starten, so daß ich keinen Netzwerkzugriff habe. Den TUN Driver habe ich geladen, auch das Bridg Modul habe ich geladen...)

3. wie kann ich erreichen, daß alle Core einer Quadcore CPU gleichmäßig ausgelastet sind?

G. R.

----------

## bbgermany

Hi,

zu 1.

hast du das tap Interface schon "gebridged"? Sonst hast du nur NAT zur Auswahl um von außen an die Maschinen zu kommen. Das gleiche sollte für Frage 2 vorher funktionieren. Ich kann dir gerne mal meine Config zukommen lassen, damit du wenn nötig auch vollen Netzzugriff hast.

zu 2.

IIRC hab ich mal gelesen, dass der virt-manager nur richtig funktioniert mit kvm, wenn irgendwo ein Link auf die KVM Binary angelegt wird, der einen speziellen Namen hat. Ich glaube das muss dann kvm-qemu oder so ähnlich heißen.

zu 3. bin ich überfragt. Da weis ich nur, dass das mit XEN möglich ist/war.

MfG. Stefan

----------

## Evildad

 *bbgermany wrote:*   

> 
> 
> zu 2.
> 
> IIRC hab ich mal gelesen, dass der virt-manager nur richtig funktioniert mit kvm, wenn irgendwo ein Link auf die KVM Binary angelegt wird, der einen speziellen Namen hat. Ich glaube das muss dann kvm-qemu oder so ähnlich heißen.
> ...

 

Ja, es gibt sogar einen BUG dazu.

Leider hat sich hier noch nicht wirklich viel getan...

----------

## Tinitus

 *Evildad wrote:*   

>  *bbgermany wrote:*   
> 
> zu 2.
> 
> IIRC hab ich mal gelesen, dass der virt-manager nur richtig funktioniert mit kvm, wenn irgendwo ein Link auf die KVM Binary angelegt wird, der einen speziellen Namen hat. Ich glaube das muss dann kvm-qemu oder so ähnlich heißen.
> ...

 

Hallo,

danke für die Antworten.

ich denke ich habe es hinbekommen.

1. Problem wie gesagt iptables Paket fehlt in den Abhängigkeiten

2. der ganze NAT Modul Kram im Kernel hat sich vom Namen her verschoben deshalb folgende Module laden:

kvm_intel

kvm

tun

nf_nat

Wenn das nicht geht Kernel Network Options ..viele Module erstellen lassen

Zur Kontrolle das Scipt von hier:

http://en.gentoo-wiki.com/wiki/KVM

Script to ease the configuration 

```

#!/sbin/runscript

# Copyright 1999-2008 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

NUM_OF_DEVICES=5

USERID="<your_user>"

depend() {

        need net

}

start() {

        ebegin "Loading the kvm module"

        /sbin/modprobe kvm

        eend $? "Failed to load the kvm module"

        ebegin "Loading the kvm_intel module"

        /sbin/modprobe kvm_intel

        eend $? "Failed to load the kvm_intel module"

        ebegin "Loading the tun module"

        /sbin/modprobe tun

        eend $? "Failed to load the tun module"

        ebegin "Setting up the bridge device (br0)"

        /sbin/brctl addbr br0

        /sbin/ifconfig br0 192.168.100.254 netmask 255.255.255.0 up

        eend $? "Failed to create the bridge interface"

        for ((i=0; i < NUM_OF_DEVICES; i++)); do

                ebegin "Setting up the tap interface: qtap$i"

                /usr/bin/tunctl -b -u $USERID -t qtap$i >/dev/null

                eend $? "Failed to create the tap interface: qtap$i"

                ebegin "Linking the bridge interface with qtap$i"

                /sbin/brctl addif br0 qtap$i

                eend $? "Failed to link the bridge interface to qtap$i"

                ebegin "Bring qtap$i interface up"

                /sbin/ifconfig qtap$i up 0.0.0.0 promisc

                eend $? "Failed to bring qtap$i up"

        done

        ebegin "Allowing Internet access"

        echo "1" > /proc/sys/net/ipv4/ip_forward 

        eend $? "Failed to allow forwarding"

        iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

        eend $? "Failed to allow masquerade (eth0)"

        eend 0

}

stop() {

        for ((i=0; i < NUM_OF_DEVICES; i++)); do

                ebegin "Bring qtap$i interface down"

                /sbin/ifconfig qtap$i down

                eend $? "Failed to bring qtap$i down"

                ebegin "Unlinking the bridge interface with qtap$i"

                /sbin/brctl delif br0 qtap$i

                eend $? "Failed to unlink the bridge interface to qtap$i"

                ebegin "Removing the tap interface: qtap$i"

                /usr/bin/tunctl -d qtap$i >/dev/null

                eend $? "Failed to create the tap interface: qtap$i"

        done

        ebegin "Stopping the bridge device (br0)"

        /sbin/ifconfig br0 down

        /sbin/brctl delbr br0

        eend $? "Failed to stop the bridge interface"

        ebegin "Unloading the tun module"

        /sbin/modprobe -r tun

        eend $? "Failed to unload the tun module"

        ebegin "Unloading the kvm_intel module"

        /sbin/modprobe -r kvm_intel

        eend $? "Failed to unload the kvm_intel module"

        ebegin "Unloading the kvm module"

        /sbin/modprobe -r kvm

        eend $? "Failed to unload the kvm module"

        ebegin "Stopping Internet access"

        echo "0" > /proc/sys/net/ipv4/ip_forward

        eend $? "Failed to cancel forwarding"

        iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

        eend $? "Failed to remove masquerade (eth0)"

        eend 0

}

restart() {

        stop

        start

}

```

mal laufen lassen. Wenn das geht sollte virt-manager zumindest als root laufen

Mein Problem derzeit

a) Zugiff auf das libvirt Lockfile als normaler User

b) Wenn ich den Mauszeiger beim Start im VNC Fenster der virtuellen Maschine habe...läßt er sich nicht mehr herauslösen.

Abhilfe derzeit VM starten dann Doppelklick auf die "laufende VM" (also den Eintrag im virt Manager).

G. Roland

3.

----------

## bbgermany

zu a)

schau mal in /etc/libvirt/libvird.conf. Dort kann man die Gruppe und das Zugriffslevel ändern. Ich habs jedoch noch nicht hinbekommen, dass ich mit einem User darauf Vollzugriff habe, sondern nur lesend  :Sad: 

zu b)

Das Problem habe auch, eine bessere Abhilfe ist es, wenn du Anstelle des eingebauten VNC Clients vom Virtmanager, einen einzelnen VNC Client nimmst.

MfG. Stefan

----------

## Tinitus

 *bbgermany wrote:*   

> zu a)
> 
> schau mal in /etc/libvirt/libvird.conf. Dort kann man die Gruppe und das Zugriffslevel ändern. Ich habs jedoch noch nicht hinbekommen, dass ich mit einem User darauf Vollzugriff habe, sondern nur lesend 
> 
> zu b)
> ...

 

Hallo,

ich kann leider nicht von einer virtuellen Maschine unter WinXP zu einer anderen virtuellen Maschine unter WinXP bzw. zum Host auf die Samba Freigaben zugreifen.

Das Lustige hierbei ist, daß ich die Maschinen untereinander nicht anpingen kann. Von den VM's zum Host geht es.

die VM's ligen im 192.168.100.0/24 Netz

der Host liegt im 192.168.3.0/24 Netz

Was muß ich da machen? Wird das smb nicht per tun/tap Device weitergeleitet?

Woran kann das liegen?

G. R.

----------

## bbgermany

Doch schon, aber auf welches Interface sind denn die VMs gebrigded? 

Wie sieht denn deine libvirtd.conf und die Configfiles für die VMs (zu finden unter: /etc/libvirtd/qemu).

MfG. Stefan

----------

## Tinitus

 *bbgermany wrote:*   

> Doch schon, aber auf welches Interface sind denn die VMs gebrigded? 
> 
> Wie sieht denn deine libvirtd.conf und die Configfiles für die VMs (zu finden unter: /etc/libvirtd/qemu).
> 
> MfG. Stefan

 

Hallo;

meine libvirt.conf sieht so aus:

```

 cat /etc/libvirt/libvirtd.conf 

# Master libvirt daemon configuration file

#

# For further information consult http://libvirt.org/format.html

#

# NOTE: the tests/daemon-conf regression test script requires

# that each "PARAMETER = VALUE" line in this file have the parameter

# name just after a leading "#".

#################################################################

#

# Network connectivity controls

#

# Flag listening for secure TLS connections on the public TCP/IP port.

# NB, must pass the --listen flag to the libvirtd process for this to

# have any effect.

#

# It is necessary to setup a CA and issue server certificates before

# using this capability.

#

# This is enabled by default, uncomment this to disable it

#listen_tls = 0

# Listen for unencrypted TCP connections on the public TCP/IP port.

# NB, must pass the --listen flag to the libvirtd process for this to

# have any effect.

#

# Using the TCP socket requires SASL authentication by default. Only

# SASL mechanisms which support data encryption are allowed. This is

# DIGEST_MD5 and GSSAPI (Kerberos5)

#

# This is disabled by default, uncomment this to enable it.

#listen_tcp = 1

# Override the port for accepting secure TLS connections

# This can be a port number, or service name

#

#tls_port = "16514"

# Override the port for accepting insecure TCP connections

# This can be a port number, or service name

#

#tcp_port = "16509"

# Override the default configuration which binds to all network

# interfaces. This can be a numeric IPv4/6 address, or hostname

#

#listen_addr = "192.168.0.1"

# Flag toggling mDNS advertizement of the libvirt service.

#

# Alternatively can disable for all services on a host by

# stopping the Avahi daemon

#

# This is enabled by default, uncomment this to disable it

#mdns_adv = 0

# Override the default mDNS advertizement name. This must be

# unique on the immediate broadcast network.

#

# The default is "Virtualization Host HOSTNAME", where HOSTNAME

# is subsituted for the short hostname of the machine (without domain)

#

#mdns_name = "Virtualization Host Joe Demo"

#################################################################

#

# UNIX socket access controls

#

# Set the UNIX domain socket group ownership. This can be used to

# allow a 'trusted' set of users access to management capabilities

# without becoming root.

#

# This is restricted to 'root' by default.

unix_sock_group = "kvm"

# Set the UNIX socket permissions for the R/O socket. This is used

# for monitoring VM status only

#

# Default allows any user. If setting group ownership may want to

# restrict this to:

#unix_sock_ro_perms = "0777"

# Set the UNIX socket permissions for the R/W socket. This is used

# for full management of VMs

#

# Default allows only root. If PolicyKit is enabled on the socket,

# the default will change to allow everyone (eg, 0777)

#

# If not using PolicyKit and setting group ownership for access

# control then you may want to relax this to:

#unix_sock_rw_perms = "0770"

#################################################################

#

# Authentication.

#

#  - none: do not perform auth checks. If you can connect to the

#          socket you are allowed. This is suitable if there are

#          restrictions on connecting to the socket (eg, UNIX

#          socket permissions), or if there is a lower layer in

#          the network providing auth (eg, TLS/x509 certificates)

#

#  - sasl: use SASL infrastructure. The actual auth scheme is then

#          controlled from /etc/sasl2/libvirt.conf. For the TCP

#          socket only GSSAPI & DIGEST-MD5 mechanisms will be used.

#          For non-TCP or TLS sockets,  any scheme is allowed.

#

#  - polkit: use PolicyKit to authenticate. This is only suitable

#            for use on the UNIX sockets. The default policy will

#            require a user to supply their own password to gain

#            full read/write access (aka sudo like), while anyone

#            is allowed read/only access.

#

# Set an authentication scheme for UNIX read-only sockets

# By default socket permissions allow anyone to connect

#

# To restrict monitoring of domains you may wish to enable

# an authentication mechanism here

#auth_unix_ro = "none"

# Set an authentication scheme for UNIX read-write sockets

# By default socket permissions only allow root. If PolicyKit

# support was compiled into libvirt, the default will be to

# use 'polkit' auth.

#

# If the unix_sock_rw_perms are changed you may wish to enable

# an authentication mechanism here

#auth_unix_rw = "none"

# Change the authentication scheme for TCP sockets.

#

# If you don't enable SASL, then all TCP traffic is cleartext.

# Don't do this outside of a dev/test scenario. For real world

# use, always enable SASL and use the GSSAPI or DIGEST-MD5

# mechanism in /etc/sasl2/libvirt.conf

#auth_tcp = "sasl"

# Change the authentication scheme for TLS sockets.

#

# TLS sockets already have encryption provided by the TLS

# layer, and limited authentication is done by certificates

#

# It is possible to make use of any SASL authentication

# mechanism as well, by using 'sasl' for this option

#auth_tls = "none"

#################################################################

#

# TLS x509 certificate configuration

#

# Override the default server key file path

#

#key_file = "/etc/pki/libvirt/private/serverkey.pem"

# Override the default server certificate file path

#

#cert_file = "/etc/pki/libvirt/servercert.pem"

# Override the default CA certificate path

#

#ca_file = "/etc/pki/CA/cacert.pem"

# Specify a certificate revocation list.

#

# Defaults to not using a CRL, uncomment to enable it

#crl_file = "/etc/pki/CA/crl.pem"

#################################################################

#

# Authorization controls

#

# Flag to disable verification of client certificates

#

# Client certificate verification is the primary authentication mechanism.

# Any client which does not present a certificate signed by the CA

# will be rejected.

#

# Default is to always verify. Uncommenting this will disable

# verification - make sure an IP whitelist is set

#tls_no_verify_certificate = 1

# A whitelist of allowed x509  Distinguished Names

# This list may contain wildcards such as

#

#    "C=GB,ST=London,L=London,O=Red Hat,CN=*"

#

# See the POSIX fnmatch function for the format of the wildcards.

#

# NB If this is an empty list, no client can connect, so comment out

# entirely rather than using empty list to disable these checks

#

# By default, no DN's are checked

#tls_allowed_dn_list = ["DN1", "DN2"]

# A whitelist of allowed SASL usernames. The format for usernames

# depends on the SASL authentication mechanism. Kerberos usernames

# look like username@REALM

#

# This list may contain wildcards such as

#

#    "*@EXAMPLE.COM"

#

# See the POSIX fnmatch function for the format of the wildcards.

#

# NB If this is an empty list, no client can connect, so comment out

# entirely rather than using empty list to disable these checks

#

# By default, no Username's are checked

#sasl_allowed_username_list = ["joe@EXAMPLE.COM", "fred@EXAMPLE.COM" ]

```

eine config File einer VM sieht so aus

```
cat /etc/libvirt/qemu/winxptest1cpu.xml 

<domain type='kvm'>

  <name>winxptest1cpu</name>

  <uuid>a36f6de3-38d5-cd46-317a-70f1c24a0d0c</uuid>

  <memory>524288</memory>

  <currentMemory>524288</currentMemory>

  <vcpu>1</vcpu>

  <os>

    <type arch='x86_64' machine='pc'>hvm</type>

    <boot dev='hd'/>

  </os>

  <features>

    <pae/>

  </features>

  <clock offset='localtime'/>

  <on_poweroff>destroy</on_poweroff>

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices>

    <emulator>/usr/bin/kvm</emulator>

    <disk type='file' device='disk'>

      <source file='/home/user/VMforkvm/winxptest1cpu'/>

      <target dev='hda' bus='ide'/>

    </disk>

    <disk type='block' device='cdrom'>

      <target dev='hdc' bus='ide'/>

      <readonly/>

    </disk>

    <interface type='network'>

      <mac address='54:52:00:78:46:cf'/>

      <source network='Bairoda2'/>

    </interface>

    <serial type='pty'>

      <source path='/dev/pts/4'/>

      <target port='0'/>

    </serial>

    <console type='pty' tty='/dev/pts/4'>

      <source path='/dev/pts/4'/>

      <target port='0'/>

    </console>

    <input type='tablet' bus='usb'/>

    <input type='mouse' bus='ps2'/>

    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>

    <sound model='es1370'/>

  </devices>

</domain>

```

Ich habe also alles mit dem virt-manger erstellt.

Ich brauche wohl eine Bridge um beide Subnetze zu verbinden, da samba nicht mit anderen Subnetzen funktioniert? Richtig? Aber warum geht es dann per VPN?

Also alle VM können sich untereinander "sehen". Lediglich den Host und die Rechner im Netz des Hostes kann ich zwar anpingen..jedoch nicht per smb Protokoll darauf zugreifen.

Ich brauche aber eine Bridge, damit ich z.B. vom Host auf die VM's per RDP Protokoll zugreiefen kann? Ist das so richtig?

Schwierige Fragen heute.

G. R.

----------

## bbgermany

Hi,

also bei mir sind Host und VMs im gleichen Subnetz. Somit habe ich keine Probleme via Samba von wo auch immer zu zu greifen. Ich poste dir einfach mal die relevanten Einstellungen für mein Windows XP und meine Hostnetzwerkkonfiguration:

/etc/conf.d/net

```

config_eth0=( "null" )

bridge_br0="eth0"

config_br0=( "192.168.23.3 netmask 255.255.255.0" )

routes_br0=( "default via 192.168.23.150" )

dns_servers=( "192.168.23.20" )

dns_domain="$DOMAIN1"

dns_search="$DOMAIN1 $DOMAIN2"

brctl_br0=(

        "setfd 0"

        "stp off"

        )

```

/etc/libvirtd/qemu/WindowsXP.xml

```

<domain type='kvm'>

  <name>Windows-XP</name>

  <uuid>1a8e0f4f-b769-8df5-8def-0abca3544dfc</uuid>

  <memory>1048576</memory>

  <currentMemory>1048576</currentMemory>

  <vcpu>1</vcpu>

  <os>

    <type arch='x86_64' machine='pc'>hvm</type>

    <boot dev='hd'/>

  </os>

  <features>

    <pae/>

  </features>

  <clock offset='localtime'/>

  <on_poweroff>destroy</on_poweroff>

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices>

    <emulator>/usr/bin/qemu-kvm</emulator>

    <disk type='file' device='disk'>

      <source file='/var/lib/libvirt/images/Test.img'/>

      <target dev='hda' bus='ide'/>

    </disk>

    <disk type='file' device='disk'>

      <source file='/var/lib/libvirt/images/Test2.img'/>

      <target dev='hdb' bus='ide'/>

    </disk>

    <disk type='file' device='cdrom'>

      <target dev='hdc' bus='ide'/>

      <readonly/>

    </disk>

    <interface type='bridge'>

      <mac address='52:54:00:12:34:57'/>

      <source bridge='br0'/>

      <model type='virtio'/>

    </interface>

    <serial type='pty'>

      <source path='/dev/pts/2'/>

      <target port='0'/>

    </serial>

    <console type='pty' tty='/dev/pts/2'>

      <source path='/dev/pts/2'/>

      <target port='0'/>

    </console>

    <input type='tablet' bus='usb'/>

    <input type='mouse' bus='ps2'/>

    <graphics type='vnc' port='5999' autoport='no' keymap='de'/>

    <sound model='es1370'/>

  </devices>

</domain>

```

Der warscheinlich interessante Punkt für dich ist die Netzwerkkonfiguration für die Domain. Ich arbeite mit dem virtio Treiber. Den kannst du bei folgender Adresse runterladen:

http://sourceforge.net/project/showfiles.php?group_id=180599&package_id=267943

MfG. Stefan

----------

## Tinitus

Hallo Stefan,

danke das war der Stubs in die richtige Richtung. Aber wenn ich den virt-manger nehmen will habe ich im virt-manager unter Editieren --> Connection Details meine Netzwerke eingerichtet.

Diese habe ich gelöscht.

dann meine /etc/conf.d/net angepaßt:

mein Host hat einen Netzwerkkartenproblem.  :Wink: 

Deshalb ist meine 1 Netzwerkkarte nicht eth0 sondern eth1.

im oberen Teil steht meine alte config

also ein 192.168.3.0/24 Subnetz netzmaske 255.255.255.0 Gateway 192.168.3.1

im unteren Teil habe ich einen Tunnel auf eth1, so daß alle Rechner im selben Subnet liegen

Sowohl mein Server, als auch das lokale LAN, wie auch meine VM's unter kvm.

Danke noch mal.

G. R.

und hier noch mal meine config: 

```
# This blank configuration will automatically use DHCP for any net.*

# scripts in /etc/init.d.  To create a more complete configuration,

# please review /etc/conf.d/net.example and save your configuration

# in /etc/conf.d/net (this file :]!).

dns_domain_lo="ARBEITSGRUPPE"

#config_eth1=( "192.168.3.2 netmask 255.255.255.0 brd 192.168.3.255" )

#routes_eth1=( "default via 192.168.3.1" )

#dns_servers_eth1="192.168.3.1 194.25.2.129 217.237.149.205 217.237.151.51"

#dhcp_eth0="nodns"

dns_servers="192.168.3.1 194.25.2.129 217.237.149.205 217.237.151.51"

bridge_br0="eth1"

config_eth0=( "null" )

config_eth1=( "null" )

config_br0=( "192.168.3.2/24" )

RC_NEED_br0="net.eth1"

brctl_br0=( "setfd 0" "sethello 1" "stp off" )

routes_br0=( "default gw 192.168.3.1" )

```

Dann habe ich noch ein:

```
cd /etc/init.d && ln -s net.lo net.br0 && rc-update add net.br0 default

```

gemacht.

----------

## bbgermany

Hi,

super schön zu sehen, dass es nun geht  :Very Happy: 

MfG. Stefan

----------

## Tinitus

 *bbgermany wrote:*   

> zu a)
> 
> schau mal in /etc/libvirt/libvird.conf. Dort kann man die Gruppe und das Zugriffslevel ändern. Ich habs jedoch noch nicht hinbekommen, dass ich mit einem User darauf Vollzugriff habe, sondern nur lesend 
> 
> zu b)
> ...

 

Hallo,

für den Fall, daß das noch jemand benötigt:

zu a :Smile: 

funktioniert wie folgt:

unix_sock_group = "users" setzen

und dann habe ich noch

unix_sock_rw_perms = "0770"

gesetzt

libvirt neu starten

Dann ging es.

G. R.

----------

## Evildad

Habt Ihr eigentlich auch das Problem, dass mit dem eingebauten VNC Server Alt Gr nicht funktioniert und somit kein Euro und Pipe Zeichen möglich ist?

----------

## Tinitus

 *Evildad wrote:*   

> Habt Ihr eigentlich auch das Problem, dass mit dem eingebauten VNC Server Alt Gr nicht funktioniert und somit kein Euro und Pipe Zeichen möglich ist?

 

Hallo,

ja habe das Problem auch. Ist mir aber noch nicht aufgefallen bis dato, da ich immer rdesktop verwende.

Benutze einfach Strg+Alt anstatt AltGR

Was bei mir nicht geht ist die qemu Konsole

Strg+Alt+1

Kann zwar hineinwechseln...nimmt aber keine Eingabe an.

G. R.

----------

## Evildad

 *Tinitus wrote:*   

> 
> 
> Was bei mir nicht geht ist die qemu Konsole
> 
> Strg+Alt+1
> ...

 

Kann ich bestätigen. Das funktioniert bei mir auch nicht...

----------

