adron2 Опубликовано 5 июня, 2014 · Жалоба Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже? Скажем есть бридж с портами:eth0, eth1, eth2, eth3 и нужно чтобы eth1, eth2, eth3 могли передавать и принимать данные с eth0 но не передавали данные между собой. некий аналог port isolation в свитчах dlink dgs 3200 или mikrotik rb260. Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности. Смотрел еще iproute2-> bridge но там только по вланам. А нужно именно port isolation по интерфейсам. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vitalyb Опубликовано 5 июня, 2014 · Жалоба Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности. откуда такой вывод? дропаете с и в логические порты трафик одним правилом и всё. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pfexec Опубликовано 6 июня, 2014 · Жалоба Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже?нету. в линагзе бридж убогий генератор петель и не более. нельзя как во фряше сказать ifconfig $bridge private $interface нескольким интерфейсам и выключить свитчинг между ними. там вообще много чего нельзя сделать.так что пишите правила в ebtables Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 6 июня, 2014 (изменено) · Жалоба Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже?нету. в линагзе бридж убогий генератор петель и не более. нельзя как во фряше сказать ifconfig $bridge private $interface нескольким интерфейсам и выключить свитчинг между ними. там вообще много чего нельзя сделать.так что пишите правила в ebtables Да вы правы. Вот как раз как во фре это сделать я и нашел ) Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности. откуда такой вывод? дропаете с и в логические порты трафик одним правилом и всё. Правил уже будет как минимум два. На вход и на выход. И третье на дроп. Изменено 6 июня, 2014 пользователем adron2 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 6 июня, 2014 · Жалоба зяглянул в исходник ebtables. Стало жутко от неоптимальности кода. Конечно круто делать для каждого пакета сравнение по имени интерфейса(аля strcmp). Но помоему это перебор. Неужели блин никто за столько лет не запилил патч для ядра чтобы сделать банальную изоляцию портов у бриджа? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 6 июня, 2014 · Жалоба Щас активно пилят бридж в линуксе, может оно скоро появится. Ещё посмотрите в сторону ovs, может там есть Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 6 июня, 2014 (изменено) · Жалоба Щас активно пилят бридж в линуксе, может оно скоро появится. Ещё посмотрите в сторону ovs, может там есть Это радует что пилят ) Исходники ebtables древние как дерьмо мамонта. В сновном все за 2002 год ) ... ovs смотрел. Но воопервых оно как бы для виртуализации больше а во вторых я не нашел там изоляции. Только возможность фильтрации по вланам(что iproute2 и так умеет). Может плохо смотрел? Но...не нашел. Изменено 6 июня, 2014 пользователем adron2 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavel.odintsov Опубликовано 9 июня, 2014 · Жалоба Попробуйте OpenVSwitch, очень фичастая штука. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
s.lobanov Опубликовано 9 июня, 2014 · Жалоба я уже предлагал и автор говорит что нет там порт-изоляции Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
vitalyb Опубликовано 10 июня, 2014 · Жалоба Правил уже будет как минимум два. На вход и на выход. Попробуйте переименовать интерфейсы, например так: eth1->ieth1, eth2->ieth2, eth3->ieth3 и отфильтровать, например так ebtables -A FORWARD -i ieth+ -o ieth+ -j DROP Красивее было бы через devgroup, но не уверен, что ebtables это умеет. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lipton Опубликовано 18 ноября, 2015 (изменено) · Жалоба Извиняюсь за некропостинг, но возник похожий на ТС вопрос, только вот даже с помощью ebtables я не могу изолировать трафик. Есть роутер wr740n, на нем стоит OpenWrt, есть 2 интерфейса - eth1 - wan порт и eth0 - свич из четырех портов. Задача в принципе такая же как у ТС, необходимо изолировать порты свича между собой, при этом трафик от wan порта к каждому порту свича ходить должен. Пытался решить задачу с помощью swconfig, но ничего не получилось... Может кто то осуществлял подобное на OpenWrt? Изменено 18 ноября, 2015 пользователем Lipton Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 18 ноября, 2015 · Жалоба Извиняюсь за некропостинг, но возник похожий на ТС вопрос, только вот даже с помощью ebtables я не могу изолировать трафик. Есть роутер wr740n, на нем стоит OpenWrt, есть 2 интерфейса - eth1 - wan порт и eth0 - свич из четырех портов. Задача в принципе такая же как у ТС, необходимо изолировать порты свича между собой, при этом трафик от wan порта к каждому порту свича ходить должен. Пытался решить задачу с помощью swconfig, но ничего не получилось... Может кто то осуществлял подобное на OpenWrt? я задачу решил ebtables-ом. он отлично все изолирует. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lipton Опубликовано 18 ноября, 2015 · Жалоба я задачу решил ebtables-ом. он отлично все изолирует. Можешь подробнее? Для каждого интерфейса правила или только для аплинка? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lipton Опубликовано 18 ноября, 2015 · Жалоба adron2 почти все заработало, но клиенты почему то не получают адреса по dhcp, один или 2 раза получили адреса и все работало как надо, но это происходит очень редко. Может быть для броадкаста надо отдельные правила в ebtables? Чтобы они ходили из lan портов в wan и обратно? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 18 ноября, 2015 · Жалоба Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно. У провайдера нет ограничения кол-ва маков на порт? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lipton Опубликовано 18 ноября, 2015 · Жалоба Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно. У провайдера нет ограничения кол-ва маков на порт? Мы сами провайдер)) Сегодня проверим схему в полях, может быть на столе возникла проблема на вышестоящем сохо роутере. Все же сейчас закралось сомнение, что мак адрес клиента подменяется на мак eth1. В любом случае к вечеру будет известно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 18 ноября, 2015 · Жалоба Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно. У провайдера нет ограничения кол-ва маков на порт? Мы сами провайдер)) Сегодня проверим схему в полях, может быть на столе возникла проблема на вышестоящем сохо роутере. Все же сейчас закралось сомнение, что мак адрес клиента подменяется на мак eth1. В любом случае к вечеру будет известно. такого не может быть. бридж полностью прозрачен. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lipton Опубликовано 19 ноября, 2015 · Жалоба adron2 Огромный респект! В полях все заработало как надо. При 100 мегабитной прокачке загрузка цпу не более 15%, что говорит о незначительных требованиях бриджевания и ebtables. Вопрос еще возник небольшой относительно свича, можно на нем как то просматривать мак адреса на конкретных портах? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 19 ноября, 2015 · Жалоба adron2 Огромный респект! В полях все заработало как надо. При 100 мегабитной прокачке загрузка цпу не более 15%, что говорит о незначительных требованиях бриджевания и ebtables. Вопрос еще возник небольшой относительно свича, можно на нем как то просматривать мак адреса на конкретных портах? Смотря какой свитч. Если что то на атхеросе то нет. Там очень убогий драйвер. Вы можете маки просматривать в самом бридже: brctl showmacs sw где sw это имя интерфейса бриджа. но это при условии что у вас стоит полная версия brctl-я а не кастрированная bysybox-овская. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lipton Опубликовано 19 ноября, 2015 (изменено) · Жалоба Смотря какой свитч. Если что то на атхеросе то нет. как раз он самый: AR7240/AR9330 :( Вы можете маки просматривать в самом бридже: brctl showmacs sw где sw это имя интерфейса бриджа. но это при условии что у вас стоит полная версия brctl-я а не кастрированная bysybox-овская. как раз урезанная, и в пакетах bridge-utils я не нашел. Можно конечно попробовать скомпилить под qemu из исходников или прямо на роутере, но вопрос, что мне это даст? Если brctl showmac br0 мне покажет только все маки в бридже - то это бессмысленно, я их и так увижу на вышестоящем свиче... Жаль конечно, если это нереализуемо, но что мы хотим от прибора за 1к руб... Изменено 19 ноября, 2015 пользователем Lipton Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 19 ноября, 2015 · Жалоба Я тоже для своих нужд как раз bridge-utils под openwrt собирал и именно чтобы смотреть какой мак в каком порту :-) Самого пакета под рукой сейчас нет(сервер разработки далеко и выключен) а вот с работающей железки brctl стянуть удалось. Можете себе скопировать и попробовать: brctl Кстати для сборки пакетов под openwrt qemu не нужен. там своя среда сборки под обычный процессор. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Lipton Опубликовано 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 не нужен. там своя среда сборки под обычный процессор. ну, я вроде про тулчейн в курсе, но хотел то не пакет собрать а бинарник и его сунуть прямо в роутер, но видимо не тут то было... Сейчас буду пробовать пакет собирать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
adron2 Опубликовано 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# Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...