Networking

將 HTTPs 請求轉發到另一個網路伺服器

  • October 20, 2014

我有一個連接到兩個子網的****Ubuntu 12.04 伺服器

Eth0 是20.20.20.1,它在埠 80 上託管一個 Apache Web 伺服器。Eth1 是10.10.10.0子網中的動態 IP 地址。

該伺服器不是網關,即沒有工作站通道指向該伺服器。

在第二個子網還有另一個 Web 伺服器10.10.10.1

我希望來自第一個子網的使用者能夠看到位於第二個子網中的第二台伺服器。例如,如果使用者鍵入**http: //20.20.20.1(埠 80),他會看到位於他自己子網中的第一個 Web 伺服器****https: //20.20.20.1,如果使用者鍵入(埠 443),他會被轉發到第二個子網並看到位於 的第二個Web 伺服器****10.10.10.1**。

這是我嘗試過的:

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -d 10.10.10.1 -p tcp --dport 443 -m state \
   --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp  --dport 443 -j DNAT \
   --to-destination 10.10.10.1:443

10.10.10.1但是,不幸的是,來自第一個子網的請求不會被轉發到。

我認為您在一台機器上有兩個網卡,10.10.10.1問題出在源 IP 上。

例如客戶端20.20.20.15嘗試訪問https: //20.20.20.1. 你DNAT流量到10.10.10.1:443.

所以現在10.10.10.1收到一個帶有源 IP 的數據包20.20.20.15。子網沒有具體規則,20.20.20.0/24因此通過未連接到機器的預設網關發送回复20.20.20.1。數據包要去其他地方並最終被丟棄。

您需要ip route 20.20.20.0/24 dev ...在伺服器上添加10.10.10.1

或者添加一個SNAT規則20.20.20.1

iptables -t nat -A POSTROUTING -p tcp --dport 443 -d 10.10.10.1 -o eth1 -j MASQUERADE

但是在這種情況下,在網路伺服器日誌中,您會看到您的第一個(在這種情況下為 20.20.20.1)伺服器的偽裝 IP 地址,這REMOTE_ADDR可能對您不利。因此,如前所述,最好將靜態路由添加到子網。

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