DIY整活

--网络、软件技术类的整活记录

我有服务器之自建ddns替代花生壳

前言:

       用花生壳很长时间了,但是发现这两年越来越不好用了。

        1. 时不时的会解析到 127.0.0.2 上,问客服说技术问题,升级收费会好一些;

        2. 响应慢,更换ip地址后提交变更,好久好久才能解析过来,期间要不断在cmd里 ipconfig /flushdns 刷新然后ping ,耽误事;

        3. 之前的壳域名到期不让用了,新的壳域名注册不下来,合着就必须得买咯?

        4. 登录要扫码,要验证,说原密码不安全等等,就是不让好好登录;

        5. 不时打电话推销一波他们的收费服务……


       艾玛,这可不能忍了,我就用你个DDNS服务,你给我整这么多幺蛾子,搞得我客户三天两头问我系统咋又访问不了了,

尤其是早上10点左右,正是睡觉的好时候,突然一个电话,咋连不上ERP了,咋打不开系统了,不厌其烦。

        于是,我想到,我不是有域名和服务器嘛,干嘛受这鸟气,自己搭一套不就结了,于是开始查资料、找方案,受益于Ai

的巨大能力,还真让我给搞出来了,以下是基本步骤,说难不难,一下午搞定。


需要用到的文件:https://download.csdn.net/download/hsnet/93170831


步骤如下:

        1. 准备域名、云服务器(宝塔系统),没有的去看看 https://xs5k.com/?id=6 里的方法搞一个。

        2. 域名新增两条解析;

        3. 服务器安装coredns 并配置;

        4. 写个php脚本,做好伪静态。


一、域名解析:

        1. 域名最好短一些的,3个字母数字混拼的cn域名就不错,挑个好记的;

        2. 在解析后台新增一个 A 记录,将一个域名解析到你的服务器(域名可以是二级也可以是三级,我这里用的三级)

        3. 根据你的情况选择 二级 还是 三级 域名

主机记录记录类型记录值备注
dAxx.xx.xx.xx 你的服务器ip地址
三级方式
dNS

你的域名:如 j64.cn

三级方式




*Axx.xx.xx.xx 你的服务器ip地址二级方式(可选)
*NS你的域名:如 j64.cn二级方式(可选)


