Страница 1 из 1

Делаем прозрачный bridge (мост) + router = брутер

Добавлено: 18 ноя 2007, 17:04
dr.Wermut
Делаем прозрачный bridge (мост) + router = брутер на основе Linux Debian etch

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

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

Код bridge в Linux является частичной реализацией стандарта ANSI/IEEE 802.1d. Впервые бриджинг в Linux появился в 2.2, затем код был переписан Леннертом Буйтенхеком (Lennert Buytenhek). Код bridge интегрирован в ядра серий 2.4 и 2.6.
Железо
- Intel Pentum 133
- RAM 32 mb
- hdd 1024 mb
- 2 сетевые карты 100 Mbps или 1000 Mbps (можно и больше, но желательно одинаковые).

Установка ПО
Ставим Linux Debian с минимумом пакетов, сеть не настраиваем. После установки Debian ставим несколько необходимых пакетов:

Код: Выделить всё

# apt-get mc
# apt-get install bridge-utils
# apt-get install iproute
# apt-get install iftop
# apt-get install bmon
# apt-get install openssh-server
# apt-get install iperf
Настройка моста
Узнаем где наши сетевые карты

Код: Выделить всё

# ifconfig
eth1      Link encap:Ethernet  HWaddr 00:19:5B:88:B2:85
          inet6 addr: fe80::219:5bff:fe88:c287/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3871824 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4707022 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1031462268 (983.6 MiB)  TX bytes:1375550080 (1.2 GiB)
          Interrupt:10 Base address:0x6200

eth2      Link encap:Ethernet  HWaddr 00:19:5B:88:C7:86
          inet6 addr: fe80::219:5bff:fe88:c288/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4707923 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3855788 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1377378066 (1.2 GiB)  TX bytes:1020322438 (973.0 MiB)
          Interrupt:9 Base address:0x6300

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:56 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:4396 (4.2 KiB)  TX bytes:4396 (4.2 KiB)
Настройки сети в Linux Debian находятся в файле /etc/network/interfaces
У меня на мосте он имеет такой вид:

Код: Выделить всё

# The loopback network interface
auto lo
iface lo inet loopback
Создаём скрипт /etc/network/if-up.d/bridge

Код: Выделить всё

#!/bin/sh

# Чистим настройки от предыдущего запуска скрипта
ifconfig br0 down # Отключаем интерфейс моста
ifconfig eth1 down # Отключаем сетевую карту eth1
ifconfig eth2 down # Отключаем сетевую карту eth2
brctl delbr br0 # Удаляем имя моста

# Запускаем бридж
brctl addbr br0 # Задаём имя бриджу
brctl addif br0 eth1 # Указываем какие интерфейсы 
brctl addif br0 eth2 # работают в режиме моста.

brctl stp br0 off # Отключаем режим STP
# brctl setfd br0 15 # Актуально только при
# brctl setageing br0 60 # использовании STP

# Задаём IP моста, для дальнейшего управления им через ssh
ifconfig br0 192.168.110.251 netmask 255.255.0.0 broadcast 192.168.255.255

# Удаляем IP сетевых карт
ifconfig eth1 0.0.0.0
ifconfig eth2 0.0.0.0

# Поднимаем интерфейсы сетевых карт и моста
ifconfig eth1 up
ifconfig eth2 up
ifconfig br0 up
В принципе мост готов к использованию, надо только перезагрузить компьютер или выполнить скрипт (не забудьте его сделать запускаемым от имени root 774

Код: Выделить всё

# chgrp root /etc/network/if-up.d/bridge
# chown root /etc/network/if-up.d/bridge
# chmod 774 /etc/network/if-up.d/bridge
Настройка маршрутизации

Может возникнуть необходимость указать с какой стороны находится тот или иной компьютер. Дописываем в наш скрипт следующие команды:

# Сообщаем что ip 192.168.110.200 находится со стороны eth1

Код: Выделить всё

route add -host 192.168.110.200 dev eth1
# Сообщаем что ip 192.168.88.250 находится со стороны eth2

Код: Выделить всё

route add -host 192.168.88.250 dev eth2
# Сообщаем мосту с какой стороны сеть 192.168.55.0/24 (255.255.255.0)

Код: Выделить всё

route add -net 192.168.55.0/24 dev eth1
После таких настроек ваш мост станет немного умнее. Теперь для проверки маршрутизации набираем команду:

Код: Выделить всё

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.110.200 *               255.255.255.255 UH    0      0        0 eth1
192.168.88.250  *               255.255.255.255 UH    0      0        0 eth2
192.168.55.0     *               255.255.255.0     U     0      0        0 eth1
localnet        *               255.255.0.0     U     0      0        0 br0
Удалённое управление мостом

Входим на мост удалённо как пользователь root (под root лучше не работать):

Код: Выделить всё

# ssh root@192.168.110.251
Теперь можно работать с мостом как с настольным компьютером в текстовом режиме.

Мониторинг и управление
# Удобная утилита для просмотра загрузки сети и мостаю # Ещё не менее полезная утилита мониторинга сети

Код: Выделить всё

iftop -i br0
# инф. о сетевых интерфейсах

Код: Выделить всё

ifconfig
# поднять (убить) сетевой интерфейс

Код: Выделить всё

ifconfig eth1 up (down)
# инф. о мосте

Код: Выделить всё

brctl show
# таблица MAC-адресов моста

Код: Выделить всё

brctl showmacs br0
# ARP-таблица # Снифер

Код: Выделить всё

tcpdump host 192.168.110.100
# Файловый менеджер под Linux Литература:
http://xgu.ru/wiki/Linux_Bridge

Добавлено: 18 ноя 2007, 19:38
Llama
писать в wiki запрещает религия? перенесите плс.

PS: скрипт поднятия моста для Debian - явное излишество. man interfaces
PPS: если пишите руководства - используйте iproute вместо устаревших route/arp/ifconfig. Это позволит избежать массы не очевидных ошибок которые возможны при использовании этих заведомо устаревших утилит. Не стоит подавать дурной пример.

Добавлено: 18 ноя 2007, 20:38
dr.Wermut
Спасибо за критику. Принял к сведению всё исправлю. Для этого на форум и написал, хочу ошибки исправить =)
Когда отшлифую всё и WiKi пополнится... =)

Добавлено: 18 ноя 2007, 21:10
Llama
dr.Wermut, переносите в wiki. Будь оно там, я бы сразу на месте и исправил.