xg-scale

view bridge.tex @ 0:4730a0d07d88

Исходники курса после первого прочтения.
Правки (которых должно быть много),
ещё пока не вносились.
author Igor Chubin <igor@chub.in>
date Tue Jul 01 16:16:44 2008 +0300 (2008-07-01)
parents
children
line source
1 \section{Программный мост в Linux}
3 \textbf{Бридж} (англ. \textit{bridge}, мост) — это способ соединения двух сегментов Ethernet на канальном уровне, т.е. без использования протоколов более высокого уровня, таких как IP. Пакеты передаются на основе Ethernet-адресов, а не IP-адресов (как в маршрутизаторе). Поскольку передача выполняется на канальном уровне (уровень 2 модели OSI), все протоколы более высокого уровня прозрачно проходят через мост.
5 Термины коммутатор, мост и бридж могут использоваться на данной странице как взаимознаменяемые.
7 Код bridge в Linux является частичной реализацией стандарта \htmladdnormallinkfoot{ANSI/IEEE 802.1d}{http://standards.ieee.org/getieee802/}.
8 Впервые бриджинг в Linux появился в 2.2, затем код был переписан
9 Леннертом Буйтенхеком (Lennert Buytenhek).
10 Код bridge интегрирован в ядра серий 2.4 и 2.6.
12 \subsection{Коммутация и фильтрация}
13 Linux-мосты более мощные чем простые аппаратные мосты и коммутаторы,
14 поскольку они могут ещё фильтровать и регулировать трафик.
15 Комбинация коммутатора и брандмауэра выполняется с помощью
16 родственного проекта
17 ebtables.
19 \subsection{Состояние}
20 Код обновляется как часть ядра Linux 2.4 и 2.6, доступного на kernel.org.
22 Возможные будущие усовершенствования:
23 \begin{itemize}
24 \item Описать фильтрацию STP
25 \item Использовать Netlink interface для управление бриджами (прототип в 2.6.18)
26 \item Добавить поддержку в user space
27 \item Сделать поддержку RSTP и других расширений 802.1d STP
28 \end{itemize}
30 \subsection{Скачивание}
31 Поддержка бриджинга есть в текущих ядрах 2.4 и 2.6
32 всех основных дистрибутивов Linux. Требуемый комплект утилит для администрирования
33 \textit{bridge-utils} есть практически во всех дистрибутивах.
35 Инсталляция утилит выполняется стандартным для дистрибутива способом.
36 Например, в Debian GNU/Linux:
37 \begin{verbatim}
38 # apt-get install bridge-utils
39 \end{verbatim}
41 Исходный код последнего релиза утилит можно получить со \htmladdnormallinkfoot{этой}{http://sourceforge.net/project/showfiles.php?group\_id=26089} страницы.
43 Как вариант можно сделать свою самую последнюю сборку кода
44 с kernel.org
45 и собрать утилиты bridge-utils из GIT-репозитория.
47 \begin{verbatim}
48 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git
49 $ cd bridge-utils
50 $ autoconf
51 $ ./configure
52 \end{verbatim}
54 \subsection{Ручная конфигурация}
55 \subsubsection{Сетевые карты}
56 Перед тем как вы приступите к настройке коммутатора, убедитесь,
57 что сетевые карты работают нормально.
58 Не устанавливайте на них IP-адресов, и не позволяйте начальным скриптам
59 выполнять DHCP-запрос с них.
60 IP-адреса должны устанавливаться уже после того как бридж сконфигурирован.
62 Команда ifconfig должна показывать обе (или больше, если их больше) сетевые карты, и они должны быть выключены, т.е. находиться в состоянии DOWN
63 (это на момент начала настройки, дальше они будут переведены в UP).
65 \subsubsection{Загрузка модуля}
66 В большинстве случаев код коммутатора оформляется в виде модуля.
67 Если модуль сконфигурирован и установлен корректно,
68 он автоматически загружается при первом вызове команды \textbf{brctl}.
70 Если ваши утилиты bridge-utilities корректно установлены,
71 и ядро и его модуль bridge в порядке, вызовом команды \textbf{brctl}
72 можно будет просмотреть маленькую сводку о синтаксисе команды:
73 \begin{verbatim}
74 # brctl
75 # commands:
76 addbr <bridge> add bridge
77 delbr <bridge> delete bridge
78 addif <bridge> <device> add interface to bridge
79 delif <bridge> <device> delete interface from bridge
80 setageing <bridge> <time> set ageing time
81 setbridgeprio <bridge> <prio> set bridge priority
82 setfd <bridge> <time> set bridge forward delay
83 sethello <bridge> <time> set hello time
84 setmaxage <bridge> <time> set max message age
85 setpathcost <bridge> <port> <cost> set path cost
86 setportprio <bridge> <port> <prio> set port priority
87 show show a list of bridges
88 showmacs <bridge> show a list of mac addrs
89 showstp <bridge> show bridge stp info
90 stp <bridge> <state> turn stp on/off
91 \end{verbatim}
93 \subsubsection{Создание и удаление коммутатора}
94 Команда
95 \begin{verbatim}
96 brctl addbr bridgename
97 \end{verbatim}
99 создаёт экземпляр логического коммутатора с именем \textit{bridgename}.
100 Для того чтобы выполнять коммутацию пакетов, нужно создать хотя бы один коммутатор .
101 Можно воспринимать логический бридж как контейнер интерфейсов,
102 принимающих участие в коммутации.
103 Каждый экземпляр коммутатора представлен новым сетевым интерфейсом.
105 Соответствующая команда для удаления коммутатора:
106 \begin{verbatim}
107 brctl delbr bridgename
108 \end{verbatim}
110 \subsubsection{Включение устройства в коммутатор}
111 Команда
112 \begin{verbatim}
113 brctl addif bridgename device
114 \end{verbatim}
115 \noindent включает сетевое устройство \textit{device}
116 в коммутатор с именем \textit{bridgename}.
117 Все устройства, включенные в один бридж работают как одна большая сеть.
118 Нельзя добавить устройство в несколько бриджей одновременно,
119 поскольку это не имеет никакого смысла.
120 Коммутатору потребуется небольшое время после того как устройство
121 подключено, для того чтобы узнать его Ethernet-адрес, а затем
122 он начинает делать перенаправление (forward).
124 Соответствующая команда для выключения устройства из коммутатора:
125 \begin{verbatim}
126 brctl delif bridgename device
127 \end{verbatim}
129 \subsubsection{Просмотр устройств}
130 Команда \textbf{brctl} \verb|show| показывает состояние всех работающих коммутаторов:
131 \begin{verbatim}
132 # brctl addbr br549
133 # brctl addif br549 eth0
134 # brctl addif br549 eth1
135 # brctl show
136 bridge name bridge id STP enabled interfaces
137 br549 8000.00004c9f0bd2 no eth0
138 eth1
139 \end{verbatim}
140 Если выполнить команду \textbf{brctl} \verb|showmacs|,
141 будет показана информация о сетевых адресах
142 источников трафика, прошедшего через коммутатор
143 (и самого коммутатора тоже):
145 \begin{verbatim}
146 # brctl showmacs br549
147 port no mac addr is local? ageing timer
148 1 00:00:4c:9f:0b:ae no 17.84
149 1 00:00:4c:9f:0b:d2 yes 0.00
150 2 00:00:4c:9f:0b:d3 yes 0.00
151 1 00:02:55:1a:35:09 no 53.84
152 1 00:02:55:1a:82:87 no 11.53
153 ...
154 \end{verbatim}
156 Время жизни (aging time) -- это количество секунд, которое
157 MAC-адрес будет находится в таблице forwarding database
158 после получения пакета с этим адресом.
159 Записи в таблице периодически удаляются по тайм-ауту,
160 для того чтобы не получилось, что они будут находиться там вечно.
161 В нормальной ситуации, не понадобится менять данные параметры,
162 но это сделать можно (время указывается в секундах)
164 \begin{verbatim}
165 # brctl setageing ''bridgename'' ''time''
166 \end{verbatim}
168 Если установить время в ноль, запись становится постоянной.
170 \subsubsection{Spanning Tree Protocol}
171 Если используется несколько коммутаторов, для того чтобы избежать петель коммутации, нужно включить поддержку протокола
172 Spanning Tree Protocol (Протокол остовного дерева).
174 \begin{verbatim}
175 # brctl stp br549 on
176 \end{verbatim}
178 Посмотреть параметры STP можно так:
180 \begin{verbatim}
181 # brctl showstp br549
182 br549
183 bridge id 8000.00004c9f0bd2
184 designated root 0000.000480295a00
185 root port 1 path cost 104
186 max age 20.00 bridge max age 200.00
187 hello time 2.00 bridge hello time 20.00
188 forward delay 150.00 bridge forward delay 15.00
189 ageing time 300.00 gc interval 0.00
190 hello timer 0.00 tcn timer 0.00
191 topology change timer 0.00 gc timer 0.33
192 flags
194 eth0 (1)
195 port id 8001 state forwarding
196 designated root 0000.000480295a00 path cost 100
197 designated bridge 001e.00048026b901 message age timer 17.84
198 designated port 80c1 forward delay timer 0.00
199 designated cost 4 hold timer 0.00
200 flags
202 eth1 (2)
203 port id 8002 state disabled
204 designated root 8000.00004c9f0bd2 path cost 100
205 designated bridge 8000.00004c9f0bd2 message age timer 0.00
206 designated port 8002 forward delay timer 0.00
207 designated cost 0 hold timer 0.00
208 flags
209 \end{verbatim}
211 \paragraph{Настройка STP}
212 Конфигурироваться может несколько параметров, имеющих отношение к Spanning Tree Protocol.
213 Код автоматически определяет скорость соединения и другие параметры,
214 поэтому, как правило, вручную их менять не нужно.
216 \paragraph{Приоритет коммутатора}
217 У каждого коммутатора есть относительный приоритет (priority) и стоимость (cost).
218 Каждый интерфейс коммутатора ассоциируется с номером порта в коде STP. У каждого есть приоритет и стоимость, на основе которых принимается решение о том, какой путь для передчи пакета является кратчайшим. Всегда используется путь с наимеьшей стоимостью (за исключением случая, когда этот путь разорван).
219 Если у вас несколько коммутаторов и интерфейсов,
220 может понадобиться отрегулировать приоритеты, чтобы достичь максимальной
221 производительности.
223 \begin{verbatim}
224 # brctl setbridgeprio ''bridgename'' ''priority''
225 \end{verbatim}
227 Бридж с наименьшим приоритетом избирается как \textit{корневой}.
228 Корневой бридж является центром остовного дерева (spanning tree)
229 коммутационных связей.
231 \paragraph{Приоритет и стоимость}
232 У каждого интерфейса моста может быть своя собственная скорость, и её значение
233 используется при выборе какое соединение должно использоваться.
234 У более быстрых интерфейсов должна быть более низкая стоимость.
236 \begin{verbatim}
237 # brctl ''setpathcost bridge port cost''
238 \end{verbatim}
240 Для разных портов, имеющих одинаковую стоимость
241 существует ещё \textit{приоритет}.
243 \paragraph{Задержка передачи (Forwarding delay)}
244 Задержка передачи (forwarding delay) это время
245 в течение которого порт находится в состояниях
246 Listening и Learning, прежде чем перейти в состояние Forwarding.
247 Это время нужно для того чтобы мост, когда он включается в
248 сеть, сначала должен ознакомиться с трафиком, прежде чем включаться
249 в работу.
251 \begin{verbatim}
252 # brctl setfd ''bridgename'' ''time''
253 \end{verbatim}
255 \paragraph{Время Hello}
256 Время от времени
257 корневой мост (Root Bridge)
258 и выделенные мосты (Designated Bridges)
259 отправляют пакет \textit{hello}.
260 Пакеты hello нужны для обмена информацией
261 о топологии все коммутироемой локальной сети.
263 \begin{verbatim}
264 # brctl sethello ''bridgename'' ''time''
265 \end{verbatim}
267 \paragraph{max age -- таймаут hello}
268 Если другой коммутатор в дереве spanning tree не отправляет пакет hello
269 в течение долгого времени, считается, что он не в порядке (dead).
270 Таймаут устанавливается командой:
271 \begin{verbatim}
272 # brctl maxage ''bridgename'' ''time''
273 \end{verbatim}
275 \subsubsection{Пример настройки}
276 Базовая настройка моста выполняется так:
278 \begin{verbatim}
279 # ifconfig eth0 0.0.0.0
280 # ifconfig eth1 0.0.0.0
281 # brctl addbr mybridge
282 # brctl addif mybridge eth0
283 # brctl addif mybridge eth1
284 # ifconfig mybridge up
285 \end{verbatim}
287 Хост настраивается как обычный мост.
288 У него самого нет IP-адреса, поэтому к нему
289 нельзя получить доступ (или взломать) удалённо
290 по TCP/IP.
292 Опционально можно настроить виртуальный интерфейс \textit{mybridge}
293 на доступ по локальной сети.
294 Он будет работать как обычный интерфейс -- как сетевая карта.
295 Процесс настройки полностью совпадает с вышеописанным,
296 за тем исключением, что нужно заменить
297 последнюю команду на такую:
299 \begin{verbatim}
300 # ifconfig mybridge 192.168.100.5 netmask 255.255.255.0
301 \end{verbatim}
303 Если вы хотите чтобы мост автоматически получал IP-адрес
304 у ADSL-модема по DHCP (или в другой похожей ситуации),
305 сделайте так:
307 \begin{verbatim}
308 # ifconfig eth0 0.0.0.0
309 # ifconfig eth1 0.0.0.0
310 # brctl addbr mybridge
311 # brctl addif mybridge eth0
312 # brctl addif mybridge eth1
313 # dhclient mybridge
314 \end{verbatim}
316 Если делать это много раз, процессов \textbf{dhclient} может расплодиться великое множество. Или безжалостно убейте их, или почитайте об \textbf{omshell}.
318 \subsection{Конфигурирование через /etc/net}
319 Сначала в \texttt{/etc/net} настраиваются два ethernet-устройства port0 и port1:
320 \begin{verbatim}
321 # cat >> /etc/net/iftab
322 port0 mac 00:13:46:66:01:5e
323 port1 mac 00:13:46:66:01:5f
324 ^D
325 # mkdir /etc/net/ifaces/port0
326 # cat > /etc/net/ifaces/port0/options
327 TYPE=eth
328 MODULE=via-rhine
329 # mkdir /etc/net/ifaces/port1
330 # cat > /etc/net/ifaces/port1/options
331 TYPE=eth
332 MODULE=via-rhine
333 ^D
334 \end{verbatim}
335 После этого описывается мост:
336 \begin{verbatim}
337 # mkdir /etc/net/ifaces/mybridge
338 # cat > /etc/net/ifaces/mybridge/options
339 TYPE=bri
340 HOST='port0 port1'
341 ^D
342 # cat > /etc/net/ifaces/mybridge/brctl
343 stp AUTO on
344 ^D
345 \end{verbatim}
346 После этого можно поднять бридж командой \textbf{ifup} \texttt{mybridge}. Устройства port0 и port1 поднимутся автоматически.
348 \subsection{FAQ}
349 \subsubsection{Что делает мост/коммутатор?}
350 Мост прозрачно пересылает трафик между несколькими сетевыми интерфейсами.
351 На простом языке это означает, что коммутатор соединяет два или более интерфейсов Ethernet между собой, для того чтобы получилась большая Ethernet-сеть.
353 \subsubsection{Это как-то зависит от используемых протоколов?}
354 Нет. Коммутатор ничего не знает о протоколах высокого уровня, он только видит кадры Ethernet. Поэтому функциональность моста является протоколонезависимой и проблем с передачей протоколов таких как IPX, NetBEUI, IP, IPv6 и других быть не должно.
356 \subsubsection{Чем этот код лучше чем аппаратный коммутатор?}
357 Пожалуйста, имейте в виду, что этот код не писался
358 с целью заменить Linux-боксами выделенное сетевое оборудование.
359 Не надо воспринимать Linux с этим кодом как замену аппаратным коммутаторам.
360 Это скорее расширение сетевых возможностей Linux. Как бывает, что Linux-маршрутизатор лучше чем аппаратный маршрутизатор (и наоборот),
361 есть ситуации, когда Linux-мост лучше чем выделенный мост (и наоборот).
363 Основная сила кода моста Linux это его гибкость.
364 И так есть уже огромнейшее количество всяких интересных
365 вещей, которые можно делать с Linux (см. например, Linux Advanced Routing and Traffic Control), и мосты -- ещё одно добавление к этой гремучей смеси.
367 Одним из главных преимуществ решения, базирующегося на Linux,
368 в сравнении с выделенным коммутатором
369 являются разнообразные возможности по фильтрации трафика.
370 Можно использовать всю функциональность netfilter (iptables) в комбинации
371 с мостами, что даёт больший функционал, чем проприетарные решения.
373 \subsubsection{Чем этот код хуже чем аппаратный коммутатор?}
374 Для того чтобы работать в качестве моста,
375 устройство должно быть переведено в неразборчивый (promiscuous)
376 режим, в котором оно получает весь трафик, приходящий на интерфейс.
377 В действительно загруженных сетях, это может занять значительную часть
378 процессора, замедляя работу системы.
379 Выход -- или использовать выделенную Linux-систему в качестве моста
380 или использовать аппаратный коммутатор.
382 \subsubsection{Какова производительность моста?}
383 Производительность ограничивается используеммыми сетевыми картами и процессором.
384 Джеймс Ю (James Yu) из университета DePaul провёл исследование,
385 в котором выполнил сравнение Linux моста и коммутатора Catalyst
386 Yu-Linux-TSM2004.pdf
388 \subsubsection{Моего моста не видно в трассе traceroute\rq{}а!}
389 И не должно быть видно.
390 Работа моста является полностью прозрачной для сети (по крайней мере должна);
391 сети, которые мост соединяет между собой должны видеться как одна большая сеть.
392 Именно поэтому мост и не виден в traceroute; пакеты и не думают о том, что они пересекают границы подсети.
394 Дополнительная информация об этом в книгах по сетям TCP/IP.
396 \subsubsection{Ничего не работает!}
397 Когда я пытаюсь добавить мост, система говорит: \dq{}br\_add\_bridge: bad address\dq{}!
399 Или ваше ядро слишком старое (2.2 или более ранее), или вы забыли включить поддержку бриджей в ядро.
401 \subsubsection{Работает ли бриджинг на ядре 2.2?}
402 Изначально разработка велась на 2.2, есть патчи для этого ядра.
403 Но сейчас эти патчи уже не поддерживаются и не развиваются.
405 \subsubsection{Есть ли в планах поддержка RSTP (802.1w)?}
406 Да. Ведётся работа по включению поддержки RSTP в будущий релиз для ядра 2.6. Код делался для ядра 2.4 и нуждается в доработке, тестировании и обновлении.
408 \subsubsection{Что можно соединять с помощью моста?}
409 Мосты Linux очень гибкие; можно соединять
410 как традиционные ethernet-устройства, так и псевдоустройства такие
411 как PPP, VPN или VLAN\rq{}ы.
413 Ограничения, которые накладываются на соединяемые устройства:
414 \begin{itemize}
415 \item У всех должен быть одинаковый максимальный размер пакета (MTU). Мост не выполняет фрагментирование пакетов.
416 \item Устройства должны выглядеть как Ethernet, т.е. у них должны быть 6-байтные адреса отправителя и получателя.
417 \item Должен поддерживаться неразборчивый (promiscuous) режим. Мост должен получать не только трафик, адресованный ему, но и весь сетевой трафик.
418 \item Должен быть разрешён спуфинг адресов. У моста должна быть возможность отправлять данные по сети, как если бы они пришли от другого хоста.
419 \end{itemize}
421 \subsubsection{Можно ли выполнять коммутацию в сочетании с netfilter/iptables?}
422 Да. Соответствующий код включен в большинство ядер. Смотрите проект ebtables.
424 \subsubsection{Работает ли он с Token Ring, FDDI и Firewire?}
425 Нет. У этих протоколов отличается адресация и размер кадра.
427 \subsubsection{Я продолжаю получать сообщение \dq{}retransmitting tcn bpdu\dq{}!}
428 Это означает, что ваш Linux-мост ретранслирует сообщение
429 Topology Change Notification Bridge Protocol Data Unit
430 Это означает что где-то есть коммутатор (или другой Linux-мост),
431 который не согласен с правилами STP.
433 В каждой коммутируемой сети есть один \dq{}главный коммутатор\dq{},
434 который также называется \textit{корневым} (root).
435 Какой именно мост является корневым можно узнать с помощью \textbf{brctl}.
437 Когда топология коммутируемой сети меняется (например, кто-то выдернул
438 кабель между коммутаторами), коммутатор, который это обнаружил,
439 отправляет сообщение корневому коммутатору.
440 Корневой коммутатор устанавливает бит \rq{}topology changed\rq{}
441 в пакеты hello, которые будут отправляеться в течение следующих X секунд
442 (обычно X равно 30). В результате все мосты узнают об изменении топологии,
443 и они могут работать с учётом этого -- например удалить устаревшие MAC-записи.
445 После того как коммутатор отправляет сообщение об изменении топологии,
446 он ждёт что в hello-сообщении будет установлени бит \rq{}\dq{}topology changed\dq{}.
447 Если его нет (бит в данном случае играет роль подтверждения получения информации
448 о смене топологии), коммутатор решает, что сообщение было потеряно.
449 Поэтому пересылает сообщение повторно.
450 Однако, в некоторых коммутаторах реализациия
451 STP немного недоделанная, и они не отправляют подтверждение
452 получения сообщения об изменении топологии.
453 Если один из таких коммутаторов у вас корневой,
454 все остальные коммутаторы будут постоянно повторно пересылать
455 информацию об изменении топологии.
456 В результате чего и будут появляеться такие сообщения.
458 Список вещей, которые можно сделать:
459 \begin{itemize}
460 \item Найти какой коммутатор является корневым, где он находится и под управлением какого программного обеспечения работает. Пожалуйста, сообщите о таком коммутаторе в список рассылки, чтобы можно было его добавить в blacklist.
461 \item Заставить Linux-мост быть корневым. Найдите какой приоритет у коммутатора, который сейчас является корневым, и с помощью команды \textbf{brctl} \verb|setbridgeprio| установите приоритет линуксового моста на 1 меньше (Мост с наименьшим приоритеом всегда становится корневым).
462 \item Вообще отключите STP на Linux-мосте. Только смотрите чтобы не появилось петель коммутации! Если у вас есть петли, и не работает STP, пакеты зациклятся и будут гулять по сети вечно, что сделает её нерабочей.
463 \end{itemize}
465 \subsubsection{Оно не работает с моей обычной ethernet-карточкой!}
466 К сожалению, у некоторых сетевых карт глючные драйверы,
467 которые сбоят во время загрузки.
468 Ситуация улучшается, поэтому может помочь установка текущего ядра и сетевых драйверов. Ещё можно попробовать устройства другого производителя.
470 Пожалуйста, сообщайте обо всех проблемах
471 в список рассылки \dq{}Bridge mailing list\dq{}: bridge@osdl.org.
472 Если ваша сетевая карта не работает даже без бриджинга,
473 попробуйте обратиться в список рассылки
474 \dq{}Linux networking mailing list\dq{} linux-net@vger.kernel.org.
476 \subsubsection{Оно не работает с моей wireless-карточкой!}
477 Это известная проблема, и она не связана с кодом моста.
478 Большое количество wireless-карт не позволяет делать подмену (spoofing)
479 адреса источника. В некоторых чипсетах это ограничение на уровне прошивки (firmware).
480 Дополнительная информация может быть найдена в архивах списков рассылки.
482 Удалось ли кому-нибудь обойти проблему связанную с тем,
483 что Wavelan не позволяет использовать никакие MAC-адреса за исключением
484 своего собственного?
486 \textit{(Отвечает Michael Renzmann, mrenzmann at compulan.de)}
488 99\% пользователей никогда не смогут избавиться от этой проблемы.
489 Для такой функции нужна специальная прошивка. Её нужно загрузить
490 в память WaveLAN-карточки и тогда карточка сможет выполнять бриджинг.
491 Но нет общедоступной документации интерфейса.
492 Единственный выход -- иметь полную версию библиотеки hcf,
493 которая контролирует все действия карты, и в частности,
494 доступ к памяти карты.
495 Для получения этой библиотеки нужно убедить компанию Lucent,
496 что это ей будет выгодно и помимо этого подписать NDA.
497 Поэтому, скорее всего, пока Lucent не передумает,
498 вам не удастся получить доступ к коду (а в том, что Lucent передумает
499 есть большие сомнения).
501 Если вам срочно нужна wireless-карта которая может работать в мосте,
502 нужно использовать те, что построены на базе чипсета \textit{prism}
503 (изготавливает Harris Intersil).
504 Драйверы для этой карты есть на www.linux-wlan.com
505 (веб-сайт от Absoval), и в одном из сообщений говорится,
506 что общедоступна необходимая прошивка и программа для загрузки для Linux.
507 Если вам нужны какие-то дополнительные возможности, нужно разговаривать
508 с Absoval.
510 \subsubsection{И всё же я не понимаю!!}
511 Полноценный мост для беспроводных сетей (802.11) требует поддержки WDS.
512 В текущей реализации её нет.
514 Можно сделать ограниченную функциональность с некоторыми драйверами.
515 Для этого обязательно чтобы устройство поддерживало
516 разные адреса отправителя и получателя. Что и обеспечивает WDS.
518 Есть способы добиться чтобы оно заработало, но они достаточно запутанные,
519 и их сложно понять без досконального знания 802.11, режимов его работы и формата загловка кадра.
521 \subsubsection{Я получаю ошибку \rq{}too much work in interrupt\rq{}}
522 Это связано с тем, что сетевая карта теряет пакеты.
523 Можно попробовать несколько вещей. Во-первых, собрать
524 драйвер с поддержкой NAPI (если он по умолчанию, не включен).
525 NAPI делает так чтобы получал управление по программному прерыванию,
526 не по прерыванию низкого уровня.
528 Если драйвер не поддерживает NAPI, можно попробовать
529 увеличить объём работы, который драйвер может делать
530 в течение обработки прерывания.
531 Для 3c59x это делается с помощью опции \verb|max_interrupt_work| (поэтому нужно добавить опцию \verb|options 3c59x max_interrupt_work=10000| в файл \texttt{/etc/modules.conf}).
532 У других сетевых карт похожие опции.
534 \subsubsection{Работает ли DHCP через/поверх моста?}
535 Мост передаёт DHCP-трафик (широковещательный) и ответы на него.
536 Также можно использовать DHCP для установки локального IP-адреса на псевдо-интерфейс моста.
538 Одна из распространённых ошибок при использовании DHCP является установка задержки передачи (forwarding delay) на порту коммутатора равной 30 секунд.
539 При такой задержке интерфейс когда он подключился к мосту не может посылать
540 через него данные в течении первых 30 секунд. Причина в том, что при использовании моста в сложной топологии он должен сначала обнаружить остальные мосты дабы не создавать петель. Проблема была одной из причин создания протокола
541 Rapid Spanning Tree Protocol (RSTP).
543 Если мост используется в одиночку (т.е. поблизости нет мостов)
544 можно спокойно отключить задержку передачи (установить её равной 0)
545 перед тем как подключать интерфейс к мосту.
546 После этого сразу же можно вызывать dhclient:
548 \begin{verbatim}
549 # brctl setfd br0 0
550 # brctl addif br0 eth0
551 # dhclient eth0
552 \end{verbatim}
554 \subsection{Дополнительная информация}
555 \begin{itemize}
556 \item \htmladdnormallinkfoot{Linux Bridge}{http://xgu.ru/wiki/Linux\_Bridge} (рус.)
557 \item \htmladdnormallinkfoot{Ethernet VPN bridging}{http://openvpn.sourceforge.net/bridge.html}
558 \item \htmladdnormallinkfoot{Ebtables firewalling}{http://ebtables.sourceforge.net}
559 \item \htmladdnormallinkfoot{Ethernet-bridge + netfilter HOWTO}{http://www.tldp.org/HOWTO/Ethernet-Bridge-netfilter-HOWTO.html}
560 \item \htmladdnormallinkfoot{Linux-bridge STP HOWTO}{http://www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/index.html}
561 \item \htmladdnormallinkfoot{Spanning Tree Protocol}{http://en.wikipedia.org/wiki/Spanning\_tree\_protocol} на Wikipedia
562 \end{itemize}