二、建立网站

        1. 在宝塔中建立网站 ddns.j64.cn(这里改成你自己的域名),选 php8 及以上。

        2. 在根目录中建立文件:hosts.conf ,用于保存解析记录;

        3. 建立目录:ph ,在 ph 目录建立 update.php 文件(这里用这个是为了兼容花生壳)

        4. 编写如下文件内容:

    <?php        
       // ====================== 配置区 ======================
       $hosts_file = '/www/wwwroot/ddns.j64.cn/hosts.conf';
       // 访问密钥
       $access_token = 'token';
       $input_token = $_GET['token'] ?? '';
       // ====================================================
       
       // 1. 鉴权校验 token
       if ($input_token !== $access_token && false) {
           exit(json_encode([
               'code' => 403,
               'msg' => '访问令牌错误,拒绝操作'
           ], JSON_UNESCAPED_UNICODE));
       }
       
       // 2. 获取请求参数
       $input_myip = trim($_GET['myip'] ?? '');
       $hostname = trim($_GET['hostname'] ?? '');
       
       // 3. hostname 非空校验
       if (empty($hostname)) {
           exit('nohost');
       }
       
       // 4. 处理IP:有传入则校验,无传入取客户端真实IP
       if ($input_myip !== '') {
           // 校验传入IP是否合法IPv4
           if (!filter_var($input_myip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
               exit('iperr1');
           }
           $target_ip = $input_myip;
       } else {
           // 自动获取客户端真实IP,兼容反向代理
           if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
               $ip_arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
               $target_ip = trim($ip_arr[0]);
           } elseif (isset($_SERVER['HTTP_REAL_IP']) && !empty($_SERVER['HTTP_REAL_IP'])) {
               $target_ip = trim($_SERVER['HTTP_REAL_IP']);
           } else {
               $target_ip = $_SERVER['REMOTE_ADDR'];
           }
           // 校验自动获取的IP合法性
           if (!filter_var($target_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
               exit('iperr2');
           }
       }
       
       // 5. 读取 hosts.conf 文件内容
       $file_content = '';
       $old_line_ip = '';
       $file_exists = file_exists($hosts_file);
       if ($file_exists) {
           $file_content = file_get_contents($hosts_file);
           if ($file_content === false) {
               exit('fileerr');
           }
           // 正则匹配当前hostname对应的旧IP
           $pattern = '/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+' . preg_quote($hostname, '/') . '$/m';
           if (preg_match($pattern, $file_content, $match)) {
               $old_line_ip = $match[1];
           }
       }
       
       // 6. 判断IP无变化,直接退出不修改文件、不重载服务
       if ($old_line_ip === $target_ip) {
           exit('nochg');
       }
       
       // 7. 替换/新增hostname对应的IP行
       $lines = explode(PHP_EOL, $file_content);
       $found_match = false;
       $new_lines = [];
       
       foreach ($lines as $line) {
           $trim_line = trim($line);
           // 匹配当前主机名的旧行,替换IP
           if (preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s+' . preg_quote($hostname, '/') . '$/', $trim_line)) {
               $new_lines[] = $target_ip . ' ' . $hostname;
               $found_match = true;
           } else {
               // 保留其他原有行不变
               $new_lines[] = $line;
           }
       }
       
       // 文件内无此hostname,则追加新行
       if (!$found_match) {
           $new_lines[] = $target_ip . ' ' . $hostname;
       }
       
       // 组装新文件内容
       $new_file_content = implode(PHP_EOL, $new_lines);
       
       // 写入 hosts.conf
       $write_result = file_put_contents($hosts_file, $new_file_content);
       if ($write_result === false) {
           exit('fileerr2');
       }
       
       
       // 返回更新成功信息
       exit('good');

        5. 需要兼容花生壳的,还可以加上重写规则:

  rewrite ^/ph/update$ /ph/update.php last;

        

三、安装配置:

        1. 打开 linux 终端,输入下面命令;

        #在终端中使用 下载coredns
        wget https://github.com/coredns/coredns/releases/download/v1.11.3/coredns_1.11.3_linux_amd64.tgz 
        
        #在终端中解压程序
        tar xzvf coredns_*.tgz && sudo mv coredns /usr/local/bin/
        
        #创建目录:
        sudo mkdir -p /etc/coredns

         2. 编辑配置文件 /etc/coredns/Corefile 内容

.:53 {
    log                # 打印所有DNS请求日志
    errors             # 输出解析错误
    reload 6s         # 配置文件修改自动重载
    cache 60           # 缓存解析结果60秒
    loadbalance        # A记录轮询负载均衡
    hosts /www/wwwroot/ddns.j64.cn/hosts.conf {
        reload 6s
        ttl 300
        fallthrough
    }
    forward . 223.5.5.5 223.6.6.6 {
        max_concurrent 1000
        health_check 5s
        policy random
    }
    loop
}


四、安装服务

        1. 创建服务文件 /etc/systemd/system/coredns.service

[Unit]
Description=CoreDNS DNS Server
After=network.target‌‌:ml-citation{ref="20,22" appearance="aggregated" data="citationList"}

[Service]
ExecStart=/usr/local/bin/coredns -conf /etc/coredns/Corefile
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

        2. 启动服务:

sudo systemctl daemon-reload && sudo systemctl enable coredns && sudo systemctl start coredns


五、使用方法:

http://ddns.j64.cn/ph/update.php?token=token&hostname=主机名&myip=IP地址

token :token 作为验证字符,可以自己修改

主机名:你设置的比如:xx.d.j64.cn

IP地址:可以不填,会自动用自己当前的地址


实在下载不了,备用下载链接: http://www.xs5k.com/ddns_files.7z

搜索
«    2026年7月    »
12345
6789101112
13141516171819
20212223242526
2728293031
阿里云优惠通道
腾讯云优惠通道
网站分类
控制面板
您好,欢迎到访网站!
  查看权限
文章归档
网站收藏
友情链接

Powered By Z-BlogPHP 1.7.5

本站原名:小说我看过,因为媳妇不让看小说了,只好改作技术博客,分享点自己微薄的技术。
ICP备案号:豫ICP备2021017518号-7   公安备案图标 豫公网安备41077102000127号