KVM, interne Maschine, RDP Zugriff von extern

Wenn man mit KVM eine Maschine virtualisiert hat, und diese dann in ein eigenes internes Netz haengt, z.B. 192.168.X.X, dann ist es zwar normalerweise moeglich via NAT ins Internet zu gehen, aber wie komme ich von extern auf diese Maschine. Konkrete Fragestellung bei mir war: Wie komme ich von extern per Remotedesktop auf die Maschine?

  • per SSH mit X-Forwarding auf der physikalischen einloggen und dann mit rdesktop, Beispiel:
 rdesktop -k de -u MYUSERNAME -g 1280x1024 192.168.2.2
  • mit netten iptables Regeln

Als erstes generell erlauben, dass Traffic auch an die internen Maschinen weitergeleitet werden darf:

iptables -I FORWARD -d 192.168.2.0/24 -j ACCEPT

Danach den entsprechenden Dienst einrichten, in diesem Fall RDP:

iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 --dport 3389 -j DNAT --to-destination 192.168.2.2:3389

Die iptables Regeln habe ich bereits vor einiger Zeit von meinen Cousin Emil Wagner per Mail bekommen. Danke dafuer!

Howto: virsh console

Bei XEN gibt es den praktischen Befehl xm console domU-name und man hat von der physikalischen Maschine eine Konsole zu der virtuellen.

KVM bringt mit dem Befehl virsh console maschinenname die gleiche Funktion ebenfalls mit. Damit das ganze funktioniert muss – zumindest bei Debian – noch etwas nachgeholfen werden.  In der /etc/inittab muss die folgende Zeile relativ am Ende einkommentiert und entsprechend angepasst werden (change 9600 to 115200) werden:

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

Anschliessend noch in der /boot/grub/menu.lst in der Zeile die mit #kopt beginnt die folgenden Optionen anhaengen:

console=tty0 console=ttyS0,115200

und die Aenderungen mit dem Befehl update-grub uebernehmen.

Die erste Anpassung in der inittab bewirkt, dass man in ein fertig gestartetes Linuxsystem kommt. Die Anpassung mit der Kerneloption bewirkt, dass man auch vorher beim Systemstart bereits eine Konsole bekommt.

Hinaus kommt man dort  uebrigens wieder mit der Tastenkombination Strg+Alt Gr+9  … wie damals, good old telnet times.

Zum festhalten: parted, LVM, virsh

Um Partitionen groesser als 2TB zu erstellen muss man GPT labels benutzen. fdisk und Konsorten koennen damit nicht umgehen, deswegen nimmt man dafuer parted. Mit den folgenden Befehlen stellt man den Partitionstabellentyp auf gpt um, und erstellt eine Partition ueber die komplette Platte und formatiert diese mit xfs:

  • parted /dev/sdX -> mklabel gpt -> quit
  • parted -s — /dev/sdX mkpart primary 0 -1
  • mkfs.xfs /dev/sdX

Noch kurz die grundlegenden wichtigsten Befehle zum erstellen eines LVM:

  • /dev/sdX als physikalisches Volume initialisieren: pvcreate /dev/sdX
  • erstellen eine Volume Group mit dem Namen VG-NAME: vgcreate VG-NAME /dev/sdX
  • Ansehen kann man sich das dann mit vgscan oder vgs
  • Erstellen eines neuen Volumes mit dem Namen VOLNAME: lvcreate -n VOLNAME –size 10GB VG-NAME
  • Formatieren, mounten, angucken:
    mkfs.ext3 /dev/VG-NAME/VOLNAME
    mkdir /mnt/VOLNAME
    mount /dev/VG-NAME/VOLNAME /mnt/VOLNAME
  • Anzeigen von Logischen Volumes: lvdisplay
  • Vergroessern/Verkleinern eines Volumes:
    lvextend -L+10G /dev/VG-NAME/VOLNAME
    lvreduce -L-10GB /dev/VG-NAME/VOLNAME
    e2fsck -f /dev/VG-NAME/VOLNAME
    resize2fs /dev/VG-NAME/VOLNAME
  • Loeschen von Volumes: lvremove /dev/VG-NAME/VOLNAME

Abschliessend sei noch gesagt, dass virsh echt cool ist. Dabei ist eben festzuhalten, dass das Speichern u Wiederherstellen aller vms (z.B. vor oder nach einem reboot) einfach geht z.B. mit:

  • for i in `virsh list | grep running | awk {‚print $2‘}` ; do virsh save $i /vms/$i ; done
  • for i in `ls /vms` ; do virsh restore /vms/$i ; done

Wenn man mit virsh console VM auf eine Maschine moechte, duerfen dafuer auf dem Gast in der /etc/inittab die Zeilen mit T0 und T1 nicht auskommentiert sein.

Die Infos hier sind von da und da und dem.