![在 iptables PREROUTING 中使用域](https://rvso.com/image/617275/%E5%9C%A8%20iptables%20PREROUTING%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%9F%9F.png)
我有一個www.example.com
IP X.X.Y.Y
,我想將流量從連接埠 80 轉送到網域(www.example.com),我使用了以下 iptable:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination X.X.Y.Y:80
但我沒有得到好的結果,因為X.X.Y.Y
內容不等於網域名稱(www.example.com)
例如:如果您使用198.252.206.16
瀏覽器訪問(伺服器故障的IP),您將看到該結果和地址內容(IP位址) ) 不等於www.serverfault.com
.
我想在上面的 iptables 規則中使用域,例如:(--to-destination www.example.com
這只是一個例子,我知道它不起作用),我該怎麼做?
有沒有其他方法可以在不使用 iptables 的情況下做到這一點?
謝謝
答案1
我認為您需要的是一個 HTTP 代理來重寫請求標頭。 IPTables 不會解析 HTTP 標頭並取代其中的網域。
您應該考慮使用 Nginx 或 Squid 之類的工具來執行此操作,它們可以理解 HTTP 請求標頭並將其重寫到您想要的網域中。
IPTables 不支援任何比 TCP 或 UDP 更高的協定。
答案2
iptables
即使使用該選項也無法執行此-d
操作,因為網域名稱是在 iptables 啟動期間載入的。做你想做的事情的正確方法是使用像 Squid 這樣的代理伺服器。
答案3
在你的網頁伺服器上做這樣的事情:
NameVirtualHost *:80
<VirtualHost *:80>
# The DNS1 site is hosted locally
ServerName DNS1
DocumentRoot /var/www./...
</VirtualHost>
<VirtualHost *:80>
ServerName DNS2
# Forward all requests to container:
Proxypass / http://<container-ip>
ProxypassReverse / http://<container-ip>
</VirtualHost>