在 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用浏览器访问(serverfault 的 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>

相关内容