Я пытаюсь настроить 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 похожих проблем указал мне на локальную таблицу маршрутов.
ip route del table local 10.1.0.254 dev eth1 proto kernel scope host src 10.1.0.254
как правильно решить эту проблему?
как сделать так, чтобы локальная таблица маршрутов не «связала» эти домены L3, которые я пытаюсь разделить?
как отключить записи локального маршрута без потери функциональности arp?
(eth1-4 используются только для пересылки, они никогда не являются целью любого TCP-трафика)
Вы можете использовать сетевые пространства имен для разделения своих сетевых устройств. Один для левой стороны и один для правой стороны вашего маршрутизатора. Таким образом, вам не потребуется дополнительное разделение таблиц маршрутизации.
Введение в сетевые пространства имен: https://blogs.igalia.com/dpino/2016/04/10/network-namespaces/
Подсказка: большинство статей о сетевых пространствах имен помещают интерфейсы veth в ns. Но вы можете поместить любой тип сетевого интерфейса в пространство имен, например, физические интерфейсы в вашем случае.
Проверьте следующую схему:
#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
#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
ip rule add from all lookup local pref 1000 ip rule del pref 0
Возникла проблема, вызванная дублированием адресов на интерфейсах eth2 и eth4. Вы можете решить эту проблему с помощью правил iptables с CONNMARK.