Jump to content
Калькуляторы

Линуксовый bond и несколько из адресов linux, bond

Здравствуйте.

 

Появилась задача объединить несколько сетевых карт.

Система Дебиан.

 

 

 

auto lo
iface lo inet loopback

iface eth0 inet manual

iface eth1 inet manual

auto bond0
iface bond0 inet static
   address 10.0.1.3
   netmask 255.255.255.0
   network 10.0.1.0
   gateway 10.0.1.254
   slaves eth0 eth1
   mtu 9000
   bond_miimon 100
#        bond_mode balance-xor
   bond_mode 802.3ad
   bond-lacp-rate 1
   bond_xmit_hash_policy layer2



auto vmbr0
iface vmbr0 inet static
       address YYY.XXX.ZZZ.193
       netmask 255.255.255.0
       gateway YYY.XXX.ZZZ.1
       bridge_ports bond0
       bridge_stp off
       bridge_fd 0

 

 

 

После рестарта сети IP 10.0.1.3 не присваивается.

Присваивается только в ручном режиме.

#ifconfig bond0 inet 10.0.1.3/24

 

Но все равно нет ответа на пинг и ARP.

Хотя траффик из сети 10.0.1.0/24 на бонде виден tcpdump.

Вланов нет!

 

Вопросы:

  1. Как правильно повесить несколько IP алиасов на bond0?
  2. Как заставить работать пинг на эти IP?

 

Спасибо.

Share this post


Link to post
Share on other sites

А не факт, что на засунутый в бридж интерфейс вы можете повешать адреса. Вешайте на бридж.

 

Если же бридж не нужен - вешайте на бонд адреса (строка up ip a a addr/net dev $IFACE)

 

или так:

 

auto eth0
allow-hotplug eth0
iface eth0 inet static
   address 192.168.1.42
   netmask 255.255.255.0
   gateway 192.168.1.1

auto eth0:0
allow-hotplug eth0:0
iface eth0:0 inet static
   address 192.168.1.43
   netmask 255.255.255.0

auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
   address 192.168.1.44
   netmask 255.255.255.0

Share this post


Link to post
Share on other sites

С vmbr0 как раз работает.

 

Переводить bond0 в режим мануал?

 

iface bond0 inet manual
       up /sbin/ip link set dev bond0 mtu 9000 up
       up /sbin/ifenslave bond0 eth0 eth1
       up /sbin/ip addr add 10.0.1.3/24 brd + dev bond0

 

Не сильно хочется конвертировать все опции bond в консольные команды...

Share this post


Link to post
Share on other sites

Забудьте ifconfig - в линуксе его больше нет.

Ипы добавляются серией строчек up ip addr add

 

Из ifenslave --help:

...
      - assign an IP address to the bond device :
        # ifconfig bond0 <addr> netmask <mask> broadcast <bcast>

 

 

По второму вопросу насчет неработающих ARP запросов, а соответственно и неработающий пинг?

Share this post


Link to post
Share on other sites

В свое время столкнулся, может и вам понадобится

auto bond0.13
iface bond0.13 inet static
   address 192.168.1.150
   netmask 255.255.255.0
   up ip route add default via 192.168.1.254 table vlan13
   up ip rule add from 192.168.1.254 table vlan13 pref 113
   up ip addr add 192.168.1.1/32 dev bond0.13
   up ip addr add 192.168.1.2/32 dev bond0.13
   up ip addr add 192.168.1.3/32 dev bond0.13
   up ip addr add 192.168.1.4/32 dev bond0.13

Share this post


Link to post
Share on other sites

У вас вообще через дополнительную таблицу роутинга vlan13 назначаются.

 

Вланы по-другому назначаются на bond0:

auto bond0.103
iface bond0.103 inet manual
       vlan-raw-device bond0

или через up:

up vconfig add bond0 103
up ip link set dev bond0.103 up

 

Мне помогло вручную назначение IP адреса на vmbr0

ip addr add 10.0.1.3/24 dev vmbr0

Не совсем понятна логика, зачем еще мост использовать?

Share this post


Link to post
Share on other sites

Извините, тут кописат с действующего тазика был, на нем несколько вланов с внешними адресами и на одном из интерфейсов порядка 40 алиасов, используется для внутрених нужд.

