将域名或子域名指向某些 IP 是很常见的。
然而,我想做相反的事情:
我想将 IP 42.42.42.42 指向一个子域,例如 test.example.com,这样当我访问 42.42.42.42 时,它会显示 test.example.com 的内容。
我尝试编辑 /etc/hosts,但是没有作用,似乎你不能将 IP 指向子域。
有什么想法吗?我所有的谷歌搜索都让我找到了解释如何将域名重定向到 IP 的教程……但我只需要反向操作
更新:我不拥有该 IP,也不拥有该域名
答案1
您不需要 DNS。
test.example.com
只需在 httpd 配置中的服务器块中将 IP 添加为别名即可。
Apache 示例:
<VirtualHost *:80>
DocumentRoot "/www/example1"
ServerName test.example.com
ServerAlias 42.42.42.42
# Other directives here
</VirtualHost>
答案2
将 [子] 域指向 IP 地址很容易,因为将主机名解析为 IP 地址是建立 HTTP 连接的正常过程的一部分。
将 IP 地址指向另一个域名实际上需要在流程中引入另一轮 DNS 解析。这可以在 HTTP 协议级别完成:这就是 HTTP 重定向……但这需要控制 42.42.42.42 IP 地址的目标系统。任何较低的协议层实际上都没有能力引入另一轮 DNS 解析。但如果您事先查找 test.example.com 的 IP 地址,则可以用其 IP 地址代替 42.42.42.42。
如果您想要重定向 IP 地址,您几乎需要控制客户端系统、其网络或持有您要重定向的 IP 地址的系统。由于您说您无法控制目标 IP 地址,因此您需要在客户端执行此操作。
如果您控制客户端系统,则可以使用iptables
OUTPUT 规则链中的 DNAT 规则将流量从 42.42.42.42 重定向到目标 FQDN。如果这样做,则目标 FQDN 的名称解析只会发生一次,即在您配置规则时:因此重定向实际上是用一个 IP 地址替换另一个 IP 地址。客户端上的规则将如下所示:
iptables -t nat -A OUTPUT -p tcp -d 42.42.42.42 --dport 80 -j DNAT --to-destination test.example.com:80
如果您控制客户端的网络,那么您还可以选择在常规 WWW 代理(如果客户端配置为使用您可以控制的代理)或透明代理(如果客户端中没有明确的代理配置)中执行重定向。