Перейти к содержимому
Калькуляторы

linux bridge port isolation linux bridge port isolation

Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже?

Скажем есть бридж с портами:eth0, eth1, eth2, eth3

и нужно чтобы eth1, eth2, eth3 могли передавать и принимать данные с eth0 но не передавали данные между собой.

некий аналог port isolation в свитчах dlink dgs 3200 или mikrotik rb260.

 

Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности.

Смотрел еще iproute2-> bridge но там только по вланам. А нужно именно port isolation по интерфейсам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности.

откуда такой вывод? дропаете с и в логические порты трафик одним правилом и всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже?
нету. в линагзе бридж убогий генератор петель и не более. нельзя как во фряше сказать ifconfig $bridge private $interface нескольким интерфейсам и выключить свитчинг между ними. там вообще много чего нельзя сделать.

так что пишите правила в ebtables

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собственно интересует вопрос есть ли в линуксе возможность изоляции портов в бридже?
нету. в линагзе бридж убогий генератор петель и не более. нельзя как во фряше сказать ifconfig $bridge private $interface нескольким интерфейсам и выключить свитчинг между ними. там вообще много чего нельзя сделать.

так что пишите правила в ebtables

 

Да вы правы. Вот как раз как во фре это сделать я и нашел )

 

Понимаю что можно сделать через ebtables но это на мой взгляд слишком накладно с точки зрения производительности.

откуда такой вывод? дропаете с и в логические порты трафик одним правилом и всё.

 

Правил уже будет как минимум два. На вход и на выход.

И третье на дроп.

Изменено пользователем adron2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

зяглянул в исходник ebtables. Стало жутко от неоптимальности кода.

Конечно круто делать для каждого пакета сравнение по имени интерфейса(аля strcmp). Но помоему это перебор. Неужели блин никто за столько лет не запилил патч для ядра чтобы сделать банальную изоляцию портов у бриджа?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Щас активно пилят бридж в линуксе, может оно скоро появится. Ещё посмотрите в сторону ovs, может там есть

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Щас активно пилят бридж в линуксе, может оно скоро появится. Ещё посмотрите в сторону ovs, может там есть

 

Это радует что пилят )

Исходники ebtables древние как дерьмо мамонта. В сновном все за 2002 год )

...

ovs смотрел. Но воопервых оно как бы для виртуализации больше а во вторых я не нашел там изоляции.

Только возможность фильтрации по вланам(что iproute2 и так умеет). Может плохо смотрел? Но...не нашел.

Изменено пользователем adron2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуйте OpenVSwitch, очень фичастая штука.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я уже предлагал и автор говорит что нет там порт-изоляции

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Правил уже будет как минимум два. На вход и на выход.

Попробуйте переименовать интерфейсы, например так: eth1->ieth1, eth2->ieth2, eth3->ieth3 и отфильтровать, например так

ebtables -A FORWARD -i ieth+ -o ieth+ -j DROP

 

Красивее было бы через devgroup, но не уверен, что ebtables это умеет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Извиняюсь за некропостинг, но возник похожий на ТС вопрос, только вот даже с помощью ebtables я не могу изолировать трафик. Есть роутер wr740n, на нем стоит OpenWrt, есть 2 интерфейса - eth1 - wan порт и eth0 - свич из четырех портов. Задача в принципе такая же как у ТС, необходимо изолировать порты свича между собой, при этом трафик от wan порта к каждому порту свича ходить должен. Пытался решить задачу с помощью swconfig, но ничего не получилось... Может кто то осуществлял подобное на OpenWrt?

Изменено пользователем Lipton

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Извиняюсь за некропостинг, но возник похожий на ТС вопрос, только вот даже с помощью ebtables я не могу изолировать трафик. Есть роутер wr740n, на нем стоит OpenWrt, есть 2 интерфейса - eth1 - wan порт и eth0 - свич из четырех портов. Задача в принципе такая же как у ТС, необходимо изолировать порты свича между собой, при этом трафик от wan порта к каждому порту свича ходить должен. Пытался решить задачу с помощью swconfig, но ничего не получилось... Может кто то осуществлял подобное на OpenWrt?

 

