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

Linux, безопасность, сети и все что с этим связано
dr.Wermut
Заглянувший
Сообщения: 29
Зарегистрирован: 05 май 2005, 23:18

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

Сообщение 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
Последний раз редактировалось dr.Wermut 29 ноя 2007, 21:56, всего редактировалось 2 раза.

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

писать в wiki запрещает религия? перенесите плс.

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

dr.Wermut
Заглянувший
Сообщения: 29
Зарегистрирован: 05 май 2005, 23:18

Сообщение dr.Wermut »

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

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

dr.Wermut, переносите в wiki. Будь оно там, я бы сразу на месте и исправил.
Опыт растет прямо пропорционально выведенному из строя оборудованию

Ответить