adron2 Posted June 5, 2014 Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже? Скажем есть бридж с портами:eth0, eth1, eth2, eth3 и нужно чтобы eth1, eth2, eth3 могли передавать и принимать данные с eth0 но не передавали данные между собой. некий аналог port isolation в свитчах dlink dgs 3200 или mikrotik rb260. Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности. Смотрел еще iproute2-> bridge но там только по вланам. А нужно именно port isolation по интерфейсам. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vitalyb Posted June 5, 2014 Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности. откуда такой вывод? дропаете с и в логические порты трафик одним правилом и всё. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pfexec Posted June 6, 2014 Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже?нету. в линагзе бридж убогий генератор петель и не более. нельзя как во фряше сказать ifconfig $bridge private $interface нескольким интерфейсам и выключить свитчинг между ними. там вообще много чего нельзя сделать.так что пишите правила в ebtables Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted June 6, 2014 (edited) Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже?нету. в линагзе бридж убогий генератор петель и не более. нельзя как во фряше сказать ifconfig $bridge private $interface нескольким интерфейсам и выключить свитчинг между ними. там вообще много чего нельзя сделать.так что пишите правила в ebtables Да вы правы. Вот как раз как во фре это сделать я и нашел ) Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности. откуда такой вывод? дропаете с и в логические порты трафик одним правилом и всё. Правил уже будет как минимум два. На вход и на выход. И третье на дроп. Edited June 6, 2014 by adron2 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted June 6, 2014 зяглянул в исходник ebtables. Стало жутко от неоптимальности кода. Конечно круто делать для каждого пакета сравнение по имени интерфейса(аля strcmp). Но помоему это перебор. Неужели блин никто за столько лет не запилил патч для ядра чтобы сделать банальную изоляцию портов у бриджа? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 6, 2014 Щас активно пилят бридж в линуксе, может оно скоро появится. Ещё посмотрите в сторону ovs, может там есть Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted June 6, 2014 (edited) Щас активно пилят бридж в линуксе, может оно скоро появится. Ещё посмотрите в сторону ovs, может там есть Это радует что пилят ) Исходники ebtables древние как дерьмо мамонта. В сновном все за 2002 год ) ... ovs смотрел. Но воопервых оно как бы для виртуализации больше а во вторых я не нашел там изоляции. Только возможность фильтрации по вланам(что iproute2 и так умеет). Может плохо смотрел? Но...не нашел. Edited June 6, 2014 by adron2 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted June 9, 2014 Попробуйте OpenVSwitch, очень фичастая штука. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted June 9, 2014 я уже предлагал и автор говорит что нет там порт-изоляции Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vitalyb Posted June 10, 2014 Правил уже будет как минимум два. На вход и на выход. Попробуйте переименовать интерфейсы, например так: eth1->ieth1, eth2->ieth2, eth3->ieth3 и отфильтровать, например так ebtables -A FORWARD -i ieth+ -o ieth+ -j DROP Красивее было бы через devgroup, но не уверен, что ebtables это умеет. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lipton Posted November 18, 2015 (edited) Извиняюсь за некропостинг, но возник похожий на ТС вопрос, только вот даже с помощью ebtables я не могу изолировать трафик. Есть роутер wr740n, на нем стоит OpenWrt, есть 2 интерфейса - eth1 - wan порт и eth0 - свич из четырех портов. Задача в принципе такая же как у ТС, необходимо изолировать порты свича между собой, при этом трафик от wan порта к каждому порту свича ходить должен. Пытался решить задачу с помощью swconfig, но ничего не получилось... Может кто то осуществлял подобное на OpenWrt? Edited November 18, 2015 by Lipton Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 18, 2015 Извиняюсь за некропостинг, но возник похожий на ТС вопрос, только вот даже с помощью ebtables я не могу изолировать трафик. Есть роутер wr740n, на нем стоит OpenWrt, есть 2 интерфейса - eth1 - wan порт и eth0 - свич из четырех портов. Задача в принципе такая же как у ТС, необходимо изолировать порты свича между собой, при этом трафик от wan порта к каждому порту свича ходить должен. Пытался решить задачу с помощью swconfig, но ничего не получилось... Может кто то осуществлял подобное на OpenWrt? я задачу решил ebtables-ом. он отлично все изолирует. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lipton Posted November 18, 2015 я задачу решил ebtables-ом. он отлично все изолирует. Можешь подробнее? Для каждого интерфейса правила или только для аплинка? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 18, 2015 я задачу решил ebtables-ом. он отлично все изолирует. Можешь подробнее? Для каждого интерфейса правила или только для аплинка? для начала вам нужно каждый порт свитча вынести в отдельный влан и из вланов и wan-а(eth1)собрать бридж: config interface 'sw' option ifname 'eth1 eth0.2 eth0.3 eth0.4 eth0.5' option type 'bridge' option proto 'static' option ipaddr '10.255.255.1' option netmask '255.255.255.0' config switch option name 'switch0' option reset '1' option enable_vlan '1' config switch_vlan option device 'switch0' option vlan '2' option ports '0t 2' config switch_vlan option device 'switch0' option vlan '3' option ports '0t 3' config switch_vlan option device 'switch0' option vlan '4' option ports '0t 4' config switch_vlan option device 'switch0' option vlan '5' option ports '0t 5' затем изолируем трафик(разрешаем трафик только с или на wan внутри бриджа): ebtables -N SW ebtables -P SW DROP ebtables -A FORWARD --logical-in sw --logical-out sw -j SW ebtables -A SW -o eth1 -j ACCEPT ebtables -A SW -i eth1 -j ACCEPT Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lipton Posted November 18, 2015 adron2 почти все заработало, но клиенты почему то не получают адреса по dhcp, один или 2 раза получили адреса и все работало как надо, но это происходит очень редко. Может быть для броадкаста надо отдельные правила в ebtables? Чтобы они ходили из lan портов в wan и обратно? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 18, 2015 Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно. У провайдера нет ограничения кол-ва маков на порт? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lipton Posted November 18, 2015 Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно. У провайдера нет ограничения кол-ва маков на порт? Мы сами провайдер)) Сегодня проверим схему в полях, может быть на столе возникла проблема на вышестоящем сохо роутере. Все же сейчас закралось сомнение, что мак адрес клиента подменяется на мак eth1. В любом случае к вечеру будет известно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 18, 2015 Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно. У провайдера нет ограничения кол-ва маков на порт? Мы сами провайдер)) Сегодня проверим схему в полях, может быть на столе возникла проблема на вышестоящем сохо роутере. Все же сейчас закралось сомнение, что мак адрес клиента подменяется на мак eth1. В любом случае к вечеру будет известно. такого не может быть. бридж полностью прозрачен. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lipton Posted November 19, 2015 adron2 Огромный респект! В полях все заработало как надо. При 100 мегабитной прокачке загрузка цпу не более 15%, что говорит о незначительных требованиях бриджевания и ebtables. Вопрос еще возник небольшой относительно свича, можно на нем как то просматривать мак адреса на конкретных портах? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 19, 2015 adron2 Огромный респект! В полях все заработало как надо. При 100 мегабитной прокачке загрузка цпу не более 15%, что говорит о незначительных требованиях бриджевания и ebtables. Вопрос еще возник небольшой относительно свича, можно на нем как то просматривать мак адреса на конкретных портах? Смотря какой свитч. Если что то на атхеросе то нет. Там очень убогий драйвер. Вы можете маки просматривать в самом бридже: brctl showmacs sw где sw это имя интерфейса бриджа. но это при условии что у вас стоит полная версия brctl-я а не кастрированная bysybox-овская. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lipton Posted November 19, 2015 (edited) Смотря какой свитч. Если что то на атхеросе то нет. как раз он самый: AR7240/AR9330 :( Вы можете маки просматривать в самом бридже: brctl showmacs sw где sw это имя интерфейса бриджа. но это при условии что у вас стоит полная версия brctl-я а не кастрированная bysybox-овская. как раз урезанная, и в пакетах bridge-utils я не нашел. Можно конечно попробовать скомпилить под qemu из исходников или прямо на роутере, но вопрос, что мне это даст? Если brctl showmac br0 мне покажет только все маки в бридже - то это бессмысленно, я их и так увижу на вышестоящем свиче... Жаль конечно, если это нереализуемо, но что мы хотим от прибора за 1к руб... Edited November 19, 2015 by Lipton Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 19, 2015 Смотря какой свитч. Если что то на атхеросе то нет. как раз он самый: AR7240/AR9330 :( Вы можете маки просматривать в самом бридже: brctl showmacs sw где sw это имя интерфейса бриджа. как раз урезанная, и в пакетах bridge-utils я не нашел. Можно конечно попробовать скомпилить под qemu из исходников или прямо на роутере, но вопрос, что мне это даст? Если brctl showmac br0 мне покажет только все маки в бридже - то это бессмысленно, я их и так увижу на вышестоящем свиче... Жаль конечно, если это нереализуемо, но что мы хотим от прибора за 1к руб... Он покажет что то типа такого: brctl showmacs br-vlan190 port no mac addr is local? ageing timer 1 00:25:90:36:1b:5f no 0.06 6 4c:5e:0c:01:5a:16 no 16.72 6 4c:5e:0c:01:5a:18 no 16.71 5 4c:5e:0c:20:af:6f no 0.27 6 4c:5e:0c:3e:ae:e8 no 70.18 1 ba:b5:2f:51:70:e4 yes 0.00 2 ba:b5:2f:51:79:1a yes 0.00 3 ba:b5:2f:51:79:1b yes 0.00 4 ba:b5:2f:51:79:1c yes 0.00 5 ba:b5:2f:51:79:1d yes 0.00 6 ba:b5:2f:51:79:1e yes 0.00 6 ba:ca:6d:1e:79:1e no 0.24 3 d4:ca:6d:1d:e5:00 no 0.26 а номера портов можно посмотреть вот так: brctl showstp br-vlan190 br-vlan190 bridge id 8000.bab52f5170e4 designated root 8000.bab52f5170e4 root port 0 path cost 0 max age 20.00 bridge max age 20.00 hello time 2.00 bridge hello time 2.00 forward delay 15.00 bridge forward delay 15.00 ageing time 300.00 hello timer 0.93 tcn timer 0.00 topology change timer 0.00 gc timer 179.51 flags vlan190M253 (1) port id 8001 state forwarding designated root 8000.bab52f5170e4 path cost 100 designated bridge 8000.bab52f5170e4 message age timer 0.00 designated port 8001 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags vlan190S002 (2) port id 8002 state forwarding designated root 8000.bab52f5170e4 path cost 100 designated bridge 8000.bab52f5170e4 message age timer 0.00 designated port 8002 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags vlan190S003 (3) port id 8003 state forwarding designated root 8000.bab52f5170e4 path cost 100 designated bridge 8000.bab52f5170e4 message age timer 0.00 designated port 8003 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags vlan190S004 (4) port id 8004 state forwarding designated root 8000.bab52f5170e4 path cost 100 designated bridge 8000.bab52f5170e4 message age timer 0.00 designated port 8004 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags vlan190S005 (5) port id 8005 state forwarding designated root 8000.bab52f5170e4 path cost 100 designated bridge 8000.bab52f5170e4 message age timer 0.00 designated port 8005 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags vlan190S006 (6) port id 8006 state forwarding designated root 8000.bab52f5170e4 path cost 100 designated bridge 8000.bab52f5170e4 message age timer 0.00 designated port 8006 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 19, 2015 Я тоже для своих нужд как раз bridge-utils под openwrt собирал и именно чтобы смотреть какой мак в каком порту :-) Самого пакета под рукой сейчас нет(сервер разработки далеко и выключен) а вот с работающей железки brctl стянуть удалось. Можете себе скопировать и попробовать: brctl Кстати для сборки пакетов под openwrt qemu не нужен. там своя среда сборки под обычный процессор. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Lipton Posted November 19, 2015 Самого пакета под рукой сейчас нет(сервер разработки далеко и выключен) а вот с работающей железки brctl стянуть удалось. Можете себе скопировать и попробовать: brctl к сожалению бинарника мало: mv /usr/sbin/brctl /usr/sbin/brctl.bk cp /tmp/brctl /usr/sbin/brctl chmod +x /usr/sbin/brctl brctl show -ash: brctl: not found видимо пакет еще что то прописывает... Кстати для сборки пакетов под openwrt qemu не нужен. там своя среда сборки под обычный процессор. ну, я вроде про тулчейн в курсе, но хотел то не пакет собрать а бинарник и его сунуть прямо в роутер, но видимо не тут то было... Сейчас буду пробовать пакет собирать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
adron2 Posted November 19, 2015 Самого пакета под рукой сейчас нет(сервер разработки далеко и выключен) а вот с работающей железки brctl стянуть удалось. Можете себе скопировать и попробовать: brctl к сожалению бинарника мало: mv /usr/sbin/brctl /usr/sbin/brctl.bk cp /tmp/brctl /usr/sbin/brctl chmod +x /usr/sbin/brctl brctl show -ash: brctl: not found видимо пакет еще что то прописывает... Кстати для сборки пакетов под openwrt qemu не нужен. там своя среда сборки под обычный процессор. ну, я вроде про тулчейн в курсе, но хотел то не пакет собрать а бинарник и его сунуть прямо в роутер, но видимо не тут то было... Сейчас буду пробовать пакет собирать. покажите ldd /usr/sbin/brctl у меня вот так: ldd /usr/sbin/brctl libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x77103000) libc.so.0 => /lib/libc.so.0 (0x77096000) ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x77126000) Странно. Попробовал этот бинарник в TPLINK какой то там абонентский запихать со стандартной openwrt прошивкой. работает на ура.. root@plax:/tmp# wget http://adron-nout.yapic.net/openwrt/brctl/brctl Connecting to adron-nout.yapic.net (195.189.99.194:80) brctl 100% |*****************************************************************************| 20325 0:00:00 ETA root@plax:/tmp# chmod +x ./brctl root@plax:/tmp# ./brctl Usage: brctl [commands] commands: addbr <bridge> add bridge delbr <bridge> delete bridge addif <bridge> <device> add interface to bridge delif <bridge> <device> delete interface from bridge hairpin <bridge> <port> {on|off} turn hairpin on/off setageing <bridge> <time> set ageing time setbridgeprio <bridge> <prio> set bridge priority setfd <bridge> <time> set bridge forward delay sethello <bridge> <time> set hello time setmaxage <bridge> <time> set max message age setpathcost <bridge> <port> <cost> set path cost setportprio <bridge> <port> <prio> set port priority show [ <bridge> ] show a list of bridges showmacs <bridge> show a list of mac addrs showstp <bridge> show bridge stp info stp <bridge> {on|off} turn stp on/off root@plax:/tmp# ./brctl showmacs br-lan port no mac addr is local? ageing timer 1 00:0c:42:f8:5c:f9 no 0.73 1 00:27:22:dc:db:f2 no 17.84 1 dc:9f:db:e4:1c:ce no 33.35 1 f8:1a:67:f2:05:e0 yes 0.00 root@plax:/tmp# Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...