Nat

NAT 問題

  • December 7, 2011

我是一個網路菜鳥,很抱歉這個非常籠統的標題。我通過以下方式進行網路設置:

圖片

關於網路的一些細節:

  • 所有設備上的 eth0 在 10.10.10.0 子網中都有一個 IP,可以從我們的 Intranet 訪問
  • 機器 1 上的 eth1 通過專用網路連接到機器 2 上的 eth1
  • 機器 3 上的 eth1 通過專用網路連接到機器 2 上的 eth2
  • 機器 2 上的 eth1 和 eth2 被橋接
  • 機器 2 上的 eth1 和 eth2 沒有 IP

機器 1 必須通過機器 2 上的網橋與機器 3 通信。為此,我在所有機器上都設置了路由。也就是說,當流量從機器 1 上的 eth1 發送時,它到達機器 2 上的 eth1,然後從機器 2 上的 eth2 發送到機器 3 上的 eth1。這工作得很好。

我遇到的問題是當機器 2 進行 NAT 時(這不是使用 iptables 完成的,而是由我無法控制的程序完成的)。程序所做的是將數據包轉發到機器 3 時,將機器 2 上的 eth0 的 IP 分配為源 IP。因此,當機器 3 必須回复時,它會在 10.10.0.0 子網上看到源,並路由數據包從機器 3 上的 eth0 到機器 2 上的 eth0。

我的問題:如何將數據包從機器 3 路由到機器 2 上的 eth2?

我對該程序執行 NAT 的唯一控制是告訴它在 NAT 時使用什麼源 IP。機器 2 上的 eth1 和 eth2 沒有 IP,所以我可以使用的唯一 IP 是機器 2 上的 eth0 的別名。

經過思考,我認為您可以通過(M3 上的 eth1)將 M3 上的路由設置為(M1 的 eth0 地址),其中 M1=machine1,依此類推。其中10.10.10.x是M1的eth0地址,試試

M3% route add -host 10.10.10.x dev eth1

您應該能夠驗證,在 M3 上,對來自 M1 地址的數據包的響應是通過使用tcpdump. 請注意,這決不能保證 M2 會對它們做正確的事情;它應該只將它們以它們進來的方式發送回來,並希望 M2 將它們解除 NAT 並將它們發送到 M1。

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