本帖最后由 zimr 于 2018-4-22 10:16 编辑
实现原理:
1.在一个公网固定IP的服务器上部署PHP版域名解析API作为服务端
2.客户端访问服务器的URL
3.服务器GET客户端IP并把客户端IP解析到指定的域名A记录上
需要的环境有
1.固定IP的公网服务器 并运行宝塔面板(面板环境 推荐nginx+php,Apache+php作为备选)
2.阿里云域名,并申请阿里云 AccessKey, AccessKeySecret(先保存记录)
3.动态IP带宽(公网非城域),并且有可运行linux的设备 且24小时不关机,(我个人在家有群晖和宝塔面板都是不关机的;也可以树莓派甚至是可curl的路由)
适用环境:
家庭或者公司有公网访问需求的,私有云盘,工作资料私有共享; 可能有人用过花生壳,效果大家都知道 不多说
如果满足条件就继续:
一,公网服务器配置
1.解析一个自定域名到该服务器,并通过面板创建对应的网站,不需要数据库。
2.再解析一个要作为动态域名的子域名,指向暂时IP随便写一个
2.ssh进入新建网站根目录,运行命令(由阿里云提供)
- git clone https://github.com/roura356a/alicloud-php-dns-updater.git dyndns-updater
复制代码
3.这时候就会有根目录下就有有一个文件夹 dyndns-updater
4.进入dyndns-updater文件夹找到 index.php 点击编辑
代码如下:
- <?php
- date_default_timezone_set('UTC');
- include_once 'alicloud-php-updaterecord/V20150109/AlicloudUpdateRecord.php';
- use Roura\Alicloud\V20150109\AlicloudUpdateRecord;
- $AccessKeyId = '填写你的 AccessKeyId';
- $AccessKeySecret = '填写你的 AccessKeySecret';
- $updater = new AlicloudUpdateRecord($AccessKeyId, $AccessKeySecret);
- $newIp = $_SERVER['REMOTE_ADDR']; // New IP
- $updater->setDomainName('填写你的顶级域名(没有www)如abc.com');
- $updater->setRecordType('A');
- $updater->setRR('填写作为动态解析的子域名');
- $updater->setValue($newIp);
- print_r($updater->sendRequest());
复制代码 修改后保存,然后进行先测试,然后再作安全方面配置
浏览器打开
http://你服务端域名/dyndns-updater/
如果返回格式
- Array
- (
- [RecordId] => 3666544576879860
- [RequestId] => F4VDF8A-D2DF-49VV-ER00-458D6918FDDE
- )
复制代码
那么说明解析成功,应该稍后就能收到DNS变更邮件提醒,如果没有返回则检查配置,和确认你的动态IP是否是城域
安全配置
接下来做安全方面配置,避免你的url泄露,无论谁 一访问 A记录就解析成别人的了,总之谁访问就解析谁;
宝塔面板点击站点修改——网站目录——密码访问 点击开启,密码建议稍复杂 我这里举例为 账号:btdnsadmin 密码:passwd
设置后 服务器端就完成了;
接下来,来到动态IP环境中,使用你的linux或者宝塔面板 创建定时任务执行脚本
这里指正阿里云的密码传参带""的问题并不是所有环境都能用,这里列举宝塔面板 计划任务中的脚本执行
执行命令(脚本) 时间周期建议10分钟一次就行,本人测试过1分钟 都是能稳定运行的
- curl -u btdnsadmin:passwd http://你服务端域名/dyndns-updater/index.php
复制代码
btdnsadmin:passwd为你服务端为网站建立的访问账号:密码
返回日志
- ★[2018-04-21 22:34:02] Successful
- ----------------------------------------------------------------------------
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
- 100 183 0 183 0 0 309 0 --:--:-- --:--:-- --:--:-- 309
- Array
- (
- [RequestId] => F4VDF8A-D2DF-49VV-ER00-458D6918FDDE
- [HostId] => dns.aliyuncs.com
- [Code] => DomainRecordDuplicate
- )
复制代码
说明执行成功
如没有公网服务器的,那么就只能选择纯客户端版python的 这里就脱离宝塔面板内容了,就不说了 度娘有一堆教程。
如果动态IP宽带没有公网IP的,可以尝试部署Ngrok 内网穿透
感谢宝塔能有这样的环境给我们各种折腾;
|