две сетевые карты в одной подсети — необходимо настроить маршрутизацию

две сетевые карты в одной подсети — необходимо настроить маршрутизацию

У меня сложный случай:

+---+                      +----+
|D1 +->eth0---------<-eth0-+D2  |
|   |                      |    |
|   +->eth1---------<-eth1-+    |
+---+                      +----+

На D2 eth0и eth1имеют IP-адреса из одной подсети: eth0 10.1.1.1/24, eth1 10.1.1.2/24. Интерфейсам на D1 не назначены адреса, и он действует как коммутатор.

Теперь я хочу, чтобы D2 мог отправлять трафик 10.1.1.2через eth0, поэтому путь пакета должен быть следующим: D2(eth0)--D1(eth0)--D1(eth1)--D2(eth1).

В данный момент, когда я пингую 10.1.1.2с D2, он посылает пакеты локально, т.е. D1 не получает ни одного. Что мне нужно изменить на D2, чтобы добиться желаемого поведения?

Спасибо.

решение1

То, что вы хотите, невозможно с Linux. По крайней мере, на уровне маршрутизации. Если целевой адрес принадлежит локальному интерфейсу, то пакет всегда проходит через интерфейс loopback, откуда он не может (по RFC) быть направлен наружу.

Я думал, что можно использовать iptablesи DNATизменить цель на неиспользуемый адрес в подсети и использовать ip neighдля установки статического MAC-адреса на одну из других сетевых карт, но даже DNATправило не срабатывает для пакетов на локальные адреса.

Это может быть возможно с виртуальной машиной или с сетевыми пространствами имен, так что ядро ​​не видит 10.1.1.1на eth0. Но вам понадобятся proxy ARP и DNAT для перемещения входящих пакетов с физического на виртуальный интерфейс.

Стоит ли это таких усилий?

решение2

Сетевые пространства имен могут быть вариантом. Они по сути являются независимыми экземплярами сетевого стека, поэтому они должны, по крайней мере, теоретически иметь возможность разделять два интерфейса.

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

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