On Monday 05 April 2010 13.34:26 mathias dufresne wrote: > Hi, > > For networks 1 and 2 (respectively 192.168.1.0/24 and 192.168.2.0/24, I'll > acll also network 3 for the last one) you'll have to use bridges. > For network 3 you can use vde which is quite simply to use and gives > possibility to add new virtual networks without the need of physical > interface. > > For bridges configuration: > brctl addbr ${brname} > brctl setfd ${brname} 0 > brctl sethello ${brname} 1 > brctl stp ${brname} off > brct addif ${brname} ${physical_if} > > Here you can add an IP to you're bridge interface if needed for the host > has access to this network. Host's IP must by set up on bridge interface > with configuration, if IP is set up on physical interface it is not > working. I'm wondering why, my network knowledge is not much :/ > > Then when you'll run qemu to set up a new VM you'll have to use a tap > device for the VM > > One important thing when use several networks in the same host is then vlan > ID you'll use for networks. These vlans aren't (from my understanding : ) > 802.1Q vlans but pure qemu/kvm concepts. If you don't set up each VM's > interface on the right kvm's vlan they will all be set up on vlan number 0, > which means packets from all networks will appear everywhere (tcpdump on > 192.168.1.0/24 card will see traffic for others networks). > > Here is the command I use to launch a VM with two bridged interfaces and > one other on some vde network: > screen -d -m qemu-system-x86_64 -m 64 \ > -net tap,vlan=0,ifname=tap0,script=/path/to/scripts/kvm-ifup.br0 \ > -net nic,vlan=0,model=e1000,macaddr=52:54:00:01:ab:cd \ > -net tap,vlan=3,ifname=tap1,script=/path/to/scripts/kvm-ifup.br1 \ > -net nic,vlan=3,model=e1000,macaddr=52:54:00:03:ab:cd \ > -net vde,vlan=2,sock=/var/vde/switches/vdelan0 \ > -net nic,vlan=2,model=e1000,macaddr=52:54:00:02:ab:cd \ > -hda /path/to/disks/vm.vmdk \ > -nographic > > Note the "vlan=X" option set on both -net arguments for each interface. > > For VDE switchs: > /usr/bin/vde_switch -m 770 -g qemu -daemon -n 8 -t dummy10 -s > /var/vde/switches/vdelan0 -M /var/vde/management/vdelan0 > > I use dummy interface on host to set up vde networks because the host > mustn't have access on these networks. > -s directory where VDE's unix sockets will be store for this network > -M management socket (I haven't yet understood how to use them :p) > -n number of port on the switch > other options are quite easy to understand. > > Finally my scripts to set up bridged interface are the following: > ------------------ > #!/bin/sh > #set -x > switch=`echo $0 | awk -F\. '{ print $NF}'` > if [ -n "$1" ];then > #/usr/bin/tunctl -u `whoami` -t $1 > /sbin/ip link set $1 up > sleep 0.5s > /sbin/brctl addif $switch $1 > exit 0 > else > echo "Error: no interface specified" > exit 1 > fi > ------------------ > I use one script per bridge named kvm-ifup.${brname} because the script's > name define the bridge on which the interface will be attached > (kvm-ifup.br0 -> br0 and kvm-ifup.br1 -> br1). > > I use VDE switch for networks on which host isn't plugged because they are > simpler to use for me but it is not the only way to proceed. > > > > A last thing, I have a physical card on which is plugged my modem. As I > don't want to expose the host on Internet I use a VM to act as a firewall. > As I just can't give this VM direct access on the physical card dedicated > to Internet I use a bridge: > > modem ------- physical card ----- bridge ----- tap ---- VM's internal card > > The modem knows only one MAC address: the one from physical interface but > this physical interface as no IP. The bridge has same MAC address as > physical interface but has no more IP. The card with an IP is the VM's > internal card so for packets pass through all these interface without IP I > use ebtables to "nat" MAC address between physical interface and VM's > internal card: > ebtables -t nat -A PREROUTING -i $PHYS_DEV_NAME -d $PHYS_DEV_MAC -j dnat > --to-destination $VIRT_DEV_MAC > ebtables -t nat -A POSTROUTING -o $VIRT_DEV_NAME -s $VIRT_DEV_MAC -j snat > --to-source $PHYS_DEV_MAC > > Finally there are some interesting links: > forum's thread related to vlan issues > http://serverfault.com/questions/101477/issue-with-multiple-bridging-for-kv > m-hosts > > something about bridges: > http://www.savelono.com/linux/using-multiple-interfaces-with-kvm-and-xen.ht > ml > > different method to build networks using qemu/kvm: > http://people.gnome.org/~markmc/qemu-networking.html<http://people.gnome.or > g/%7Emarkmc/qemu-networking.html> > > Hoping this helps. > > Kindly regards, > > mathias > > 2010/4/5 Dan Johansson <kvm@xxxxxx> > > > On Sunday 04 April 2010 22.23:28 Held Bernhard wrote: > > > Am 04.04.2010 20:02, schrieb Dan Johansson: > > > > On Sunday 04 April 2010 15.00:26 sudhir kumar wrote: > > > >> On Sun, Apr 4, 2010 at 5:47 PM, Dan Johansson <kvm@xxxxxx> wrote: > > > >>> Hi, > > > >>> > > > >>> I am new to this list and to KVM (and qemu) so please be gentle > > > >>> with me. Up until now I have been running my virtualizing using > > > >>> VMWare-Server. Now I want to try KVM due to some issues with the > > > >>> VMWare-Server and I am having some troubles with the networking > > > >>> part > > > > of > > > > > >>> KVM. > > > >>> > > > >>> This is a small example of what I want (best viewed in a fix-font): > > > >>> > > > >>> +-----------------------------------+ > > > >>> > > > >>> | Host | > > > >>> | +----------+ eth0 |---- 192.168.1.0/24 > > > >>> | > > > >>> | | eth0|-- + | > > > >>> | | VM1 eth1|---(---+------- eth1 |---- 192.168.2.0/24 > > > >>> | | eth2|---(---(---+ | > > > >>> | > > > >>> | +----------+ | | | | > > > >>> | > > > >>> | +----------+ +---(---(--- eth2 |---- 192.168.1.0/24 > > > >>> | > > > >>> | | eth0|---+ | | | > > > >>> | | VM2 eth1|-------+ +--- eth3 |---- 192.168.3.0/24 > > > >>> | | eth2|-----------+ | > > > >>> | > > > >>> | +----------+ | > > > >>> > > > >>> +-----------------------------------+ > > > >>> > > > >>> Host-eth0 is only for the Host (no VM) > > > >>> Host-eth1 is shared between the Host and the VM's (VM?-eth1) > > > >>> Host-eth2 and Host-eth3 are only for the VMs (eth0 and eth2) > > > >>> > > > >>> The Host and the VMs all have fixed IPs (no dhcp or likewise). > > > >>> In this example th IPs could be: > > > >>> Host-eth0: 192.168.1.1 > > > >>> Host-eth1: 192.168.2.1 > > > >>> Host-eth2: - > > > >>> Host-eth3: - > > > >>> VM1-eth0: 192.168.1.11 > > > >>> VM1-eth1: 192.168.2.11 > > > >>> VM1-eth2: 192.168.3.11 > > > >>> VM2-eth0: 192.168.1.22 > > > >>> VM2-eth1: 192.168.2.22 > > > >>> VM3-eth2: 192.168.3.22 > > > >>> > > > >>> And, yes, Host-eth0 and Host-eth2 are in the same subnet, with eth0 > > > >>> dedicated to the Host and eth2 dedicated to the VMs. > > > >>> > > > >>> In VMWare this was quite easy to setup (three bridged networks). > > > >> > > > >> Its easy with KVM too. You want 3 NICs per VM, so you need to pass > > > >> the corresponding parameters(including qemu-ifup script) for 3 NICs > > > >> to each VM. > > > >> In the host you need to create 2 bridges: say br-eth1 and br-eth2. > > > >> Make them as the interface on the host in place of the corresponding > > > >> eth interfaces.(brct addbr br-eth1; ifcfg eth1 0.0.0.0 up; brctl > > > >> addif br-eth eth1; assign eth1's ip and routes to breth1; same for > > > >> eth2). In the corresponding qemu-ifup scripts of each interface use > > > >> bridge=br-ethN (This basicaly translates to brctl addif br-ethN $1, > > > >> where $ is the tap device created) > > > >> This should work perfectly fine with your existing NW setup. > > > >> For a quick reference use: http://www.linux-kvm.org/page/Networking > > > > > > > > Thanks for your help, but... I am still not able to get it to work > > > > the way I want. > > > > This is what I have don so far: > > > > brctl addbr br-eth1 > > > > brctl addbr br-eth3 > > > > > > > > ip link set eth1 up > > > > ip link set eth3 up > > > > > > > > brctl addif br-eth1 eth1 > > > > brctl addif br-eth3 eth3 > > > > > > > > tunctl -b -t qtap1 > > > > tunctl -b -t qtap3 > > > > > > > > brctl addif br-eth1 qtap1 > > > > brctl addif br-eth3 qtap3 > > > > > > > > ifconfig qtap1 up 0.0.0.0 promisc > > > > ifconfig qtap3 up 0.0.0.0 promisc > > > > > > > > # ifconfig > > > > eth0 Link encap:Ethernet HWaddr 00:0d:88:52:51:24 > > > > inet addr:192.168.1.3 Bcast:192.168.1.255 > > > > Mask:255.255.255.0 > > > > > > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 > > > > RX packets:443638 errors:0 dropped:0 overruns:0 frame:0 > > > > TX packets:758540 errors:0 dropped:0 overruns:0 carrier:0 > > > > collisions:0 txqueuelen:1000 > > > > RX bytes:47041686 (44.8 MiB) TX bytes:990115354 (944.2 > > > > MiB) Interrupt:19 Base address:0xec00 > > > > > > > > eth1 Link encap:Ethernet HWaddr 00:0d:88:52:51:25 > > > > inet addr:192.168.4.1 Bcast:192.168.4.255 > > > > Mask:255.255.255.0 > > > > > > UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 > > > > RX packets:0 errors:0 dropped:0 overruns:0 frame:0 > > > > TX packets:6 errors:0 dropped:0 overruns:0 carrier:6 > > > > collisions:0 txqueuelen:1000 > > > > RX bytes:0 (0.0 B) TX bytes:360 (360.0 B) > > > > Interrupt:18 Base address:0xe880 > > > > > > > > eth3 Link encap:Ethernet HWaddr 00:0d:88:52:51:27 > > > > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 > > > > RX packets:0 errors:0 dropped:0 overruns:0 frame:0 > > > > TX packets:4 errors:0 dropped:0 overruns:0 carrier:0 > > > > collisions:0 txqueuelen:1000 > > > > RX bytes:0 (0.0 B) TX bytes:240 (240.0 B) > > > > Interrupt:16 Base address:0xe480 > > > > > > > > qtap1 Link encap:Ethernet HWaddr 26:c0:de:df:c5:e4 > > > > UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 > > > > RX packets:351 errors:0 dropped:0 overruns:0 frame:0 > > > > TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 > > > > collisions:0 txqueuelen:500 > > > > RX bytes:14742 (14.3 KiB) TX bytes:0 (0.0 B) > > > > > > > > qtap3 Link encap:Ethernet HWaddr 26:3e:ba:2d:97:bc > > > > UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 > > > > RX packets:6 errors:0 dropped:0 overruns:0 frame:0 > > > > TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 > > > > collisions:0 txqueuelen:500 > > > > RX bytes:252 (252.0 B) TX bytes:0 (0.0 B) > > > > > > > > > > > > # brctl show > > > > bridge name bridge id STP enabled interfaces > > > > br-eth1 8000.000d88525125 no eth1 > > > > qtap1 > > > > br-eth3 8000.000d88525127 no eth3 > > > > qtap3 > > > > > > > > > > > > This is the way I start the guest: > > > > kvm -net nic,vlan=1,model=rtl8139,macaddr=52:54:00:12:34:56 -net > > > > tap,vlan=1,ifname=qtap1,script=no,downscript=no -net > > > > nic,vlan=3,model=rtl8139,macaddr=52:54:00:12:34:58 -net > > > > tap,vlan=3,ifname=qtap3,script=no,downscript=no Robbie.img -m 1024 > > > > > > > > > > > > The eth3/br-eth3/qtap3 looks OK (I can ping the "default-GW" on that > > > > network from the guest) but the connection to the "shared" interface > > > > (eth1/br- eth1/qtap1) does not work, I can not ping or ssh to/from > > > > the guest from/to the host. Do not ask me if I can ping any other > > > > host on that network - there are no other host on the network yet, > > > > just the > > > > Host > > > > > > and the guest. > > > > > > > > Any suggestions? > > > > > > eth1 should not have an IP address: > > > # ifconfig eth1 0.0.0.0 > > > > > > br-eth1 is not activated (it's missing in `ifconfig`), and it needs an > > > IP address: > > > # ifconfig br-eth1 192.168.2.1/24 > > > > > > Even if it works I would explicitly activate br-eth3 too: > > > # ifconfig br-eth3 0.0.0.0 up > > > > > > Looking at the output of `ifconfig` shows that the IP-address of eth0 > > > (192.168.1.3) doesn't match 192.168.1.1 from your address list, and > > > eth1 (192.168.4.1) is in a different network than the specified > > > > 192.168.2.1/24. > > > > OK, the 192.168.1.3 - 192.168.1.1 is my typo, 192.168.1.3 is the correct > > IP for the Host on this interface. > > I was first planning to use the 192.168.2.0/24 network here, but I had > > forgotten that that was already used somewhere else in my network, so I > > just > > picked the next "free" network address. Sorry for the confusion. > > > > I have tried you suggestions above but I still have no network > > connection. > > > > # ifconfig eth1 > > eth1 Link encap:Ethernet HWaddr 00:0d:88:52:51:25 > > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 > > RX packets:0 errors:0 dropped:0 overruns:0 frame:0 > > TX packets:3 errors:0 dropped:0 overruns:0 carrier:3 > > collisions:0 txqueuelen:1000 > > RX bytes:0 (0.0 B) TX bytes:180 (180.0 B) > > Interrupt:18 Base address:0xe880 > > > > > > # ifconfig br-eth1 > > br-eth1 Link encap:Ethernet HWaddr 00:0d:88:52:51:25 > > inet addr:192.168.4.1 Bcast:192.168.4.255 Mask:255.255.255.0 > > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 > > RX packets:65 errors:0 dropped:0 overruns:0 frame:0 > > TX packets:62 errors:0 dropped:0 overruns:0 carrier:0 > > collisions:0 txqueuelen:0 > > RX bytes:3518 (3.4 KiB) TX bytes:4750 (4.6 KiB) > > > > # ifconfig br-eth3 > > br-eth3 Link encap:Ethernet HWaddr 00:0d:88:52:51:27 > > UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 > > RX packets:0 errors:0 dropped:0 overruns:0 frame:0 > > TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 > > collisions:0 txqueuelen:0 > > RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) > > > > Regards, OK, lets simplify it a bit. This is now the layout that I am playing with and trying to get KVM to work . +-----------------------------------+ | Host | | +----------+ eth0 |---- 192.168.1.0/24 | | VM eth1|------qtap1 | | | | | | | | eth0 | br-eth1---eth1 |---- 192.168.4.0/24 | +----------+ | | | +-----------------------------------+ Host-eth0 is only for the Host (no VM I/O) Host-eth1 is shared between the Host and the VM (Host <--> VM, Host<-- >"external", VM <--> "external") VM-eth0 is unused at the moment. This is the commands I have been using to setup the Networking: brctl addbr br-eth1 brctl setfd br-eth1 0 brctl sethello br-eth1 1 brctl stp br-eth1 off brctl addif br-eth1 eth1 tunctl -b -t qtap1 brctl addif br-eth1 qtap1 ifconfig qtap1 up 0.0.0.0 promisc ifconfig br-eth1 192.168.4.1/24 up ifconfig eth1 0.0.0.0 up And this is the way I start the VM: kvm -net nic,vlan=1,model=rtl8139,macaddr=52:54:00:12:34:56 -net tap,vlan=1,ifname=qtap1,script=no,downscript=no Robbie.img -m 1024 -k de-ch On the Host I have the following: # ifconfig eth1 eth1 Link encap:Ethernet HWaddr 00:0d:88:52:51:25 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:18 errors:0 dropped:0 overruns:0 carrier:18 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:1080 (1.0 KiB) Interrupt:18 Base address:0xe880 # ifconfig br-eth1 br-eth1 Link encap:Ethernet HWaddr 00:0d:88:52:51:25 inet addr:192.168.4.1 Bcast:192.168.4.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:501 errors:0 dropped:0 overruns:0 frame:0 TX packets:479 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:26378 (25.7 KiB) TX bytes:35080 (34.2 KiB) # ifconfig qtap1 qtap1 Link encap:Ethernet HWaddr da:77:3a:a9:40:23 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:503 errors:0 dropped:0 overruns:0 frame:0 TX packets:481 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:33524 (32.7 KiB) TX bytes:35240 (34.4 KiB) # brctl show bridge name bridge id STP enabled interfaces br-eth1 8000.000d88525125 no eth1 qtap1 # netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 br- eth1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 239.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 And in the VM I have: # ifconfig eth1 Link encap:Ethernet HWaddr 52:54:00:12:34:56 inet addr:192.168.4.4 Bcast:192.168.4.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:14 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1040 (1.0 KiB) TX bytes:1018 (1018.0 B) Interrupt:11 Base address:0xc000 # netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.4.1 0.0.0.0 UG 0 0 0 eth1 But Still I get the following: >From the Host to the VM: $ ssh root@xxxxxxxxxxx ssh: connect to host 192.168.4.4 port 22: Connection refused And from the VM to the Host: # ssh root@xxxxxxxxxxx ssh: connect to host 192.168.4.1 port 22: Connection refused Any more suggestions? -- Dan Johansson, <http://www.dmj.nu> *************************************************** This message is printed on 100% recycled electrons! *************************************************** -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html