cname方式实现无服务器302显性转发

各种云的DNS实现显性转发需要ICP,本来不用服务器就可以302转发的这下操作麻烦了。自己搭建一个DNS服务器,动作太大,且使用可信度不高。灵机一动通过cname和txt记录,实现一下无服务器DNS显性302跳转。

搭建:

1)cname302.com解析到服务器IP,比如:IP.IP.IP.IP

2)建立一个PHP网站,并设置为默认网站(即解析到这个IP的域名都可以访问):

代码内容:

 

<?php
$http_host = $_SERVER['HTTP_HOST'];
echo "HTTP Host: ".$http_host."\r\n";
if(substr_count($http_host, '.')==1){
    $txt_http_host = "txt_.".$http_host;
}else{
    $txt_http_host = "txt_".$http_host;
}
$result = dns_get_record($txt_http_host, DNS_TXT);
echo "Result for TXT record ".$txt_http_host ."\r\n";
print_r($result);
$target = $result[0]["txt"];
echo "302 Target: ".$target ."\r\n";
echo "Let's go!\r\n";
header('Location: //'.$target, true, 302);
?>

如果有个新域名想实现无服务器跳转,只需要2步骤:

1)添加域名如:www.awk.com,cname解析到cname302.com

2)设置txt记录,txt_www.awk.com,值为要跳转的目标比如www.baidu.com,于是搭配cname302.com上的服务,就可以实现了!

image.png

说明:这样就可以实现解析的域名,能被cname302.com的服务器接收到请求。但是,由于没有通信给用户要往哪儿跳转,就很难受。如果通过URL地址传递如http://www.awk.com/goto/www.baidu.com

就显得挫了点,不够优雅。Header传递更别提了,对于大部分用户根本不懂,就算懂的人也没人能接受。

后台可以根据访问的host:www.awk.com,根据约定知道你其实是想往txt_www.awk.com的值上跳转,于是后台根据DNS记录查询一下这个TXT记录,即可帮你302跳转过去!

 

ubuntu@VM-12-2-ubuntu:~$ curl -v www.awk.com

*   Trying 43.155.181.10:80…

* Connected to www.awk.com (43.155.181.10) port 80 (#0)

> GET / HTTP/1.1

> Host: www.awk.com

> User-Agent: curl/7.81.0

> Accept: */*

* Mark bundle as not supporting multiuse

< HTTP/1.1 302 Found

< Server: Tengine

< Date: Wed, 20 Sep 2023 06:13:44 GMT

< Content-Type: text/html; charset=UTF-8

< Transfer-Encoding: chunked

< Connection: keep-alive

< Location: //www.ip.com

HTTP Host: www.awk.com

Result for TXT record txt_www.awk.com

Array

(

    [0] => Array

        (

            [host] => txt_www.awk.com

            [class] => IN

            [ttl] => 600

            [type] => TXT

            [txt] => www.ip.com

            [entries] => Array

                (

                    [0] => www.ip.com

                )

 

        )

 

)

302 Target: www.ip.com

Let’s go!

* Connection #0 to host www.awk.com left intact

 

补充:

主域名:解析TXT为:txt_

 

Posted in PHP

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注