Linux

iptable 能做到這一點還是我應該使用 mod_proxy?

  • November 29, 2012

我正在嘗試將我的網路配置為在一台設備上接收傳入連接,然後將其重定向到特定埠上的另一台設備。現在我在大約 80 埠和一個執行 apache 的設備上。我面臨的問題是,當轉發完成時,它還將源 ip 設置為第一台設備,而不是連接到服務的使用者所擁有的源 ip。

讓我來說明一下:

  • $$ Internet User $$=7.7.7.7
  • 連接到

$$ Device 1 $$=1.1.1.1:80

  • $$ Device 1 $$轉發給$$ Device 2 $$=1.1.1.2:80
  • $$ Device 2 $$輸出響應$$ Internet User $$看到

很快

$$ Device 2 $$我自然會看到$$ Device 1 $$s IP 在日誌中,但我想看看是否有辦法通過$$ Device 1 $$到$$ Device 2 $$在登錄時看到真實的源IP$$ Device 2 $$. 那可能嗎?

目前我的規則集如下所示:(在設備 1 上)

iptables -P FORWARD ACCEPT

iptables -t nat -I PREROUTING -j DNAT -p tcp --dport 80 --to-destination 1.1.1.2:80

iptables -t nat -I POSTROUTING -j SNAT -p tcp -d 1.1.1.2 --to-source 1.1.1.1

$$ Device 2 $$它接受來自埠 80 的所有傳入$$ Device 1 $$以及接受所有相關和已建立的連接。 那麼,有沒有辦法讓真正的來源

$$ Device 2 $$? 如果您需要更多資訊,請與我們聯繫!

這是不可能的,因為“設備 2”需要將答案發送給“設備 1”,而不是直接發送給“網際網路使用者”(TCP 會話是在“網際網路使用者”和“設備 1”之間建立的,而不是“設備 2”)。這就是為什麼 HTTP 中存在例如 X-Forwarded-For 標頭的原因。

如果是 apache,您可以使用“ rpaf ”模組查看真實 IP 地址。nginx 也有類似的解決方案。但當然這不適用於不同的協議。

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