Bridged networking in linux

Network bridge

A bridge is a piece of software used to unite two or more network segments. A bridge behaves like a virtual network switch, working transparently (the other machines do not need to know about its existence). Any real devices (e.g. eth0 ) and virtual devices (e.g. tap0 ) can be connected to it.

This article explains how to create a bridge that contains at least an ethernet device. This is useful for things like the bridge mode of QEMU, setting a software based access point, etc.

Contents

Creating a bridge

There are a number of ways to create a bridge.

With iproute2

This section describes the management of a network bridge using the ip tool from the iproute2 package, which is required by the base meta package.

Create a new bridge and change its state to up:

To add an interface (e.g. eth0) into the bridge, its state must be up:

Adding the interface into the bridge is done by setting its master to bridge_name :

To show the existing bridges and associated interfaces, use the bridge utility (also part of iproute2 ). See bridge(8) for details.

This is how to remove an interface from a bridge:

The interface will still be up, so you may also want to bring it down:

To delete a bridge issue the following command:

This will automatically remove all interfaces from the bridge. The slave interfaces will still be up, though, so you may also want to bring them down after.

With bridge-utils

This section describes the management of a network bridge using the legacy brctl tool from the bridge-utils package, which is available in the official repositories. See brctl(8) for full listing of options.

Create a new bridge:

Add a device to a bridge, for example eth0 :

Show current bridges and what interfaces they are connected to:

Set the bridge device up:

Delete a bridge, you need to first set it to down:

With netctl

With systemd-networkd

With NetworkManager

GNOME’s Network settings can create bridges, but currently will not auto-connect to them or slave/attached interfaces. Open Network Settings, add a new interface of type Bridge, add a new bridged connection, and select the MAC address of the device to attach to the bridge.

KDE’s plasma-nm can create bridges. In order to view, create and modify bridge interfaces open the Connections window either by right clicking the Networks applet in the system tray and selecting Configure Network Connections. or from System Settings > Connections. Click the Configuration button in the lower left corner of the module and enable «Show virtual connections». A session restart will be necessary to use the enabled functionality.

nm-connection-editor can create bridges in the same manner as GNOME’s Network settings.

nmcli from networkmanager can create bridges. Creating a bridge with STP disabled (to avoid the bridge being advertised on the network):

Making interface enp30s0 a slave to the bridge:

Setting the existing connection as down (you can get it with nmcli connection show —active ):

Setting the new bridge as up:

If NetworkManager’s default interface for the device you added to the bridge connects automatically, you may want to disable that by clicking the gear next to it in Network Settings, and unchecking «Connect automatically» under «Identity.»

Assigning an IP address

This article or section needs expansion.

When the bridge is fully set up, it can be assigned an IP address:

With iproute2

With NetworkManager

Give it the desired address:

Set up a DNS server (this will also avoid not being able to load any pages after you apply the changes):

Set the IP address to static:

Apply the changes:

Tips and tricks

Wireless interface on a bridge

To add a wireless interface to a bridge, you first have to assign the wireless interface to an access point or start an access point with hostapd. Otherwise the wireless interface will not be added to the bridge.

Speeding up traffic destinated to the bridge itself

In some situations the bridge not only serves as a bridge box, but also talks to other hosts. Packets that arrive on a bridge port and that are destinated to the bridge box itself will by default enter the iptables INPUT chain with the logical bridge port as input device. These packets will be queued twice by the network code, the first time they are queued after they are received by the network device. The second time after the bridge code examined the destination MAC address and determined it was a locally destinated packet and therefore decided to pass the frame up to the higher protocol stack.[1]

The way to let locally destinated packets be queued only once is by brouting them in the BROUTING chain of the broute table. Suppose br0 has an IP address and that br0’s bridge ports do not have an IP address. Using the following rule should make all locally directed traffic be queued only once:

The replies from the bridge will be sent out through the br0 device (assuming your routing table is correct and sends all traffic through br0), so everything keeps working neatly, without the performance loss caused by the packet being queued twice.

The redirect target is needed because the MAC address of the bridge port is not necessarily equal to the MAC address of the bridge device. The packets destinated to the bridge box will have a destination MAC address equal to that of the bridge br0, so that destination address must be changed to that of the bridge port.

