LINUX.ORG.RU

Как выбирается MAC адрес линуксового bridge ( bridgeutils, brctl )?


0

1

Доброго времени суток.

На kvm есть виртуальный мост ( bridge in the linux kernel, в общем тот что управляется утилитами из bridgeutils ), к нему подключены несколько виртуалок. Недавно заметил, что при включении / выключении одной из них секунд на 30-60 пропадает сеть у всех виртуалок, подключенных к тому же мосту.

Посмотрел подробнее tcpdump и сильно удивился: при этих махинациях мост ( дефолтный шлюз для этих ВМ ) меняет MAC адрес. Точнее, мост связывает свой IP адрес с MAC адресом одного из портов этого же моста. Этим портом оказался vnet18, в который и была включена «проблемная» виртуалка. При её выключении мост брал себе MAC с vnet17, при включении - снова vnet18.

bridge name     bridge id               STP enabled     interfaces
br3             8000.fe54003f7b3a       no              vnet0
                                                        vnet13
                                                        vnet17
                                                        vnet18

Вопрос: как бы к мосту прибить mac гвоздями, чтобы не портил жизнь?

★★★★★

лень проверять, но мне кажется что это софт меняет. С чего бриджу-то мак менять?

true_admin ★★★★★ ()

кстати, что за софт? не какой-нить libvirt? Тогда на него strace натрави и посмотри что делает

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

кстати, что за софт? не какой-нить libvirt?

Я этот трейс до пенсии читать буду. И внукам завещаю o.O

Одна из ВМ в br3:

root@vm-test:~# arp -a
? (192.168.3.1) at fe:54:00:3f:7b:3a [ether] on eth0
? (192.168.100.5) at 52:54:00:f4:0b:05 [ether] on eth1
выключаю проблемную ВМ ( которая на vmnet18 ), жду пока сеть восстановится
root@vm-test:~# arp -a
? (192.168.3.1) at fe:54:00:69:5a:15 [ether] on eth0
? (192.168.100.5) at 52:54:00:f4:0b:05 [ether] on eth1
снова включаю, жду
root@vm-test:~# arp -a
? (192.168.3.1) at fe:54:00:3f:7b:3a [ether] on eth0
? (192.168.100.5) at 52:54:00:f4:0b:05 [ether] on eth1

Обрати внимание как меняется адрес шлюза 192.168.3.1

router ★★★★★ ()
Ответ на: комментарий от router

На хосте KVM:

49: vnet17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:69:5a:15 brd ff:ff:ff:ff:ff:ff
[...]
63: vnet18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether fe:54:00:3f:7b:3a brd ff:ff:ff:ff:ff:ff
router ★★★★★ ()

Попробую добавить в этот шлюз dummy интерфейс и перезагрузить хост. Если не поможет, придётся выносить шлюз с моста на отдельный свич, железный или виртуальный.

router ★★★★★ ()

они (mac бриджа и мак вирт машины) связаны разве?

br0       Link encap:Ethernet  HWaddr 78:E3:B5:10:A0:D8  
          

br1       Link encap:Ethernet  HWaddr 78:E3:B5:10:A0:D8  
          

br2       Link encap:Ethernet  HWaddr 78:E3:B5:10:A0:D8  
         

vnet0     Link encap:Ethernet  HWaddr FE:54:00:E5:E1:5B  
         

vnet1     Link encap:Ethernet  HWaddr FE:54:00:9A:48:7D  
         

vnet2     Link encap:Ethernet  HWaddr FE:54:00:CC:3C:4B 

      

mac бриджа берётся из интерфейся к которому добавляется. и меняется если это bond например и мастер интерфейс падает.

ukr_unix_user ★★★ ()

а у тебя br3 не связан с физическим интерфейсом

br3             8000.fe54003f7b3a       no              vnet0
                                                        vnet13
                                                        vnet17
                                                        vnet18
ukr_unix_user ★★★ ()
Ответ на: комментарий от ukr_unix_user

а должно быть

# brctl show 
bridge name     bridge id               STP enabled     interfaces
br0             8000.78e3b510a0d8       no              bond0(ethN)
                                                        vnet0

ukr_unix_user ★★★ ()
Ответ на: комментарий от ukr_unix_user

а у тебя br3 не связан с физическим интерфейсом

Да, всё правильно. Но есть одно но - железных сетевых интерфейсов у меня меньше чем мостов. Речь шла о домашнем тестовом сервере, нормального свича пока нет и все vlan'ы реализованы внутри сервера в виде отдельных мостов с форвардингом и iptables.

Кстати, раньше я во все мосты добавлял dummy, потом мне показалось удобнее от них избавиться. Теперь я понял свою ошибку :)

router ★★★★★ ()
Ответ на: комментарий от mironov_ivan

if the bridge's MAC address is forced to a specific value, the bridge «remembers» that and makes the address permanent.

Работает, спасибо. Загрузил модуль dummy ( numdummies=10 ), добавил dummy3 в br3 и поменял mac, теперь виртуалки включаются и выключаются без проблем.

router ★★★★★ ()

маком бриджа берется самый низкий по значению мак из прицепленных интерфейсов. именно поэтому либвирт поднимает свои tap-ы с маками начинающимися на FE (сам баг открывал пару лет назад).

dyasny ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.