Если делать через eth0:0 то там кажется начинается затирание адресов на интерфейсе, выход был только через if up

Share this post


Link to post
Share on other sites

Если делать через eth0:0

это еще что за анахронизм? не делайте так.

вообще, в linux сейчас всё идет к тому, что bridge-utils/ifenslave-2.6/vconfig станут не нужными(они и сейчас уже).

всё управляется через iproute2.

 

 

Но все равно нет ответа на пинг и ARP.

Хотя траффик из сети 10.0.1.0/24 на бонде виден tcpdump.

не будет работать. вешайте адреса на сам bridge(в вашем случае vmbr0)

 

или через up:

up vconfig add bond0 103
up ip link set dev bond0.103 up

 

лучше так:

 

ip link add link eth0 name vlan122 type vlan id 122

 

на eth0 вешается vlan с vid=122 и именем интерфейса vlan122. имя может быть произвольным.

Share this post


Link to post
Share on other sites

Не сильно хочется конвертировать все опции bond в консольные команды...

Зачем все? Сугубо добавление доп. адресов.

 

Не совсем понятна логика, зачем еще мост использовать?

Т.е. вы создали мост, включили в него бондинг, и просите других объяснить зачем вы это сделали? 0_о

 

это еще что за анахронизм? не делайте так.

Не анахронизм, а создание алиасов штатными средствами дистрибутива.

Share this post


Link to post
Share on other sites

это еще что за анахронизм? не делайте так.

Не анахронизм, а создание алиасов штатными средствами дистрибутива.

 

The above configuration is the previous traditional method that reflects the traditional use of ifconfig to configure network devices. ifconfig has introduced the concept of aliased or virtual interfaces. Those types of virtual interfaces have names of the form interface:integer and ifconfig treats them very similarly to real interfaces.

 

Nowadays ifupdown uses ip utility from the iproute2 package instead of ifconfig. The newer ip utility does not use the same concept of aliases or virtual interfaces. However, it supports assigning arbitrary names to the interfaces (they're called labels). ifupdown uses this feature to support aliased interfaces while using ip.

 

отсюда

 

т.е. старая схема была от убогости ifconfig и хардкода 1 интерфейс - 1 адрес.

 

на самом деле можно сделать так, что адреса нигде на интерфейсе нет, но система этот адрес считает локальным.

Share this post


Link to post
Share on other sites

Не анахронизм, а создание алиасов штатными средствами дистрибутива.

 

Если хочется действовать в концепции штатных средств, то лучше сделать как-то так:

 

/etc/network/if-up.d/ip_aliases:

#!/bin/sh

NETW_DIR=/usr/local/etc/network

if [ -z "${PHASE}" ]; then
 echo this script should be started as interface script
 exit 0
fi

test ${PHASE} = post-up || exit 0

# Try to add IP v4 or v6 to interface
if [ -f ${NETW_DIR}/${IFACE}_addr.lst ]; then
 grep -v ^"#" ${NETW_DIR}/${IFACE}_addr.lst | while read inet_ad oth; do
   ip addr add $inet_ad dev ${IFACE}
 done
fi

 

Ну и потом добавляем нужный файл:

 

/usr/local/etc/network/eth0_addr.lst:

192.168.1.15
192.168.1.16
192.168.1.17
192.168.1.18
192.168.1.19
192.168.1.20
192.168.1.21

Share this post


Link to post
Share on other sites

Не сильно хочется конвертировать все опции bond в консольные команды...

Зачем все? Сугубо добавление доп. адресов.

 

Up и post-up - костыли, когда штатные средства свойств объекта (bond) не работают.

 

Не совсем понятна логика, зачем еще мост использовать?

Т.е. вы создали мост, включили в него бондинг, и просите других объяснить зачем вы это сделали? 0_о

 

Хорошо, перефразирую по-другому.

Почему вложенный объект vmbr блокируют добавление других свойств (алиасов IP) родительского объекта (bond0)?

Почему вложенные объекты bond0 и vmbr0 не наследуют родительские свойства (qlen 10000 и qdisc mq) объектов eth0 и eth1?

Почему вложенный объект vmbr не наследует родительские свойства (state UP) объекта bond0 ?

 

P.S. У меня стойкое ощущение, что в ip только сделали косметические улучшения и добавили функционал нескольких утилит.

Share this post


Link to post
Share on other sites

Почему там вообще должно быть наследование?

 

Должно наследоваться и при необходимости меняться, в меньшую сторону.

Раздел ООП - наследование :)

