Linux

使用 Linux 的 netfilter 反射數據包

  • September 14, 2013

我有一對主機,兩者之間的路由非常糟糕,但我有第三台主機對每個主機都有非常好的 ping。為了解決糟糕的路由問題,我設置了第三台主機來在兩者之間來回反彈數據包。

第三台主機的 IP 地址不用於其他任何用途。我的理想配置是,當主機 1 向主機 3 發送數據包時,主機 3 會自動對源地址和目標地址進行 NAT,替換 source=host3 和 destination=host2,然後轉發數據包。

反之亦然:如果 host2 嘗試響應,則數據包應返回 host3,host3 會將其 NAT 回 source=host3,destination=host1。不需要連接跟踪——這可以完全無狀態地完成。

我被困的地方是讓 DNAT 和 SNAT 同時工作。看起來,如果一個數據包由 DNAT 處理,它會自動標記為跳過 SNAT 規則:DNAT 工作正常,但源地址沒有得到轉換。

實現此目的的正確 iptables 配置是什麼?

奇怪的行為是由於 CONNTRACK。如果沒有其他問題,SNAT 和 DNAT 確實可以很好地協同工作。

另外,我只在一個方向上配置了 SNAT 和 DNAT。因為有流量不斷通過,SNAT 和 DNAT 的自動反向翻譯為我處理了返迴路徑。

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