Задний план:
У меня есть мост Linux (Ubuntu 15.10, 64bit, имя Мост B) с двумя физическими интерфейсами, eth0 и eth1, а имя интерфейса моста - br0. Отправить (Win 10) подключается к eth0, а Приемник C (Win 10) подключается к eth1. Как показано на рисунке ниже.
Отправитель А <------> (eth0) Мост B (eth1) <------> Приемник C
Отправитель АMAC-адрес: D4: EE: 07: 3F: F9: 0D, IP-адрес: 192.168.1.2.
Мост BMAC-адрес eth0: B0: 51: 8E: FF: 2F: C8, без IP-адреса
Мост BMAC-адрес eth1: B0: 51: 8E: FF: 2F: C9, без IP-адреса
Мост BMAC-адрес br0 совпадает с MAC-адресом eth0 (Авто), IP-адрес: 192.168.1.1.
Приемник CMAC-адрес: 4C: CC: 6A: DC: 91: 60, IP-адрес: 192.168.1.3.
Отправить отправить пакет Приемник C, например icmp ping.
Проблема:
Прежде чем я настрою правило ebtable в Мост B для перенаправления пакета на уровень 3 все в порядке, Приемник C получить Отправитьping-пакет с исходным MAC-адресом D4: EE: 07: 3F: F9: 0D и MAC-адресом назначения 4C: CC: 6A: DC: 91: 60, ничего не изменилось после отправки пакета из Отправить.
Когда я устанавливаю правила ebtable в Мост B для перенаправления перенаправленного пакета на уровень 3, тогда я могу использовать iptables для фильтрации пакетов в Мост B. Код:
ebtables -t broute -A BROUTING -p IPv4 --logical-in br0 -j redirect
Потом возникла проблема. Пакет от Отправить к Приемник C который через Мост Bслой 3, я вижу в Приемник C что MAC-адрес источника пакета - B0: 51: 8E: FF: 2F: C8. Очевидно, MAC-адрес источника изменен на Мост BMAC-адрес br0.
Мне интересно, проблема в том, что когда пакет перенаправляется с уровня 2 на уровень 3, а затем перенаправляется Мост B на уровне 3 исходный MAC-адрес может быть изменен на Мост BЯдро.
Квест:
Могу ли я что-то сделать или настроить, чтобы сохранить исходный MAC-адрес неизменным после фильтрации уровня 3 через Мост B?
/ и т. д. / сеть / интерфейс конфигурация в Мост B
auto eth0
iface eth0 inet manual
up ifconfig eth0 up
auto eth1
iface eth1 inet manual
up ifconfig eth1 up
auto br0
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
pre-up ip link set eth0 promisc on
pre-up ip link set eth1 promisc on
pre-up echo "1">/proc/sys/net/ipv4/ip_forward
bridge_ports eth0 eth1
CGretski, я прочитал справочную страницу ebtables в http://ebtables.netfilter.org/misc/ebtables-man.html. Я лично понимаю, что при использовании ebtables «-j redirect» цель перенаправления изменит MAC цель адрес к мостовому устройству, то пакет может быть отправлен на мостовой интерфейс br0, как упомянуто в примере выше. Итак, пакет от Отправитель А к Приемник C, целевой MAC-адрес будет изменен на MAC-адрес моста, ничего не говорится об исходном MAC-адресе, будет ли изменен или нет.
После фильтрации по Мост BНа уровне 3 (или на уровне 3 ничего не сделано), пакет теперь должен быть перенаправлен на Приемник C. Тогда целевой MAC-адрес пакета будет изменен на Приемник C. Но в то же время Mac-адрес источника пакета должен быть изменен на Мост BMac-адрес.
Если я использую "-j accept" в цели ebtables, как вы советуете, пакет не будет отправлен на уровень 3, а будет прозрачно проходить через Мост B, ничего не должно быть изменено, включая исходный и целевой MAC-адрес. Но я не могу выполнять фильтрацию уровня 3.
Причина, по которой я хочу сохранить информацию о пакете на уровне 2, заключается в том, что я не хочу Приемник C к ощущению любого существования устройства между Отправитель А и сам. Еще одна важная причина заключается в том, что в некоторых сценариях Приемник C (особенно если это шлюз) сбросит пакет после проверки Mac и IP источника.
Потеря информации на уровне 2 - это ожидаемый побочный эффект внедрения маршрутизации на уровне 3 и само определение цели "-j redirect".
На странице руководства ebtables:
Цель перенаправления изменит целевой MAC-адрес на адрес устройства-моста, на которое пришел кадр.
вы можете попробовать "-j accept", хотя это может не передать его на уровень фильтрации 3.
Чего вы пытаетесь достичь, сохраняя информацию уровня 2?