iptables:不同的目前網關IP有不同的規則

iptables:不同的目前網關IP有不同的規則

假設我有機器 A 作為網關。機器 A 有 1 個接口,有 2 個 IP。

機器A的netplan配置如下:

  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.1/24
        - 192.168.1.2/24

現在我希望 iptables 的 REDIRECT 規則的行為有所不同,這取決於機器 B 將其閘道設定為 192.168.1.1 還是 192.168.1.2

這是我嘗試在機器 A 上執行的 iptables 命令:

iptables --table nat --append PREROUTING --some-parameter 192.168.1.1 --protocol tcp  --jump REDIRECT --to-ports 9991
iptables --table nat --append PREROUTING --some-parameter 192.168.1.2 --protocol tcp  --jump REDIRECT --to-ports 9992

您能告訴我上面的正確名稱是什麼嗎--some-parameter

答案1

無法在網關的相同網路介面上使用 192.168.1.1 和 192.168.1.2 來執行此操作,從而解析為相同的 MAC 位址。這不是一個未實現的功能iptables雖然可以實現,但由於 IP 網路的工作原理,該功能無法實現。

使用 192.168.1.1 或 192.168.1.2 作為閘道的用戶端在傳送封包至 Internet 時絕不會傳送包含 192.168.1.1 或 192.168.1.2 的單一 IPv4 封包。它會:

  • 查詢給定目的地的路由表
  • 發現有一個通往該目的地的網關
  • 使用ARP或用於解析到達網關所需的 L2 位址(乙太網路 MAC 位址)的快取條目。

最後一步將只有一個乙太網路目標:網關的 NIC 唯一 MAC 位址:對於閘道為 192.168.1.1 的用戶端或閘道為 192.168.1.2 的其他用戶端而言相同。

因此,每個用戶端現在將使用其 IPv4 來源位址向網關發送封包,乙太網路封包中的預期 IPv4 目的地在兩種情況下都具有相同的目的地乙太網路 MAC 位址。 192.168.1.1/192.168.1.2 不在循環範圍內。

網關現在發現有兩個資料包需要路由。在任何情況下,這些資料包都不會再提示它們是否正在使用192.168.1.1192.168.1.2作為網關:該資訊不會出現在線路上,因此網關無法在任何地方獲知。如果系統沒有資訊來區分案件,那麼iptables也不能擁有這個不存在的資訊。


解決方法建議:

可以使用一個MAC VLAN介面擁有第二個具有自己獨立 MAC 位址的 NIC,並將 192.168.1.2/24 指派給它,這將使來自使用 192.168.1.2 作為網關的客戶端的封包到達此 NIC。這種情況很容易區分iptables: 不同的-i NIC過濾器。

但這會產生同一 LAN 中具有多個 NIC 的路由問題,並且需要:

  • 先進的策略路由規則可以正確解決這種情況

    因此回覆不會透過可能影響路由行為或防火牆規則的錯誤 NIC 傳送。

    • 此外,在 192.168.1.2 上查詢的任何 UDP 服務(如果 192.168.1.1 是預設值)必須知道如何使用正確的來源位址 192.168.1.2(而不是預設的 192.168.1.1)進行回應:它必須是多宿主的意識到的。 TCP 不需要特別小心。
  • 或一個額外的網路命名空間來分隔新增的介面。但使用重定向規則,這意味著連接埠 9992 上的服務必須在附加網路命名空間中運作。而這個網路命名空間可能仍然必須使用初始網路命名空間與互聯網進行通訊:還要在各個地方進行更多配置規劃。

相關內容