Troubleshooting

No networking after bridge configuration

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

It may help to remove all IP addresses and routes from the interface (e.g. eth0 ) that was added to the bridge and configure these parameters for the bridge instead.

First of all, make sure there is no dhcpcd instance running for eth0 , otherwise the deleted addresses may be reassigned.

Remove address and route from the eth0 interface:

Now IP address and route for the earlier configured bridge must be set. This is usually done by starting a DHCP client for this interface. Otherwise, consult Network configuration for manual configuration.

No networking on hosted servers after bridge configuration

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Источник

Ubuntu Documentation

Bridging Ethernet Connections (as of Ubuntu 16.04)

These instructions work for current Ubuntu versions as of this writing.

NOTE: Bridging is popular, and so it has reference material in several places that may not all be updated at once. These are the links I know of;

KVM Networking — Network configuration for the KVM virtual machines server.

Installing bridge utilities — A similar page from a Bridge-Utils point of view.

This covers how to bridge connections using the package bridge-utils. It is assumed that the bridging computer is not directly connected to the Internet. This article contains information from several sources, including;

Please visit these sites if you need a more in-depth discussion of network bridges and the commands used here.

Why bridge?

It is possible to «bridge» two Ethernet adapters together (for example, eth0 and eth1). When you bridge two Ethernet networks, the two networks become one single (larger) Ethernet network.

Читайте также:  С windows system32 wat

One reason you would bridge Ethernet connections is to monitor traffic flowing across an Ethernet cable. For example, an inline sniffer to monitor the traffic flowing between these two devices, such as a router and the switch. (Using tools like ntop, Wireshark, and tcpdump.)

How to bridge? (short version)

The Debian wiki provides a good overview of how to use brctl and the /etc/network/interfaces file to create and set up bridges. Typing man bridge-utils-interfaces at a command prompt provides additional detail.

You can set up a simple Ethernet bridge by installing bridge-utils placing this text into /etc/network/interfaces file:

Using auto br0 ensures that the bridge starts when the computer reboots, and using iface br0 inet dhcp provides the computer with its own IP address on the single (larger) Ethernet network.

You will note that auto eth0 and iface eth0 inet manual are not in the file. This is because br0 will bring up the components assigned to it.

Once you have edited the /etc/network/interfaces file, it may be easiest to reboot your computer to turn on the bridging. (It is possible to start the bridge without rebooting or logging out, but you may have some problems with the Network Connection Manager interfering with your settings.)

Bridging Ethernet Connections from the GUI

As of Ubuntu 15.04 you can bridge from the desktop using network manager. This is covered in a website at ask.xmodulo.com/configure-linux-bridge-network-manager-ubuntu.html.

Bridging Ethernet Connections (Step by step)

You will need to know the following information;

