The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка фильтрующего сетевого моста на базе FreeBSD 6.0 с if_bridge (freebsd bridge ifconfig)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: freebsd, bridge, ifconfig,  (найти похожие документы)
From: Кропачев Артемий Newsgroups: email Date: Sun, 25 Dec 2005 17:02:14 +0000 (UTC) Subject: Настройка фильтрующего сетевого моста на базе FreeBSD 6.0 с if_bridge Настройка сетевого моста Компьютер под управлением FreeBSD с несколькими интерфейсами может выступать не только в роли маршрутизатора между сегментами сети , но и в роли коммутатора с фильтрацией пакетов (сетевой мост). В коде FreeBSD 5-STABLE и 6-STABLE есть 2 реализации сетевого моста - bridge и if_bridge. Первая реализация будет скоро удалена из кода FreeBSD, так что рассмотрим создание фильтрующего моста с помощью более функционального кода if_bridge. Можно выделить несколько этапов данного процесса: 1. Подготовка ядра ОС 2. Включении моста 3. Подключение интерфейсов 4. Настройка правил фильтрации пакетов 5. Управление работой моста 1 Сборка ядра Для начала пересоберём ядро с дополнительными опциями: # cd /usr/src/sys/i386/conf # cp GENERIC BRIDGE # vi BRIDGE Тут вносим следующие добавления необходимые для работы Фильтрующего сетевого моста: #Включение поддержки IPFW options IPFIREWALL #Включение в ядро кода сетевого моста device if_bridge Далее выполняем собственно сборку ядра: # config BRIDGE # cd /usr/src/sys/i386/compile/BRIDGE # make cleandepend # make depend # make # make install # reboot Ну или просто: # make cleandepend && make depend && make && make install && reboot 2 Включение моста в работу Для начала выполним: # ifconfig bridge0 create В выводе ifconfig должен появиться дополнительный интерфейс - bridge0 3 Подключение интерфейсов Чтобы мост заработал полноценно ему необходимо задать имена интерфейсов, между которыми можно выполнять коммутацию пакетов. 3.1 Добавление интерфейсов Для работы коммутатора необходимо как минимум 2 интерфейса, поэтому подключаем их (в нашем случае это будут fxp0,fxp1,fxp2, то есть создадим коммутатор с 3-мя портами). # ifconfig bridge0 addm fxp0 up # ifconfig bridge0 addm fxp1 up # ifconfig bridge0 addm fxp2 up На всякий пожарный выполним переподнятие интерфейса bridge0: # ifconfig bridge0 up В принципе мост должен уже заработать, если фаервол не блокирует прохождение пакетов. 3.2 Удаление интерфейсов их моста: При работе иногда возникает необходимость выключить какой-либо интерфейс коммутатора из его работы. Для того чтобы удалить какой-либо интерфейс необходимо сделать следующее: # ifconfig bridge0 deletem fpx1 Эта команда удалит интерфейс fxp1 из работы моста. Для того чтобы все изменения остались после перезагрузки компьютера в rc.conf добавим строки: cloned_interfaces="bridge0" ifconfig_bridge0="addm fxp0 addm fxp1 addm fxp2 up" ifconfig_fxp0="up" ifconfig_fxp1="up" ifconfig_fxp2="up" Удобно навесить IP адрес на какой-либо интерфейс для последующего управления сервером фильтрации удалённо. Адрес можно навесить как на bridge0, так и на другие интерфейсы. Например в rc.conf за место 'ifconfig_fxp0="up"' напишем строку: ifconfig_fxp0="inet 192.168.0.1 netmask 255.255.255.0 up" 4 Настройка правил фильтрации пакетов В man(4) if_bridge описано как можно изменить поведение сетевого моста для фильтрации пактов. Механизм работы: пакет из сети попадает на входящий интерфейс, далее проходит интерфейс bridge0. Там решается его судьба: согласно таблицы коммутации (как у всех коммутаторов) определяется порт (в нашем случае интерфейс) куда далее отправляется пакет. А с этого конечного интерфейса он уже уходит в сеть.Пакеты проходящие через мост можно фильтровать различными способами: а) На входящих и исходящих интерфейсах (для этого необходимо установить значение переменной net.link.bridge.pfil_member=1): # sysctl net.link.bridge.pfil_member=1 б) На "промежуточном" интерфейсе (net.link.bridge.pfil_bridge=1) # sysctl net.link.bridge.pfil_bridge=1 в) И там и там, то есть обе переменные установить в 1. г) Нигде, то есть обе переменные установить в 0 (Пакеты проходящие сквозь мост не будут подвергаться фильтрации). Проще всего "мостовые" пакеты фильтровать на интерфейсе bridge0. Но меня больше устраивает вариант фильтрации на всех интерфейсах (возможность более гибкого управления поведением моста и самим сервером). Поэтому выполним: # sysctl net.link.bridge.pfil_member=1 # sysctl net.link.bridge.pfil_bridge=1 Далее настроим правила фаервола: Если ничего фильтровать не хотите: # ipfw add 100 allow ip from any to any Если нужна фильтрация тогда решать вам как её делать. Не следует забывать разрешать прохождение пакетов на интерфейсе bridge0 иначе ваш мост работать не будет совсем.Приведу небольшой пример по фильтрации пакетов сетевым мостом. Пусть иметься сеть 10.0.0.0/21 (То есть с маской 255.255.248.0). Мост ограничивает сеть с ай пи адресацией 10.0.1.0/24. Задача: требуется без разделения сети на сегменты ограничить доступ пользователем в остальную сеть Внешний кусок сети висит на интерфейсе fxp0, внутренний на fxp1. Правила фильтрации настроим следующим способом: # sysctl net.link.bridge.pfil_member=1 # sysctl net.link.bridge.pfil_bridge=1 Далее введём следующие правила: # ipfw flush (только если вы находитесь за консолью!!!!) # ipfw add 100 allow mac-type arp (Всё же разрешим прохождение arp пакетов сквозь мост) # ipfw add 200 allow ip from any to any via bridge0 (разрешим весь трафик на интерфейсе ) (bridge0,проще конечно было сделать ) (sysctl net.link.bridge.pfil_bridge=0 ) # ipfw add 300 allow ip from any to any out via fxp1 # ipfw add 400 allow ip from any to any out via fxp0 (Разрешаем весь исходящий трафик) (с обоих интерфейсов коммутации) # ipfw add 500 allow ip from not 10.0.1.0/24 to 10.0.1.0/24 in via fxp0 (Разрешили все ) ( входящие пакеты с сети во внутрь) # ipfw add 600 allow ip from 10.0.1.1 to any in via fxp1 # ipfw add 700 allow ip from 10.0.1.2 to any in via fxp1 # ipfw add 800 allow ip from 10.0.1.3 to any in via fxp1 # ipfw add 900 allow ip from 10.0.1.4 to any in via fxp1 # ipfw add 1000 allow ip from 10.0.1.5 to any in via fxp1 # ipfw add 1100 allow ip from 10.0.1.6 to any in via fxp1 (Тут прописали список разрешённых адресов) Если при этом последнее правило 65536 deny ip from any to any, мы получим мост который выпустит во внешнюю сеть только адреса с 1-го по 6-й, остальным доступ будет "наружу" запрещён. Следует отметить, что это только пример, так что с правилами в вашем конкретном случае решать придётся подумать. 5 Управление работой сетевого моста Управление работой сетевого моста было частично описано выше: удаление, добавление интерфейсов, настройка способов фильтрации. Более подробную информацию можно найти в man ifconfig. a) Добавление интерфейса: # ifconfig bridge0 addm fxp0 b) Удаление интерфейса: # ifconfig bridge0 deletem fxp0 c) Просмотр таблицы коммутации: # ifconfig bridge0 addr d) Установка размера Кеша адресов: # ifconfig bridge0 maxaddr 100 e) Установка времени жизни адреса в кеше (в секундах): # ifconfig bridge0 timeout 1000 f) Обнуление динамически запомненной таблицы коммутации (очистка кеша адресов): # ifconfig bridge0 flush g) Обнуление всей таблицы коммутации( удаляются даже статически заданные адреса). # ifconfig bridge0 flushall h) Добавление статической записи в таблицу коммутации (кеш адресов): # ifconfig bridge0 static fxp0 00:11:22:33:44:55 i) Удаление адреса из кеша (таблицы коммутации): # ifconfig bridge0 deladdr 00:11:22:33:44:55 j) Установка/Снятие атрибута learning на отдельном интерфейсе (то есть создаётся ли динамически кеш адресов на интерфейсе): # ifconfig bridge0 learn fxp0 # ifconfig bridge0 -learn fxp0 k) Включение/Выключение работы STP протокола на интерфейсе: # ifconfig bridge0 stp fxp0 # ifconfig bridge0 -stp fxp0 l) Управление работой протокола STP на интерфейсах - читайте в man ifconfig про : maxage, fwddelay, hellotime, priority, ifpriority, ifpathcost.

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Павел (??), 11:03, 29/12/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "На "промежуточном" интерфейсе (net.link.bridge.pfil_bridge=1)"

    гы гы гы... ув. автор, почитайте плиз ман, он говорит:
    net.link.bridge.pfil_bridge  Set to 1 to enable filtering on the bridge interface, set to 0 to disable it.

    т.е. это фильтрация на САМОМ бридже, а не на некоем "промежуточном" интерфейсе ;)

    "ipfw add 100 allow mac-type arp  (Всё же разрешим прохождение arp пакетов сквозь мост)"

    сразу видно старую школу! :) это было нужно когда мы юзали options BRIDGE, а теперь этого не надо, т.к. опять же по ману:
    ARP and REVARP packets are forwarded without being filtered and others that are not IP nor IPv6 packets are not forwarded when pfil(9) filtering is enabled.

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

    почему то забыта net.link.bridge.ipfw установка которой кстати обнуляет net.link.bridge.pfil_member и net.link.bridge.pfil_bridge

    вообще статья хорошая, для новичков прямо таки золотая, единственное что осталось нераскрытым (помимо темы сисек:)) это то что можно юзать polling при поднятии интерфейсов, чем увеличить производительность моста в целом, т.е. можно было сделать:
    ifconfig_fxp0="polling up"
    ifconfig_fxp1="polling up"
    cloned_interfaces="bridge0"
    ifconfig_bridge0="addm fxp0 addm fxp1 up"

    ну и можно жеж было для новичков написать что таки можно привинтить dummynet к мосту а то ведь будут мучиться :)

     
     
  • 2.2, vippy (??), 17:30, 02/01/2006 [^] [^^] [^^^] [ответить]  
  • +/
    А что такое по-вашему вообще bridge 0-9 , создаваемый запуском ifconfig Это ка... большой текст свёрнут, показать
     

  • 1.3, Cover_Story (ok), 15:16, 21/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Начал компилировать ядро: config BRIDGE.
    Система выдала ошибку:
    config: BRIDGE:284: syntax error

    В этой строке стоит следующее:
    device if_bridge

    Как быть?

    ОС freebsd 6.0

    Спасибо

     
     
  • 2.4, Dimm (??), 19:15, 25/04/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Ключевая фраза "В коде FreeBSD 5-STABLE и 6-STABLE ..."
     

  • 1.5, volos (?), 01:39, 27/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Статья классная! Афтору зачот!

    Вопрос такой - у меня в ядре есть код старого BRIDGE и новое, описанное в этой статье. Работать будет нормально? А то ядро пересобирать лениво!

     
  • 1.6, Cover_Story (ok), 18:27, 27/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
            # ipfw add 500 allow ip from not 10.0.1.0/24 to 10.0.1.0/24 in via fxp0 (Разрешили все )
                                                                 ( входящие пакеты с сети во внутрь)

    Извините но я не понял вот эту строчку!!!
    not 10.0.1.0/24 - это что?

     
     
  • 2.8, volos (?), 20:07, 01/05/2006 [^] [^^] [^^^] [ответить]  
  • +/
    работает
     

  • 1.7, Cover_Story (ok), 18:43, 27/04/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
            # ipfw add 500 allow ip from not 10.0.1.0/24 to 10.0.1.0/24 in via fxp0 (Разрешили все )
                                                                 ( входящие пакеты с сети во внутрь)

    Извините но я не понял вот эту строчку!!!
    not 10.0.1.0/24 - это что?

     
  • 1.9, Cover_Story (ok), 10:30, 04/05/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня работала потом перестала как проверить в чем проблема!
     
  • 1.10, Аноним (-), 14:07, 05/05/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Порекомендую всем использующим if_bridge увеличить кеш адресов в таблице коммутации(по умолчанию выставлено 100): # ifconfig bridge0 maxaddr 1000
     
     
  • 2.11, tolik (??), 01:56, 09/08/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >Порекомендую всем использующим if_bridge увеличить кеш адресов в таблице коммутации(по умолчанию выставлено
    >100): # ifconfig bridge0 maxaddr 1000

    Очень толковая статья, сделал всё так же на радиомосте, но после поднятия бриджа скорость между интерфейсами bridge0(ath0+rl0) упала с 49 Mbit/s упала до 2kbit/s, фильтры все повыключал, поллинг поднял правила файервола установил allow from any to any.В качестве радиосегмента использовал пару длинков на Атеровсом чипсете DWL-520G, которые поднялись без особых усилий и дали почти заявленную скорость соединения в 54Мбит/с.

    Скажите где грабли?

     
     
  • 3.13, weldpua2008 (ok), 00:07, 07/12/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Очень толковая статья, сделал всё так же на радиомосте, но после поднятия бриджа скорость между интерфейсами bridge0(ath0+rl0) упала с 49 Mbit/s упала до 2kbit/s, фильтры все повыключал, поллинг поднял правила файервола установил allow from any to any.В качестве радиосегмента использовал пару длинков на Атеровсом чипсете DWL-520G, которые поднялись без особых усилий и дали почти заявленную скорость соединения в 54Мбит/с.


    }{м У Меня проблема такая -
    ставлю бридж фильтрующий - все ок. потом его же соеденяю с другой частью сети wi-fi и тут начинаются грабли - Инет начинает тормозить :((( Пинг пропадает на сервер

     

  • 1.12, Basteon (?), 07:33, 08/10/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как заставить ходить через мосит PPPoE?
    У меня не видится сервис по другую сторону моста.
    # sysctl net.link.bridge.pfil_member
    net.link.bridge.pfil_member: 1
    # sysctl net.link.bridge.pfil_bridge
    net.link.bridge.pfil_bridge: 1
    Но поскольку фильтрация выполняется на L3, то это не должно мешать работе протоколов уровня L2.
    Плиз, подскажите что не так?
     
     
  • 2.14, gpa (?), 20:59, 05/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >А как заставить ходить через мосит PPPoE?

    sysctl net.link.bridge.pfil_onlyip=0


     
     
  • 3.15, weldpua2008 (??), 13:25, 06/01/2007 [^] [^^] [^^^] [ответить]  
  • +/
    ХМ
    Сегодня поставил ФРЯХУ 6,2рс1
    Сделал мост if_bridge
    Поставил шейперить
    Так вот что стренно
    пишу запустить весь icmp траффик от всех всем в pipe такой-то ширины - работает
    Пишу запустить траффик от того-то тому-то в pipe такой-то ширины
    Качаю по фтп - пишет ipfw show что в это правило вошли пакеты - но оскорость не режится :(
    Смотрю ipfw pipe show
    пишет ит такой-то к такому-то скорость такаято а в самом начале - протокол icmp!!!
    А как же остольное???
    Пишу правило загнать трафик от всех к всем по протоколу tcp или udp - на правило не отозвалось ни одного пакета
    Что не подтюнил?
    Пытался sysctl-ом поправить но видимо какой-то переменно не знаю

     

  • 1.16, weldpua2008 (ok), 03:41, 17/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    }{elp тут http://www.opennet.ru/openforum/vsluhforumID1/71502.html
     
  • 1.17, ig0r (??), 14:05, 14/04/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделал как описано в статье. ОС FreeBSD 6.1.Сначало работает нормально, но после прокачки около 100Мб перестают ходить данные.
    Опускаю,поднимаю интерфэйс опять начинает работать, до тех пор пока не прокачаются следующие 100 метров. В чём может быть проблема?
     
  • 1.18, Mihalych (?), 20:08, 27/04/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    neon! Ты мозг!
     
  • 1.19, Андрей (??), 20:45, 27/04/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А каким правилом можно закрыть один(отдельный) порт???тоесть чтобы пакеты с назначение допустим порт 1200 не проходил через мост...
     
     
  • 2.20, Fire_Anton (ok), 05:09, 15/05/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Какие системные требования к этому методу?

    Я сначала поставил это дело на 180мегогерц работало на 5мбит, загрузка ЦП была на 100процентов
    Потом поставил на 1800 работало на 100мбит. Но загрузка ЦП тоже на 100процентов.

    Какой прикол? Чем больше даш, тем больше съест?

     
     
  • 3.21, weldpua2008 (ok), 11:47, 15/05/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >Какие системные требования к этому методу?
    >
    >Я сначала поставил это дело на 180мегогерц работало на 5мбит, загрузка ЦП
    >была на 100процентов
    >Потом поставил на 1800 работало на 100мбит. Но загрузка ЦП тоже на
    >100процентов.
    >
    >Какой прикол? Чем больше даш, тем больше съест?
    Может включен полинг?И вместо idle Он грузит проц?
    Или наоборот - включите полинг :)

     
     
  • 4.22, Fire_Anton (ok), 18:46, 15/05/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >Может включен полинг?И вместо idle Он грузит проц?
    >Или наоборот - включите полинг :)

    А как его включить? Или выключить?
    Тут в примере написан то он не работает.

     
     
  • 5.23, weldpua2008 (ok), 00:52, 16/05/2007 [^] [^^] [^^^] [ответить]  
  • +/
    >>Может включен полинг?И вместо idle Он грузит проц?
    >>Или наоборот - включите полинг :)
    >
    >А как его включить? Или выключить?
    >Тут в примере написан то он не работает.
    Значит ВАМ НАДО ВКЛЮЧИТЬ - иначе Я допускаю что так как Вы не знаете что это - то и не включали...
    Ищем по "polling или poling или полинг" - вкомпиливается в ядро - У Меня на 6-ке
    options DEVICE_POLLING
    А вообще Там со старыми версиямы были баги при включеном smp
    Он (полинг) снижает нагрузку на проц - особенно это гуд для всякихз роутеров в том числе Мостов


     
     
  • 6.24, Fire_Anton (ok), 01:01, 16/05/2007 [^] [^^] [^^^] [ответить]  
  • +/

    >У Меня на 6-ке
    >options DEVICE_POLLING
    >А вообще Там со старыми версиямы были баги при включеном smp

    У меня слава богу тоже 6-ка :)

    Теперь второй вопрос. У меня есть ВЛан 4002 и надо сделать так, что-бы он был виден через мост. Как это сделать?


     
  • 2.25, Fire_Anton (ok), 09:36, 18/06/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Не хочет форвордить пакеты 53-го порта. Смотрю на фаервол вроде бы пишет, что форвординг проходит. А пробую по имени ДНСа обратится от него не знает. От куда делаю вывод, что он нифига не форвордит. Где грабли?
     

  • 1.26, Gaidamak (?), 15:58, 05/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Медитировал над этой статьей, есть непонятка. В случае с тремя портами на мосту на какой из двух портов уйдет пакет, пришедший на третий порт? Как это регулировать?
     
  • 1.27, valentin (??), 21:36, 19/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не получается выпустить пакеты исходящие из внутреней  сети. Сделал все как описано. С мира пускает на те машины и на сам бридж. А вот с самой машины наружу нельзя вылезти. При том правила уже прописывал,которые должны выпускать. Именно что-то на уровне интерфейсов бок. Помогите плиз
     
  • 1.28, HVVPR7 (?), 18:21, 14/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    .... а как поднять мост через tun0?   ... то есть это.... дать виртуальной машине инет через tun0 ?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру