Linux

子網 1 上的路由器 ip 與子網 2 上相同的主機 ip 衝突

  • November 28, 2017

我正在嘗試將 linux 機器設置為以下子網的路由器:

+--------------------------------------------+ 主機3
| 路由器| 10.1.0.254
| | |
| | |
| | |
----------------------------- + --- + eth1 eth3 + --- + --------- ------------ + -----
10.1.0.0/16 | | 10.1.0.254 10.1.0.1 | | 10.1.0.0/16
子網1 | | | | 子網3
| | | |
| | 向前向前 | |
| | | |
| | | |
-----------------------------+ ---+ eth2 eth4 +--- +--------- -----------------
10.2.0.0./16 | 10.2.0.254 10.2.0.254 | 10.2.0.0/16 
子網2 | | 子網4 
+--------------------------------------------+ 

路由器應該:

  • 轉發subnet1 和sebnet2 之間的流量。
  • 在 subnet3 和 setnet4 之間轉發流量。
  • 使子網 1+2 與子網 3+4 隔離

我已經使用

  • ip route(4 個路由表,每個網卡 1 個)
  • ip 規則(每個 nic 都與自己的路由表相關聯)

這很好用,但有一個例外:

  • 流量在子網 1 和 2 之間轉發。

  • 流量在子網 3 和 4 之間轉發。

  • 一個例外是 host3

    • 它無法發送/接收來自子網 4 的流量
    • 它無法獲得 10.1.0.1 的 arp 回复。
    • 它的 ip 與路由器自己在 eth1 上的 ip 相同。
    • 如果我在 subnet3 上給 host3 一個不同的 ip,所有問題都解決了。

    由於本文範圍之外的原因,我無法更改其 IP。

    我也無法更改 eth1 的 ip。

Google搜尋類似的問題將我指向本地路由表。

  • 本地路由表有一個 eth1 的 ip 的路由條目(自動創建)

  • 此表在系統中具有最高優先級,似乎正在劫持 host3 的流量。

  • 我嘗試刪除此條目-

    • ip route del table local 10.1.0.254 dev eth1 proto kernel scope host src 10.1.0.254
    • 它解決了這個問題,host3 可以發送/接收來自子網 4 的流量。
    • 然而,這不是一個真正的解決方案,因為 eth1 停止回復來自子網 1 的 arp 請求。

    (只要子網 1 主機記憶體了它的 MAC,就不會注意到)。

這個問題的正確解決方案是什麼?

如何防止本地路由表“耦合”我試圖分開的這些 L3 域?

如何在不失去 arp 功能的情況下禁用本地路由條目?

(eth1-4 僅用於轉發,它們本身絕不是任何 tcp 流量的目標)

檢查以下方案:

  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
#域 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. 創建路由規則以分隔路由域:
#域 1
ip 規則添加 iif eth1 查找 dom1 pref 101
ip 規則添加 iif eth2 查找 dom1 pref 102
ip 規則添加 oif eth1 查找 dom1 pref 103
ip 規則添加 oif eth2 查找 dom1 pref 104
#域 2
ip 規則添加 iif eth3 查找 dom2 pref 201
ip 規則添加 iif eth4 查找 dom2 pref 202
ip 規則添加 oif eth3 查找 dom2 pref 203
ip 規則添加 oif eth4 查找 dom2 pref 204
  1. 將具有 0 首選項的路由規則移到您的規則下方:
從所有查找本地首選項 1000 中添加 ip 規則
ip 規則刪除首選項 0

eth2 和 eth4 介面上的地址重複會導致一些問題。您可以使用帶有 CONNMARK 的 iptables 規則來解決它。

引用自:https://serverfault.com/questions/885425