Пропустить локальный сетевой трафик через коммутатор

Пропустить локальный сетевой трафик через коммутатор

У меня есть машина с тремя сетевыми картами. Одна карта подключена к WAN, а две другие карты подключены к тому же коммутатору с той же подсетью (192.168.1.0/24). Я хочу отправлять данные между двумя картами, но убедиться, что данные действительно проходят через коммутатор, а не остаются внутри сетевого стека Linux.

Когда я настраиваю две карты обычным образом и пытаюсь пинговать одну с другой, это работает, но Wireshark не показывает никакого трафика, то есть он не выходит в сеть.

Я пробовал настроить статические маршруты к коммутатору, пытаясь заставить весь трафик проходить через коммутатор. Когда я это делаю, на пинги отвечает сеть, и я получаю поток неотвеченных ARP-запросов, пытающихся найти другой адрес. Но любой адрес может пинговать другую машину в подсети, и эта машина может пинговать любой адрес.

Я пробовал изменить настройки ARP-фильтра в ядре Linux, но безуспешно.

Есть предложения? Спасибо!

Кроме того, бонусные баллы за настройку одной сетевой карты с IP-алиасингом для выполнения той же задачи.

решение1

Я здесь новичок, но, возможно, у меня есть ответ на этот вопрос.

Операционная система попытается распознать, что другая сетевая карта является локальным устройством. Я думаю, вы можете использовать 'дев' вариант для 'IP-маршрут', чтобы принудительно отключить другую сетевую карту.

Например, у меня есть IP-адрес:

45.32.160.129

И маршрут для этой подсети показывает устройство dev ens3

45.32.160.0/24 dev ens3 proto kernel scope link src 45.32.160.129

Но предположим, что у меня есть другая сетевая карта, ens4 по адресу 45.32.161.4/24:

45.32.161.0/24 dev ens4 proto kernel scope link src 45.32.161.4

то вы можете использовать 'дев' вариант для 'IP-маршрут' для указания используемого устройства. Таким образом, вы можете указать, что другая сетевая карта использует себя для ens3 ip вместо того, чтобы использовать ens3 (саму себя), когда вы пытаетесь получить к ней доступ с локальной машины. Хитрость в том, что вам также нужно использовать политику маршрутизации. Потому что вы не можете заставить сетевую карту попытаться получить доступ к себе и выйти из интерфейса другой карты, потому что она никогда не найдет себя. Поэтому вам нужно указать с помощью политики/маршрутизации источника, что она должна проходить только через другую карту, когда эта карта пытается получить к ней доступ. Вот где вам нужно указать соответствие источника. Еще дальше вам нужно будет убедиться, что вы привязываетесь к правильному IP-адресу источника в вашем сетевом программном обеспечении по выбору, которое вы пытаетесь использовать или с которым тестируете. Это должно заставить его получить доступ к другой сетевой карте через коммутатор. Конечно, тогда вы сделаете то же самое для другой карты, но наоборот.

Это может решить вашу проблему. Посмотрите на 'IP-маршрут' страница руководства по приоритету маршрутов и 'дев' параметр. Затем посмотрите на соответствие правил, чтобы выполнить часть политики. Это должно выглядеть примерно так:

ip rule add from 45.32.161.4 lookup from1
ip rule add from 45.32.160.129 lookup from2

Затем добавьте противоположные маршруты:

ip route add 45.32.160.129 via 45.32.161.4 dev ens4 table from1
ip route add 45.32.161.4 via 45.32.160.129 dev ens3 table from2

И вам нужно, чтобы эти таблицы были созданы в /etc/iproute2

Связанный контент