將 HTTPs 請求轉發到另一個網路伺服器
我有一個連接到兩個子網的****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
可能對您不利。因此,如前所述,最好將靜態路由添加到子網。