Назад | Перейти на главную страницу

IP маршрутизатора в подсети 1 конфликтует с идентичным IP-адресом хоста в подсети 2

Я пытаюсь настроить Linux-машину в качестве маршрутизатора для следующих подсетей:

                             +--------------------------------------------+                 host3
                             |                  router                    |                 10.1.0.254
                             |                                            |                    |
                             |                                            |                    |
                             |                                            |                    |
-----------------------------+ ---+  eth1                      eth3  +--- +--------------------+-----
                10.1.0.0/16  |    |  10.1.0.254            10.1.0.1  |    | 10.1.0.0/16
                subnet1      |    |                                  |    | subnet3
                             |    |                                  |    |
                             |    | forward                  forward |    |
                             |    |                                  |    |
                             |    |                                  |    |
-----------------------------+ ---+  eth2                      eth4  +--- +--------------------------
                10.2.0.0./16 |       10.2.0.254          10.2.0.254       | 10.2.0.0/16    
                subnet2      |                                            | subnet4        
                             +--------------------------------------------+                

маршрутизатор должен:

я реализовал эту настройку, используя

это хорошо работает за одним исключением:

поиск в Google похожих проблем указал мне на локальную таблицу маршрутов.

как правильно решить эту проблему?
как сделать так, чтобы локальная таблица маршрутов не «связала» эти домены L3, которые я пытаюсь разделить?
как отключить записи локального маршрута без потери функциональности arp?
(eth1-4 используются только для пересылки, они никогда не являются целью любого TCP-трафика)

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

Введение в сетевые пространства имен: https://blogs.igalia.com/dpino/2016/04/10/network-namespaces/

Подсказка: большинство статей о сетевых пространствах имен помещают интерфейсы veth в ns. Но вы можете поместить любой тип сетевого интерфейса в пространство имен, например, физические интерфейсы в вашем случае.

Проверьте следующую схему:

  1. Одна таблица маршрутизации для каждого отдельного домена маршрутизации (ваш маршрутизатор может пересылать пакеты внутри домена маршрутизации, а не между доменами маршрутизации). Локальные маршруты позволяют связываться с самим маршрутизатором из этих доменов.
#domain 1 (eth1 + eth2)
ip route add 10.1.0.0/16 dev eth1 table dom1
ip route add 10.2.0.0/16 dev eth2 table dom1
ip route add local 10.1.0.254 dev eth1 table dom1
ip route add local 10.2.0.254 dev eth2 table dom1
#domain 2 (eth3 + eth4)
ip route add 10.1.0.0/16 dev eth3 table dom2
ip route add 10.2.0.0/16 dev eth4 table dom2
ip route add local 10.1.0.1 dev eth3 table dom2
ip route add local 10.2.0.254 dev eth4 table dom2
  1. Создайте правила маршрутизации для разделения доменов маршрутизации:
#domain 1
ip rule add iif eth1 lookup dom1 pref 101
ip rule add iif eth2 lookup dom1 pref 102
ip rule add oif eth1 lookup dom1 pref 103
ip rule add oif eth2 lookup dom1 pref 104
#domain 2
ip rule add iif eth3 lookup dom2 pref 201
ip rule add iif eth4 lookup dom2 pref 202
ip rule add oif eth3 lookup dom2 pref 203
ip rule add oif eth4 lookup dom2 pref 204
  1. Переместите правило маршрутизации с предпочтением 0 ниже ваших правил:
ip rule add from all lookup local pref 1000
ip rule del pref 0

Возникла проблема, вызванная дублированием адресов на интерфейсах eth2 и eth4. Вы можете решить эту проблему с помощью правил iptables с CONNMARK.