KVM Guest forwarding port to Host

To forward port from KVM Guest to KVM Host (Node), for example, you want Port 22 of KVN Guest accessible as Port 2222 on KVM Hosts public IP address.

First, shutdown VM

virsh shutdown VM-NAME

Now edit VM config.

virsh edit VM-NAME

Add following before before closing

  <qemu:commandline>
    <qemu:arg value='-redir'/>
    <qemu:arg value='tcp:2222::22'/>
  </qemu:commandline>

Find

<domain type='kvm'>

Replace With

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

Find

<interface type='network'>

Replace With

<interface type='user'>

Save and exit editor. Now, start VM.

virsh start VM-NAME

Sample config for VM with name ubuntu14

[root@cl-148 ~]# virsh shutdown ubuntu14
Domain ubuntu14 is being shutdown

[root@cl-148 ~]# virsh edit ubuntu14
Domain ubuntu14 XML configuration edited.

[root@cl-148 ~]# virsh start ubuntu14
Domain ubuntu14 started

[root@cl-148 ~]# netstat -an | grep 2222
tcp        0      0 0.0.0.0:2222                0.0.0.0:*                   LISTEN      
[root@cl-148 ~]# virsh dumpxml ubuntu14
<domain type='kvm' id='7' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>ubuntu14</name>
  <uuid>9d2851db-1194-7051-834a-ca16fc372e49</uuid>
  <memory unit='KiB'>1048576</memory>
  <currentMemory unit='KiB'>1048576</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.6.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/var/lib/libvirt/images/ubuntu14.img'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <alias name='ide0-1-0'/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0'>
      <alias name='usb0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <alias name='ide0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='user'>
      <mac address='52:54:00:a6:bd:a3'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/3'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/3'>
      <source path='/dev/pts/3'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
      <listen type='address' address='127.0.0.1'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-redir'/>
    <qemu:arg value='tcp:2222::22'/>
  </qemu:commandline>
</domain>

[root@cl-148 ~]# 

Posted in Virtualization