Назад | Перейти на главную страницу

Не удается заставить работать сетевой мост

Я пытаюсь сделать так, чтобы сетевой мост работал на сжатии Debian (я экспериментирую, чтобы создать виртуальную машину QEMU / KVM, которая будет видна для внешней сети, как если бы это была отдельная машина). Проблема в том, что когда я печатаю brctl addif br0 eth0 затем я теряю подключение к сети, пока не наберу brctl delif br0 eth0.

В частности, вот как выглядит моя машина, прежде чем я что-нибудь сделаю (по сути, eth0 слушает 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

Теперь позвольте мне добавить мост:

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

Пока здесь все продолжает нормально работать. Наконец, я пытаюсь добавить eth0 к мосту:

root@laura:/home/anthony# brctl addif br0 eth0

На данный момент у меня больше нет сетевого подключения. Если я попытаюсь ping что-то, он сообщает "Destination Host Unreachable". Выход ip addr show кажется нормальным:

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

Также:

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

Я не могу понять, что делаю не так. Я хочу, чтобы машина продолжала слушать 147.102.160.153 на eth0, и в дополнение к этому я хочу иметь tap0 интерфейс, подключенный к eth0, который будет доступен для гостевой машины, чтобы последняя прослушивала другой IP-адрес (скажем, 147.102.160.205). (Если есть другой способ добиться того, чего я хочу, меня тоже интересует.)

В Linux можно, но не следует назначать IP-адреса интерфейсам перед добавлением их в мост, а скорее назначают их интерфейсу моста.

  1. Добавьте интерфейсы к мосту.
  2. Добавьте адрес к мосту.
  3. Установите все порты моста.

Кстати, route исходит из пакета net-tools, который устарел. Использовать ip route (или просто сокращение ip r) вместо этого.