Your interface name. This used to be eth0 or eth1, but now we have Predictable Network Interface Names which means they could be eth0, p3p1, p2p1, enp9s0, wlp9s0, or eno16777728. (Yes, those are all real examples. Do an ifconfig from the cli to find out what Ubuntu is actually calling your nics.

  • Your IP address, subnet mask, gateway and DNS. (If not using dhcp)
  • Information about your network. (Specifically if a loop could ever be formed.)
  • Installing bridge-utils

    If you use sudo -i and enter your password, then you will not have to use sudo before each command. It may also save you some typing in the future.

    Automatically Create the Bridge at Start-up

    The above setup demonstrated how to create a bridge using the command line, however when you restart your computer you will lose it. To prevent this from happening, we need to edit the /etc/network/interfaces file. This file shows an example of a bridge configure via dhcp.

    Sample /etc/network/interfaces file

    bridge_stp off is a setting for spanning tree. If you have a possibility for network looks, you may want to turn this on.

    bridge_fd 0 turns off all forwarding delay. If you do not know what this is, you probably do not need it.

    bridge_maxwait 0 is how long the system will wait for the Ethernet ports to come up. Zero is no wait.

    Manually Setting up the Bridge

    If you do not want to use your bridge all the time (or if you do not want to break Network Manager for the times when you are not bridging) you can build a bridge by hand. Or you can script it to bring up your bridge on demand.

    Ensure that both (or all) of your interfaces are installed and enabled. If they are then you may proceed at this point. For a few moments, if your computer is connected to the Internet then it will be disconnected temporarily.

    Open a terminal and use the following commands. Note that when interfaces are referenced, they refer to device names assigned by Linux such as «eth0» and «eth1». A bridge can be anything, but a simple name like bridge0 or br0 is suggested.

    In lines 1-2 we simply prepared the devices to be bridged. In line 3, we added a new bridge named myBridge (whatever you named your bridge). In lines 4-5, we added interface1 and interface2 to myBridge. In line 6, we made the bridge operational. For more information on commands: use the Konsole command brctl

    Manually creating the routing

    If you manually created the bridge above, you will also need to manually give it IP address information. If you are using DHCP, running sudo dhclient br0 will get your interface up and running. If not, it is all manual.

    At this point you may also want to see http://linux-net.osdl.org/index.php/Bridge at this point for a more in depth explanation of bridges and other commands within brctl.

    Contributors

    Websites

    Editors can add any website they find that are related to this article or that they used to add to this article.

    Users

    Editors post their name/username and some form of contact.

    Jonte Craighead, JonTec on #(K)ubuntu IRC Channel

    [JonTec’s reference]: sethk on #ubuntu IRC Channel

    Additions

    13.Aug.06: JonTec: There was an error inside my bridge setup commands that would prevent you from adding interfaces to the bridge. I have fixed this error.

    2.Nov.06 JackWasey: Is this possible between ethernet and Firewire connections? If not, what is the appropriate method?

    4.Sep.12 griffin2: Added section on Ubuntu 12.04.

    14.Apr.16 Lee Sharp: A lot of cleanup and realignment with other pages.

    NetworkConnectionBridge (последним исправлял пользователь leesharp 2016-04-15 03:40:47)

    The material on this wiki is available under a free license, see Copyright / License for details
    You can contribute to this wiki, see Wiki Guide for details

    Источник

    Для системного администратора

    Сетевой мост в Linux, он же Linux Bridge.

    Бридж (англ. bridge, мост) – это способ соединения двух сегментов Ethernet на канальном уровне, т.е. без использования протоколов более высокого уровня, таких как IP. Пакеты передаются на основе Ethernet-адресов, а не IP-адресов (как в маршрутизаторе). Поскольку передача выполняется на канальном уровне (уровень 2 модели OSI), все протоколы более высокого уровня прозрачно проходят через мост.

    Термины коммутатор, мост и бридж могут использоваться на данной странице как взаимознаменяемые.

    Код bridge в Linux является частичной реализацией стандарта ANSI/IEEE 802.1d. Впервые бриджинг в Linux появился в 2.2, затем код был переписан Леннертом Буйтенхеком (Lennert Buytenhek). Код bridge интегрирован в ядра серий 2.4 и 2.6.

    Коммутация и фильтрация

    Linux-мосты более мощные чем простые аппаратные мосты и коммутаторы, поскольку они могут ещё фильтровать и регулировать трафик. Комбинация коммутатора и брандмауэра выполняется с помощью родственного проекта ebtables.

    Состояние

    Код обновляется как часть ядра Linux 2.4 и 2.6, доступного на kernel.org.

    Возможные будущие усовершенствования:

    • Описать фильтрацию STP
    • Использовать Netlink interface для управление бриджами (прототип в 2.6.18)
    • Добавить поддержку в user space
    • Сделать поддержку RSTP и других расширений 802.1d STP

    Скачивание

    Поддержка бриджинга есть в текущих ядрах 2.4 и 2.6 всех основных дистрибутивов Linux. Требуемый комплект утилит для администрирования bridge-utils есть практически во всех дистрибутивах.

    Инсталляция утилит выполняется стандартным для дистрибутива способом. Например, в Debian GNU/Linux:

    # apt-get install bridge-utils

    Как вариант можно сделать свою самую последнюю сборку кода с kernel.org и собрать утилиты bridge-utils из GIT-репозитория.

    $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git
    $ cd bridge-utils
    $ autoconf
    $ ./configure

    Ручная конфигурация

    Перед тем как вы приступите к настройке коммутатора, убедитесь, что сетевые карты работают нормально. Не устанавливайте на них IP-адресов, и не позволяйте начальным скриптам выполнять DHCP-запрос с них. IP-адреса должны устанавливаться уже после того как бридж сконфигурирован.

    Команда ifconfig должна показывать обе (или больше, если их больше) сетевые карты, и они должны быть выключены, т.е. находиться в состоянии DOWN.

    В большинстве случаев код коммутатора оформляется в виде модуля. Если модуль сконфигурирован и установлен корректно, он автоматически загружается при первом вызове команды brctl.

    Если ваши утилиты bridge-utilities корректно установлены, и ядро и его модуль bridge в порядке, вызовом команды brctl можно будет просмотреть маленькую сводку о синтаксисе команды:

    Создание и удаление коммутатора

    brctl addbr «bridgename»

    создаёт экземпляр логического коммутатора с именем bridgename. Для того чтобы выполнять коммутацию пакетов, нужно создать хотя бы один коммутатор . Можно воспринимать логический бридж как контейнер интерфейсов, принимающих участие в коммутации. Каждый экземпляр коммутатора представлен новым сетевым интерфейсом.

    Читайте также:  Komorebi linux что это

    Соответствующая команда для удаления коммутатора:

    brctl delbr bridgename

    Включение устройства в коммутатор

    brctl addif bridgename device

    включает сетевое устройство device в коммутатор с именем “bridgename.” Все устройства, включенные в один бридж работают как одна большая сеть. Нельзя добавить устройство в несколько бриджей одновременно, поскольку это не имеет никакого смысла. Коммутатору потребуется небольшое время после того как устройство подключено, для того чтобы узнать его Ethernet-адрес, а затем он начинает делать перенаправление (forward).

    Соответствующая команда для выключения устройства из коммутатора:

    brctl delif bridgename device

    Просмотр устройств

    Команда brctl show показывает состояние всех работающих коммутаторов:

    # brctl addbr br549
    # brctl addif br549 eth0
    # brctl addif br549 eth1
    # brctl show
    bridge name bridge id STP enabled interfaces
    br549 8000.00004c9f0bd2 no eth0
    eth1

    Если выполнить команду brctl showmacs, будет показана информация о сетевых адресах источников трафика, прошедшего через коммутатор (и самого коммутатора тоже):

    # brctl showmacs br549
    port no mac addr is local? ageing timer
    1 00:00:4c:9f:0b:ae no 17.84
    1 00:00:4c:9f:0b:d2 yes 0.00
    2 00:00:4c:9f:0b:d3 yes 0.00
    1 00:02:55:1a:35:09 no 53.84
    1 00:02:55:1a:82:87 no 11.53
    .

    Время жизни (aging time) – это количество секунд, которое MAC-адрес будет находится в таблице forwarding database после получения пакета с этим адресом. Записи в таблице периодически удаляются по тайм-ауту, для того чтобы не получилось, что они будут находиться там вечно. В нормальной ситуации, не понадобится менять данные параметры, но это сделать можно (время указывается в секундах)

    # brctl setageing bridgename time

    Если установить время в ноль, запись становится постоянной.

    Spanning Tree Protocol

    Если используется несколько коммутаторов, для того чтобы избежать петель коммутации, нужно включить поддержку протокола Spanning Tree Protocol (Протокол остовного дерева).

    # brctl stp br549 on

    Посмотреть параметры STP можно так:

    # brctl showstp br549
    br549
    bridge id 8000.00004c9f0bd2
    designated root 0000.000480295a00
    root port 1 path cost 104
    max age 20.00 bridge max age 200.00
    hello time 2.00 bridge hello time 20.00
    forward delay 150.00 bridge forward delay 15.00
    ageing time 300.00 gc interval 0.00
    hello timer 0.00 tcn timer 0.00
    topology change timer 0.00 gc timer 0.33
    flags
    eth0 (1)
    port id 8001 state forwarding
    designated root 0000.000480295a00 path cost 100
    designated bridge 001e.00048026b901 message age timer 17.84
    designated port 80c1 forward delay timer 0.00
    designated cost 4 hold timer 0.00
    flags
    eth1 (2)
    port id 8002 state disabled
    designated root 8000.00004c9f0bd2 path cost 100
    designated bridge 8000.00004c9f0bd2 message age timer 0.00
    designated port 8002 forward delay timer 0.00
    designated cost 0 hold timer 0.00
    flags

    Настройка STP

    Конфигурироваться может несколько параметров, имеющих отношение к Spanning Tree Protocol. Код автоматически определяет скорость соединения и другие параметры, поэтому, как правило, вручную их менять не нужно.

    Приоритет коммутатора

    У каждого коммутатора есть относительный приоритет (priority) и стоимость (cost). Каждый интерфейс коммутатора ассоциируется с номером порта в коде STP. У каждого есть приоритет и стоимость, на основе которых принимается решение о том, какой путь для передчи пакета является кратчайшим. Всегда используется путь с наимеьшей стоимостью (за исключением случая, когда этот путь разорван). Если у вас несколько коммутаторов и интерфейсов, может понадобиться отрегулировать приоритеты, чтобы достичь максимальной производительности.

    # brctl setbridgeprio bridgename priority

    Бридж с наименьшим приоритетом избирается как корневой. Корневой бридж является центром остовного дерева (spanning tree) коммутационных связей.

    Приоритет и стоимость

    У каждого интерфейса моста может быть своя собственная скорость, и её значение используется при выборе какое соединение должно использоваться. У более быстрых интерфейсов должна быть более низкая стоимость.

    # brctl setpathcost bridge port cost

    Для разных портов, имеющих одинаковую стоимость существует ещё приоритет.

    Задержка передачи (Forwarding delay)

    Задержка передачи (forwarding delay) это время в течение которого порт находится в состояниях Listening и Learning, прежде чем перейти в состояние Forwarding. Это время нужно для того чтобы мост, когда он включается в сеть, сначала должен ознакомиться с трафиком, прежде чем включаться в работу.

    # brctl setfd bridgename time

    Время Hello

    Время от времени корневой мост (Root Bridge) и выделенные мосты (Designated Bridges) отправляют пакет hello. Пакеты hello нужны для обмена информацией о топологии все коммутироемой локальной сети.

    # brctl sethello bridgename time

    max age – таймаут hello

    Если другой коммутатор в дереве spanning tree не отправляет пакет hello в течение долгого времени, считается, что он не в порядке (dead). Таймаут устанавливается командой:

    # brctl maxage bridgename time

    Пример настройки

    Базовая настройка моста выполняется так:

    # ifconfig eth0 0.0.0.0
    # ifconfig eth1 0.0.0.0
    # brctl addbr mybridge
    # brctl addif mybridge eth0
    # brctl addif mybridge eth1
    # ifconfig mybridge up

    Хост настраивается как обычный мост. У него самого нет IP-адреса, поэтому к нему нельзя получить доступ (или взломать) удалённо по TCP/IP. Опционально можно настроить виртуальный интерфейс mybridge на доступ по локальной сети. Он будет работать как обычный интерфейс – как сетевая карта. Процесс настройки полностью совпадает с вышеописанным, за тем исключением, что нужно заменить последнюю команду на такую:

    # ifconfig mybridge 192.168.100.5 netmask 255.255.255.0

    Если вы хотите чтобы мост автоматически получал IP-адрес у ADSL-модема по DHCP (или в другой похожей ситуации), сделайте так:

    # ifconfig eth0 0.0.0.0
    # ifconfig eth1 0.0.0.0
    # brctl addbr mybridge
    # brctl addif mybridge eth0
    # brctl addif mybridge eth1
    # dhclient mybridge

    Если делать это много раз, процессов dhclient может расплодиться великое множество. Или безжалостно убейте их, или почитайте об omshell.

    Конфигурирование через /etc/net

    Сначала в /etc/net настраиваются два ethernet-устройства port0 и port1:
    # cat >> /etc/net/iftab
    port0 mac 00:13:46:66:01:5e
    port1 mac 00:13:46:66:01:5f
    ^D
    # mkdir /etc/net/ifaces/port0
    # cat > /etc/net/ifaces/port0/options
    TYPE=eth
    MODULE=via-rhine
    # mkdir /etc/net/ifaces/port1
    # cat > /etc/net/ifaces/port1/options
    TYPE=eth
    MODULE=via-rhine
    ^D

    После этого описывается мост:

    # mkdir /etc/net/ifaces/mybridge
    # cat > /etc/net/ifaces/mybridge/options
    TYPE=bri
    HOST=’port0 port1′
    ^D
    # cat > /etc/net/ifaces/mybridge/brctl
    stp AUTO on
    ^D

    После этого можно поднять бридж командой ifup mybridge. Устройства port0 и port1 поднимутся автоматически.

    FAQ

    Что делает мост/коммутатор?
    Мост прозрачно пересылает трафик между несколькими сетевыми интерфейсами. На простом языке это означает, что коммутатор соединяет два или более интерфейсов Ethernet между собой, для того чтобы получилась большая Ethernet-сеть.

    Это как-то зависит от используемых протоколов?
    Нет. Коммутатор ничего не знает о протоколах высокого уровня, он только видит кадры Ethernet. Поэтому функциональность моста является протоколонезависимой и проблем с передачей протоколов таких как IPX, NetBEUI, IP, IPv6 и других быть не должно.

    Чем этот код лучше чем аппаратный коммутатор?
    Пожалуйста, имейте в виду, что этот код не писался с целью заменить Linux-боксами выделенное сетевое оборудование. Не надо воспринимать Linux с этим кодом как замену аппаратным коммутаторам. Это скорее расширение сетевых возможностей Linux. Как бывает, что Linux-маршрутизатор лучше чем аппаратный маршрутизатор (и наоборот), есть ситуации, когда Linux-мост лучше чем выделенный мост (и наоборот).

    Основная сила кода моста Linux это его гибкость. И так есть уже огромнейшее количество всяких интересных вещей, которые можно делать с Linux, и мосты – ещё одно добавление к этой гремучей смеси. Одним из главных преимуществ решения, базирующегося на Linux, в сравнении с выделенным коммутатором являются разнообразные возможности по фильтрации трафика. Можно использовать всю функциональность netfilter (iptables) в комбинации с мостами, что даёт больший функционал, чем проприетарные решения.

    Чем этот код хуже чем аппаратный коммутатор?
    Для того чтобы работать в качестве моста, устройство должно быть переведено в неразборчивый (promiscuous) режим, в котором оно получает весь трафик, приходящий на интерфейс. В действительно загруженных сетях, это может занять значительную часть процессора, замедляя работу системы. Выход – или использовать выделенную Linux-систему в качестве моста или использовать аппаратный коммутатор.

    Моего моста не видно в трассе traceroute’а!
    И не должно быть видно. Работа моста является полностью прозрачной для сети (по крайней мере должна); сети, которые мост соединяет между собой должны видеться как одна большая сеть. Именно поэтому мост и не виден в traceroute; пакеты и не думают о том, что они пересекают границы подсети.

    Ничего не работает!
    Когда я пытаюсь добавить мост, система говорит: “br_add_bridge: bad address”!
    Или ваше ядро слишком старое (2.2 или более ранее), или вы забыли включить поддержку бриджей в ядро.

    Работает ли бриджинг на ядре 2.2?
    Изначально разработка велась на 2.2, есть патчи для этого ядра. Но сейчас эти патчи уже не поддерживаются и не развиваются.

    Читайте также:  Как лучше устанавливать windows 10 uefi или legacy

    Есть ли в планах поддержка RSTP (802.1w)?
    Да. Ведётся работа по включению поддержки RSTP в будущий релиз для ядра 2.6. Код делался для ядра 2.4 и нуждается в доработке, тестировании и обновлении.

    Что можно соединять с помощью моста?

    Мосты Linux очень гибкие; можно соединять как традиционные ethernet-устройства, так и псевдоустройства такие как PPP, VPN или VLAN’ы.

    Ограничения, которые накладываются на соединяемые устройства:

    • У всех должен быть одинаковый максимальный размер пакета (MTU). Мост не выполняет фрагментирование пакетов.
    • Устройства должны выглядеть как Ethernet, т.е. у них должны быть 6-байтные адреса отправителя и получателя.
    • Должен поддерживаться неразборчивый (promiscuous) режим. Мост должен получать не только трафик, адресованный ему, но и весь сетевой трафик.
    • Должен быть разрешён спуфинг адресов. У моста должна быть возможность отправлять данные по сети, как если бы они пришли от другого хоста.

    Можно ли выполнять коммутацию в сочетании с netfilter/iptables?
    Да. Соответствующий код включен в большинство ядер. Смотрите проект ebtables.

    Работает ли он с Token Ring, FDDI и Firewire?
    Нет. У этих протоколов отличается адресация и размер кадра.

    Я продолжаю получать сообщение retransmitting tcn bpdu!
    Это означает, что ваш Linux-мост ретранслирует сообщение Topology Change Notification Bridge Protocol Data Unit (теперь хотя бы известно, что означают эти хитрые буквы :). Если серьёзно, это означает что где-то есть коммутатор (или другой Linux-мост), который не согласен с правилами STP.

    В каждой коммутируемой сети есть один “главный коммутатор”, который также называется корневым (root). Какой именно мост является корневым можно узнать с помощью brctl.

    Когда топология коммутируемой сети меняется (например, кто-то выдернул кабель между коммутаторами), коммутатор, который это обнаружил, отправляет сообщение корневому коммутатору. Корневой коммутатор устанавливает бит ‘topology changed’ в пакеты hello, которые будут отправляеться в течение следующих X секунд (обычно X равно 30). В результате все мосты узнают об изменении топологии, и они могут работать с учётом этого – например удалить устаревшие MAC-записи.

    После того как коммутатор отправляет сообщение об изменении топологии, он ждёт что в hello-сообщении будет установлени бит ‘”topology changed”. Если его нет (бит в данном случае играет роль подтверждения получения информации о смене топологии), коммутатор решает, что сообщение было потеряно. Поэтому пересылает сообщение повторно. Однако, в некоторых коммутаторах реализациия STP немного недоделанная, и они не отправляют подтверждение получения сообщения об изменении топологии. Если один из таких коммутаторов у вас корневой, все остальные коммутаторы будут постоянно повторно пересылать информацию об изменении топологии. В результате чего и будут появляеться такие сообщения.

    Список вещей, которые можно сделать:

    • Найти какой коммутатор является корневым, где он находится и под управлением какого программного обеспечения работает. Пожалуйста, сообщите о таком коммутаторе в список рассылки, чтобы можно было его добавить в blacklist.
    • Заставить Linux-мост быть корневым. Найдите какой приоритет у коммутатора, который сейчас является корневым, и с помощью команды brctl ‘setbridgeprio’ установите приоритет линуксового моста на 1 меньше (Мост с наименьшим приоритеом всегда становится корневым).
    • Вообще отключите STP на Linux-мосте. Только смотрите чтобы не появилось петель коммутации! Если у вас есть петли, и не работает STP, пакеты зациклятся и будут гулять по сети вечно, что сделает её нерабочей.

    Оно не работает с моей обычной ethernet-карточкой!
    К сожалению, у некоторых сетевых карт глючные драйверы, которые сбоят во время загрузки. Ситуация улучшается, поэтому может помочь установка текущего ядра и сетевых драйверов. Ещё можно попробовать устройства другого производителя.

    Пожалуйста, сообщайте обо всех проблемах в список рассылки “Bridge mailing list”: bridge@osdl.org. Если ваша сетевая карта не работает даже без бриджинга, попробуйте обратиться в список рассылки “Linux networking mailing list” linux-net@vger.kernel.org.

    Оно не работает с моей wireless-карточкой!
    Это известная проблема, и она не связана с кодом моста. Большое количество wireless-карт не позволяет делать подмену (spoofing) адреса источника. В некоторых чипсетах это ограничение на уровне прошивки (firmware). Дополнительная информация может быть найдена в архивах списков рассылки.

    Удалось ли кому-нибудь обойти проблему связанную с тем, что Wavelan не позволяет использовать никакие MAC-адреса за исключением своего собственного?

    (Отвечает Michael Renzmann, mrenzmann at compulan.de)

    99% пользователей никогда не смогут избавиться от этой проблемы. Для такой функции нужна специальная прошивка. Её нужно загрузить в память WaveLAN-карточки и тогда карточка сможет выполнять бриджинг. Но нет общедоступной документации интерфейса. Единственный выход – иметь полную версию библиотеки hcf, которая контролирует все действия карты, и в частности, доступ к памяти карты. Для получения этой библиотеки нужно убедить компанию Lucent, что это ей будет выгодно и помимо этого подписать NDA. Поэтому, скорее всего, пока Lucent не передумает, вам не удастся получить доступ к коду (а в том, что Lucent передумает есть большие сомнения).

    Если вам срочно нужна wireless-карта которая может работать в мосте, нужно использовать те, что построены на базе чипсета prism (изготавливает Harris Intersil). Драйверы для этой карты есть на www.linux-wlan.com (веб-сайт от Absoval), и в одном из сообщений говорится, что общедоступна необходимая прошивка и программа для загрузки для Linux. Если вам нужны какие-то дополнительные возможности, нужно разговаривать с Absoval.

    И всё же я не понимаю!!
    Полноценный мост для беспроводных сетей (802.11) требует поддержки WDS. В текущей реализации её нет.
    Можно сделать ограниченную функциональность с некоторыми драйверами. Для этого обязательно чтобы устройство поддерживало разные адреса отправителя и получателя. Что и обеспечивает WDS. Есть способы добиться чтобы оно заработало, но они достаточно запутанные, и их сложно понять без досконального знания 802.11, режимов его работы и формата загловка кадра.

    Я получаю ошибку ‘too much work in interrupt’

    Это связано с тем, что сетевая карта теряет пакеты. Можно попробовать несколько вещей. Во-первых, собрать драйвер с поддержкой NAPI (если он по умолчанию, не включен). NAPI делает так чтобы получал управление по программному прерыванию, не по прерыванию низкого уровня. Если драйвер не поддерживает NAPI, можно попробовать увеличить объём работы, который драйвер может делать в течение обработки прерывания. Для 3c59x это делается с помощью опции max_interrupt_work (поэтому нужно добавить опцию ‘options 3c59x max_interrupt_work=10000′ в файл /etc/modules.conf). У других сетевых карт похожие опции.

    Работает ли DHCP через/поверх моста?

    Мост передаёт DHCP-трафик (широковещательный) и ответы на него. Также можно использовать DHCP для установки локального IP-адреса на псевдо-интерфейс моста. Одна из распространённых ошибок при использовании DHCP является установка задержки передачи (forwarding delay) на порту коммутатора равной 30 секунд. При такой задержке интерфейс когда он подключился к мосту не может посылать через него данные в течении первых 30 секунд. Причина в том, что при использовании моста в сложной топологии он должен сначала обнаружить остальные мосты дабы не создавать петель. Проблема была одной из причин создания протокола Rapid Spanning Tree Protocol (RSTP).

    Если мост используется в одиночку (т.е. поблизости нет мостов) можно спокойно отключить задержку передачи (установить её равной 0) перед тем как подключать интерфейс к мосту. После этого сразу же можно вызывать dhclient:

    # brctl setfd br0 0
    # brctl addif br0 eth0
    # dhclient eth0

    Материал из Xgu.ru.
    Перевод: Игорь Чубин

    Этот пост November 9, 2007 at 8:14 pm опубликовал molse в категории Linux. Желающие могут оформить RSS подписку на комменты. Оставьте комментарий(последний комментарий отображается первым) или оставьте трэкбэк. Ccылка на трэкбэк.

    3 комментов оставлено (Add 1 more)

    Если eth0 смотрит в мир, а остальные (eth1,eth2,wlan0) внутри, есть ли разница – объединять в мост только внутренние или как в описании в мост все? Например не “вывалятся” ли все внутренние девайсы “в мир”, и как сложность в настройке фаерволла изменится в обеих случаях? Спасибо.

    Спасибо большое, помогло. НО после перезагрузки мост пропадает 0_о что посоветуете?

    Мне необходимо было сделать обычный сетевой мост наподобие в Windows. Начал искать решение… Но это было туго… На форумах куча вопросов, и если есть решения то они реализованы через прокси, или же через iptables и прочее… Но мне как новичку не удавалось настроить это дело…
    Решение нашел очень простое )))
    прописать в /etc/network/interfaces

    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet manual

    auto br0
    iface br0 inet dhcp
    bridge_ports eth0 eth1
    bridge_fd 9
    bridge_hello 2
    bridge_maxage 12
    bridge_stp off

    One Trackback

    [. ] Сетевой мост в Linux, он же Linux Bridge. [. ]

    Источник

    Оцените статью