я задачу решил ebtables-ом. он отлично все изолирует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я задачу решил ebtables-ом. он отлично все изолирует.

Можешь подробнее? Для каждого интерфейса правила или только для аплинка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я задачу решил 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

adron2

почти все заработало, но клиенты почему то не получают адреса по dhcp, один или 2 раза получили адреса и все работало как надо, но это происходит очень редко. Может быть для броадкаста надо отдельные правила в ebtables? Чтобы они ходили из lan портов в wan и обратно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно.

У провайдера нет ограничения кол-ва маков на порт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно.

У провайдера нет ограничения кол-ва маков на порт?

Мы сами провайдер)) Сегодня проверим схему в полях, может быть на столе возникла проблема на вышестоящем сохо роутере. Все же сейчас закралось сомнение, что мак адрес клиента подменяется на мак eth1. В любом случае к вечеру будет известно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет. Эти правила пропускают любой трафик с eth0.x интерфейсов в eth1 и обратно.

У провайдера нет ограничения кол-ва маков на порт?

Мы сами провайдер)) Сегодня проверим схему в полях, может быть на столе возникла проблема на вышестоящем сохо роутере. Все же сейчас закралось сомнение, что мак адрес клиента подменяется на мак eth1. В любом случае к вечеру будет известно.

 

такого не может быть. бридж полностью прозрачен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

adron2

Огромный респект! В полях все заработало как надо. При 100 мегабитной прокачке загрузка цпу не более 15%, что говорит о незначительных требованиях бриджевания и ebtables. Вопрос еще возник небольшой относительно свича, можно на нем как то просматривать мак адреса на конкретных портах?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

adron2

Огромный респект! В полях все заработало как надо. При 100 мегабитной прокачке загрузка цпу не более 15%, что говорит о незначительных требованиях бриджевания и ebtables. Вопрос еще возник небольшой относительно свича, можно на нем как то просматривать мак адреса на конкретных портах?

 

Смотря какой свитч. Если что то на атхеросе то нет. Там очень убогий драйвер.

Вы можете маки просматривать в самом бридже:

brctl showmacs sw где sw это имя интерфейса бриджа.

но это при условии что у вас стоит полная версия brctl-я а не кастрированная bysybox-овская.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Смотря какой свитч. Если что то на атхеросе то нет.

как раз он самый: AR7240/AR9330 :(

Вы можете маки просматривать в самом бридже:

brctl showmacs sw где sw это имя интерфейса бриджа.

но это при условии что у вас стоит полная версия brctl-я а не кастрированная bysybox-овская.

как раз урезанная, и в пакетах bridge-utils я не нашел. Можно конечно попробовать скомпилить под qemu из исходников или прямо на роутере, но вопрос, что мне это даст? Если brctl showmac br0 мне покажет только все маки в бридже - то это бессмысленно, я их и так увижу на вышестоящем свиче... Жаль конечно, если это нереализуемо, но что мы хотим от прибора за 1к руб...

Изменено пользователем Lipton

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Смотря какой свитч. Если что то на атхеросе то нет.

как раз он самый: 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я тоже для своих нужд как раз bridge-utils под openwrt собирал и именно чтобы смотреть какой мак в каком порту :-)

Самого пакета под рукой сейчас нет(сервер разработки далеко и выключен) а вот с работающей железки brctl стянуть удалось. Можете себе скопировать и попробовать: brctl

 

Кстати для сборки пакетов под openwrt qemu не нужен. там своя среда сборки под обычный процессор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Самого пакета под рукой сейчас нет(сервер разработки далеко и выключен) а вот с работающей железки 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 не нужен. там своя среда сборки под обычный процессор.

ну, я вроде про тулчейн в курсе, но хотел то не пакет собрать а бинарник и его сунуть прямо в роутер, но видимо не тут то было... Сейчас буду пробовать пакет собирать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Самого пакета под рукой сейчас нет(сервер разработки далеко и выключен) а вот с работающей железки 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# 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.