Share this post


Link to post
Share on other sites

т.е. старая схема была от убогости ifconfig и хардкода 1 интерфейс - 1 адрес.

 

таки да, там ниже пример есть как это правильно делать сейчас:

 

auto eth0
allow-hotplug eth0
iface eth0 inet static
   address 192.168.1.42
   netmask 255.255.255.0
   gateway 192.168.1.1

iface eth0 inet static
   address 192.168.1.43
   netmask 255.255.255.0

iface eth0 inet static
   address 192.168.1.44
   netmask 255.255.255.0

 

Если хочется действовать в концепции штатных средств, то лучше сделать как-то так:

с каких это пор велосипед с квадратными колесами уже стал штатным средством? :)

штатное средство - выше.

 

Почему вложенный объект vmbr блокируют добавление других свойств (алиасов IP) родительского объекта (bond0)?

Да потому, что на физические интерфейсы моста никто в здравом уме ип вешать не будет, и работать оно в общем случае не должно.

 

Почему вложенные объекты bond0 и vmbr0 не наследуют родительские свойства (qlen 10000 и qdisc mq) объектов eth0 и eth1?

А почему они должны что-либо наследовать?

Интерфейс создается вообще отдельно, при загрузке модуля. А потом уже ему добавляются подчиненные интерфейсы.

 

Почему вложенный объект vmbr не наследует родительские свойства (state UP) объекта bond0 ?

См. выше.

 

P.S. У меня стойкое ощущение, что в ip только сделали косметические улучшения и добавили функционал нескольких утилит.

Открою секрет: что ip, что ifconfig, что прочие утилиты - обвязка системных вызовов. И ничего из того, о чем их не просят, они делать не будут и не должны. Не винда же, где пользователю по умолчанию тыкается соска, правда не всегда в нужное место :)

Share this post


Link to post
Share on other sites

Должно наследоваться и при необходимости меняться, в меньшую сторону.

Раздел ООП - наследование :)

 

Объектно-ориентированное программирование. А что вы программируете?

 

Если хочется действовать в концепции штатных средств, то лучше сделать как-то так:

с каких это пор велосипед с квадратными колесами уже стал штатным средством? :)

штатное средство - выше.

 

Коллега, ну вы уж штатные средства с концепцией не путайте. :) Концепция позволяет навесить 2-5 сотен адресов без излишнего раздувания единого конфигурационного файла через предусмотренный штатными средствами скриптовый механизм.

Edited by vop

Share this post


Link to post
Share on other sites

 

Почему вложенный объект vmbr блокируют добавление других свойств (алиасов IP) родительского объекта (bond0)?

Да потому, что на физические интерфейсы моста никто в здравом уме ип вешать не будет, и работать оно в общем случае не должно.

Отделим мух от котлет.

И на объединенном линке (bond) и на мосте (vmbr) могут быть IP.

Вот, виртуалки и KVM и OpenVZ требуют явно указанного моста для "проброса" вовнутрь сетевой карты.

 

Почему вложенные объекты bond0 и vmbr0 не наследуют родительские свойства (qlen 10000 и qdisc mq) объектов eth0 и eth1?

А почему они должны что-либо наследовать?

Интерфейс создается вообще отдельно, при загрузке модуля. А потом уже ему добавляются подчиненные интерфейсы.

Нет. Создается пустая оболочка bond и в нее уже "заталкиваются" подчиненные интерфейсы со своими свойствами. После добавления этих интерфейсов пропущена логика применения этих свойств на bond и последующих объектов. В результате в интернете куча хаутушек, как оттюнинговать физические интерфейсы, но ни чего не сказано о других объектах - мостах, объединенных интерфейсах и вланах.

 

Почему вложенный объект vmbr не наследует родительские свойства (state UP) объекта bond0 ?

См. выше.

Не-а.

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

 

P.S. У меня стойкое ощущение, что в ip только сделали косметические улучшения и добавили функционал нескольких утилит.

