Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Because my wireless network adapter does not support bridging, it is really difficult to get the guest VM to connect to the open internet and have an IP address in the same network as the host. I am using Ubuntu 10.10, and the KVM version does not support vde, so it becomes even more difficult. How can I fix that?

@stribika's idea is great, but I would prefer to let my VMs connect to the same network as my host. e.g. my host network is 192.168.1.0, and I want my VM's network to be the same.

share|improve this question
add comment

1 Answer

up vote 6 down vote accepted

You should be able to use the user-mode networking stack. Start qemu like this:

qemu-system-x86_64 \
    -smp 1 -m 1024 \
    -net user,net=10.0.0.0/8,host=10.0.0.1,hostfwd=tcp:127.0.0.1:2222-10.0.0.2:22 \
    -net nic \
    -cdrom systemrescuecd-x86-2.0.1.iso -boot d

The important options:

  • -net nic: Show a virtual network card for the guest
  • -net user: Make the qemu process on the host communicate over the real network just like any other process would
  • net=10.0.0.0/8: The subnet on the virtual network
  • host=10.0.0.1: The host IP address on the virtual network
  • hostfwd=tcp:127.0.0.1:2222-10.0.0.2:22: The qemu process on the host listens for TCP connections from localhost on port 2222 and forwards them to the virtual network to 10.0.0.2:22 (so you can ssh to your new virtual machine)

On the guest run

ifconfig eth0 10.0.0.2 up
ip route add default via 10.0.0.1 dev eth0

Test SSH from host to guest

ssh 127.0.0.1 -p 2222

and from guest to host

ssh 10.0.0.1

Test the internet reachability from the guest

wget google.com

The host process works like a NAT router. Only TCP and UDP traffic will work. In particular ping only works between the guest and the host you can't ping google.com (my usual network testing method). The advantage of this approach is that you don't even need root privileges.

share|improve this answer
    
hostfwd=tcp:127.0.0.1: 2222 -10.0.0.2:22, "2222" or "22"? –  davidshen84 Feb 25 '11 at 2:06
    
another question. can i modify the hostfwd while the vm is running? –  davidshen84 Feb 25 '11 at 2:08
    
@davidshen84: Port 2222 on the host (so it can run its own sshd on 22) sent to port 22 on the guest. –  stribika Feb 25 '11 at 5:43
    
@davidshen84: You can't modify it but you can use it multiple times to forward other services. –  stribika Feb 25 '11 at 5:46
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.