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

332
pfbrewst

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

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

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

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

Какие-либо предложения? Спасибо!

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

0
Я считаю, что это невозможно. Scott 6 лет назад 0
Это управляемый коммутатор или неуправляемый? Tim_Stewart 6 лет назад 0
Я использую неуправляемый переключатель в данный момент. Сейчас я просто проверяю, возможно ли это. Когда мне нужно сделать это в реальном проекте, это будет управляемый коммутатор. pfbrewst 6 лет назад 0
Возможный дубликат [Могу ли я принудительно транспортировать IP-пакеты по «петлевому» соединению на одном компьютере?] (Https://superuser.com/questions/1223420/can-i-force-ip-packets-to-be -transported-над-а-петлевой-соединение-на-SAM) Kamil Maciorowski 6 лет назад 2
См. Также: [Принудительное завершение Ping, когда целевой интерфейс является локальным (Debian)] (https://superuser.com/q/1241712/432690). Kamil Maciorowski 6 лет назад 0

1 ответ на вопрос

-1
infinmed

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

Операционная система попытается распознать, что другая сетевая карта является локальным разработчиком. Я думаю, что вы можете использовать опцию « dev » для « ip route », чтобы вытеснить ее с другой сетевой карты.

Например, у меня есть 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 

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

Это может решить вашу проблему. Посмотрите справочную страницу « ip route » для определения приоритета маршрута и параметра « dev ». Затем посмотрите на соответствие правил, чтобы выполнить часть политики. Это должно выглядеть примерно так:

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

У вас есть два адреса в разных сетях, но вопросы задают об адресах в одной сети. Ron Maupin 6 лет назад 1
Это применимо одинаково в любом случае. Используемый по умолчанию, если они оба находятся в одной подсети, это только первый добавленный. Ему нужно будет привязать либо тот, для которого трафик будет идти для шлюза по умолчанию, либо нет. Но вышеупомянутое все еще применяется точно так же. Другими словами, если он сменит IP-адреса и подсети, все будет работать. infinmed 6 лет назад 0
Я собираюсь попробовать это, я видел пару других возможных решений, которые похожи, хотя они используют iptables. Я дам вам знать, если это работает. Спасибо! pfbrewst 6 лет назад 0