Открою секрет: что ip, что ifconfig, что прочие утилиты - обвязка системных вызовов. И ничего из того, о чем их не просят, они делать не будут и не должны. Не винда же, где пользователю по умолчанию тыкается соска, правда не всегда в нужное место :)

 

Я хотел потроллить предыдущего оратора :)

За то, что Кузнецов в свое время переделал сетевой стек Линукса - честь и хвала, но много времени прошло и осталось много подводных камней.

 

И я не рекламирую Netgraph :)

 

Должно наследоваться и при необходимости меняться, в меньшую сторону.

Раздел ООП - наследование :)

 

Объектно-ориентированное программирование. А что вы программируете?

 

Я программирую сеть. В данном случае для ноды кластера виртуалок. Причем эта нода должна понимать LACP, NFS и iSCSI не только для 1G интерфейсов, но и 10G.

А там свой тюнинг как внутри ДЦ, так и вне ДЦ.

Share this post


Link to post
Share on other sites

И на объединенном линке (bond) и на мосте (vmbr) могут быть IP.

быть они могут, но это ещё ничего не значит.

по разным причинам.

 

Вообще, в случае с bridge стоит посмотреть сюда в правый нижний угол и увидеть что код бриджа вызывается чуть ли не сразу в netif_receive_skb()

 

Нет. Создается пустая оболочка bond и в нее уже "заталкиваются" подчиненные интерфейсы со своими свойствами.

это не так.

 

 

root@rgs0:~# ip link add name lagg0 txqueuelen 8192 numtxqueues 4 numrxqueues 4 type bond mode balance-rr xmit_hash_policy layer3+4
root@rgs0:~# ifconfig lagg0
lagg0     Link encap:Ethernet  HWaddr 06:4a:09:b5:7f:47  
         BROADCAST MASTER 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:8192 
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@rgs0:~# ls /sys/class/net/lagg0/queues/
rx-0  rx-1  rx-2  rx-3	tx-0  tx-1  tx-2  tx-3
root@rgs0:~#

 

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

вы сначала определите что такое "добавлении на мост IP адресов"

Share this post


Link to post
Share on other sites

И на объединенном линке (bond) и на мосте (vmbr) могут быть IP.

Ну вы сами же убедились, что не могут, не работает :)

 

После добавления этих интерфейсов пропущена логика применения этих свойств на bond и последующих объектов.

А с какой радости что-либо должно применяться? С какой радости qdisc со всеми дочерними классами должен удаляться и заменяться таким же, как на подчиненном интерфейсе???

 

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

Какие такие состояния поднимать?

Этот конфиг же у вас поднимает бридж и ип на нем:

auto vmbr0
iface vmbr0 inet static
       address YYY.XXX.ZZZ.193
       netmask 255.255.255.0
       gateway YYY.XXX.ZZZ.1
       bridge_ports bond0
       bridge_stp off
       bridge_fd 0

Share this post


Link to post
Share on other sites

>> Почему вложенные объекты bond0 и vmbr0 не наследуют родительские свойства (qlen 10000 и qdisc mq) объектов eth0 и eth1?

 

удивлён такому вопросу от ТС, у меня стойкое ощущение, что об этом написано на каждом углу.

или это такой изящный троллинг?

 

а если порассуждать почему так... С одной стороны тот же микротик наследует.

с другой стороны в бондинг/бридж вы добавляете объект из 2го уровня модели OSI, т.о. наследовать свойства 3го уровня - неоднозначное решение.

Share this post


Link to post
Share on other sites

Какие такие состояния поднимать?

Этот конфиг же у вас поднимает бридж и ип на нем:

auto vmbr0
iface vmbr0 inet static
       address YYY.XXX.ZZZ.193
       netmask 255.255.255.0
       gateway YYY.XXX.ZZZ.1
       bridge_ports bond0
       bridge_stp off
       bridge_fd 0

 

2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP qlen 10000
   link/ether 00:30:48:c9:f9:40 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP qlen 10000
   link/ether 00:30:48:c9:f9:40 brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP qlen 10000
   link/ether 00:30:48:c9:f9:40 brd ff:ff:ff:ff:ff:ff
5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UNKNOWN qlen 10000
...

 

state UNKNOWN очень смущает.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.