在 iptables PREROUTING 中使用域

在 iptables PREROUTING 中使用域

我有一個www.example.comIP 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>

相關內容