У меня сложный случай:
+---+ +----+
|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, чтобы добиться желаемого поведения?
Благодарю.
linux
networking
routing
отметка
источник
источник
Ответы:
То, что вы хотите, невозможно с Linux. По крайней мере, не на уровне маршрутизации. Если целевой адрес принадлежит локальному интерфейсу, то пакет всегда проходит через петлевой интерфейс, откуда он не может (посредством RfC) направляться наружу.
Я подумал, что можно было бы использовать
iptables
иDNAT
изменить цель на неиспользуемый адрес в подсети и использоватьip neigh
для статического присвоения MAC-адреса одному из других сетевых адаптеров, но дажеDNAT
правило не соответствует для пакетов с локальными адресами.Это может быть возможно с виртуальной машиной или с сетевыми пространствами имен, так что ядро не видит
10.1.1.1
дальшеeth0
. Но вам понадобятся прокси ARP и DNAT для перемещения входящих пакетов с физического на виртуальный интерфейс.Если оно того стоит?
источник
Сетевые пространства имен могут быть опцией. По сути, они являются независимыми экземплярами сетевого стека, поэтому теоретически они должны быть в состоянии разделить два интерфейса.
В прошлый раз я пытался поиграть с ними, хотя я не мог заставить вещь работать должным образом.
источник