I'm trying to make network bridging to work on a Debian squeeze (I'm experimenting in order to make a QEMU/KVM virtual machine that will be visible to the outside network as if it were a distinct machine). The problem is that when I type brctl addif br0 eth0 then I lose connectivity to the network until I type brctl delif br0 eth0.
More specifically, here's how my machine looks like before I do anything (essentially eth0 is listening on 147.102.160.153):
root@laura:/home/anthony# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 8c:73:6e:db:1c:1b brd ff:ff:ff:ff:ff:ff
inet 147.102.160.153/24 brd 147.102.160.255 scope global eth0
inet6 2001:648:2000:a0:8e73:6eff:fedb:1c1b/64 scope global dynamic
valid_lft 2591848sec preferred_lft 604648sec
inet6 fe80::8e73:6eff:fedb:1c1b/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
link/ether 4c:ed:de:8e:44:d7 brd ff:ff:ff:ff:ff:ff
4: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
5: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether ee:7c:88:59:d0:e8 brd ff:ff:ff:ff:ff:ff
Now let me add the bridge:
root@laura:/home/anthony# brctl addbr br0
root@laura:/home/anthony# ip tuntap add dev tap0 mode tap
root@laura:/home/anthony# ip link set tap0 up
root@laura:/home/anthony# brctl addif br0 tap0
Until here everything continues to work normally. Finally, I try to add eth0 to the bridge:
root@laura:/home/anthony# brctl addif br0 eth0
At this point, I no longer have a network connection. If I try to ping something, it tells "Destination Host Unreachable". The output of ip addr show seems normal:
root@laura:/home/anthony# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 8c:73:6e:db:1c:1b brd ff:ff:ff:ff:ff:ff
inet 147.102.160.153/24 brd 147.102.160.255 scope global eth0
inet6 2001:648:2000:a0:8e73:6eff:fedb:1c1b/64 scope global dynamic
valid_lft 2591908sec preferred_lft 604708sec
inet6 fe80::8e73:6eff:fedb:1c1b/64 scope link
valid_lft forever preferred_lft forever
[snip wlan0, vboxnet0 and pan0, which are down and irrelevant]
8: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether 16:30:f2:67:ab:75 brd ff:ff:ff:ff:ff:ff
9: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
link/ether 16:30:f2:67:ab:75 brd ff:ff:ff:ff:ff:ff
inet6 fe80::1430:f2ff:fe67:ab75/64 scope link
valid_lft forever preferred_lft forever
Also:
root@laura:/home/anthony# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
147.102.160.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
0.0.0.0 147.102.160.200 0.0.0.0 UG 0 0 0 eth0
I can't understand what I'm doing wrong. I want the machine to continue to listen on 147.102.160.153 on eth0, and in addition to that I want to have a tap0 interface, bridged to eth0, that will be available to the guest machine so that the latter listens on another ip address (say 147.102.160.205). (If there's another way to achieve what I want, I'm also interested.)