动态域名解析,或DNSR,通常用于解析IP地址经常变化的域名。电信网络提供了公网IP,给广大程序员远程办公、内容分享等方面带来了极大的便利。但公网IP是动态的,它会经常变化,因此通过IP的方式访问非常不友好。因此就需要引入“花生壳”等动态域名解析工具,这类解析工具限制很多,如免费版只能使用指定的二级域名,解析的各类很少,域名数量有限制等等。

还好我们有.NET!(和阿里云)通过简短的几行.NET代码,即可轻松完成动态域名解析。

动态域名解析的过程

  • 第一步 知道自己的IP地址
  • 第二步 更新DNSIP解析值

获取自己的IP地址

现在网上有许多网站、服务或者API可以快速获取自己的IP地址,如随手在百度上可以找到http://www.ip138.com/,国外还有https://www.ipify.org/等服务,都挺好用。这些服务.NET也可以做,只需几行简短的代码,然后部署到服务器上:

async Task Main()
{await WebHost.CreateDefaultBuilder().UseStartup<UserQuery>().Build().RunAsync();
}public void ConfigureServices(IServiceCollection services) {}public void Configure(IApplicationBuilder app) => app.Run(ctx => ctx.Response.WriteAsync(ctx.Connection.RemoteIpAddress.ToString()));

我已经将该代码部署到了服务器上,域名是:https://echo-ip.starworks.cc,可供有需要的朋友测试。

更新DNS解析值

各大域名网站都有自己的DNS解析API或者SDK,阿里云也不例外,我可以通过几行简短的C#代码即可更新DNS解析值:

// 安装NuGet包:aliyun-net-sdk-alidns
string currentIp = new WebClient().DownloadString("https://echo-ip.starworks.cc/");
var client = new DefaultAcsClient(DefaultProfile.GetProfile("", Util.GetPassword("aliyun_dns_access_key"), Util.GetPassword("aliyun_dns_secret_key")));
var domainRecords = client.GetAcsResponse(new DescribeDomainRecordsRequest
{ DomainName = "starworks.cc", RRKeyWord = "cool",
}).DomainRecords;DescribeDomainRecordsResponse.DescribeDomainRecords_Record homeRecord = domainRecords.First(x => x.RR == "cool");
if (homeRecord._Value != currentIp)
{client.GetAcsResponse(new UpdateDomainRecordRequest{RecordId = homeRecord.RecordId,RR = homeRecord.RR,Type = homeRecord.Type,_Value = currentIp,});
}

然后将该脚本添加到电脑的开机启动项,这样每次开机时,即可确保我的cool.starworks.cc为最新的本地IP了。

阿里云的SDK设计有点取巧了,客户端DefaultAcsClient只有一个方法:GetAcsResponse<T>(T request),这样一来不太方便,可以调用哪些方法不能一目了然,二来还会让调用方感觉很迷惑,明明是更新操作,为什么要调用Get

与此相比,腾讯云提供的SDK就人性化很多,虽然我的域名绑定在阿里云上。?

不是80端口怎么办?

默认是不允许80/443端口开放外网的,因此即使有动态域名绑定,以后发给客户时,网址里面也带一个长长的端口名,如:https://cool.starworks.cc:44300。在DNS记录类型中,有多种方式解决这个问题,可以指定为SRV或者显性URL隐性URL来解决这个问题:

这个过程可以通过C#代码完成,代码如下:

client.GetAcsResponse(new AddDomainRecordRequest
{DomainName = "starworks.cc", RR = "cool",Type = "SRV",_Value = "0 5 44403 home.starworks.cc",
}

这样一来,只需在浏览器中输入:http://cool.starworks.cc,即可自动显示我http://home.starworks.cc:44403 的内容:

总结

文中的“祖传代码”链接如下,可随意下载使用,用LINQPad打开:

  • 管理界面:https://github.com/sdcb/blog-data/blob/master/2019/20190927-dotnet-dynamic-domain-resolution/aliyun-manage-dns.linq
  • 动态DNS:https://github.com/sdcb/blog-data/blob/master/2019/20190927-dotnet-dynamic-domain-resolution/aliyun-update-dns.linq

其中管理界面运行效果如下:

使用时将我的starworks.cc域名换成你的即可。

说来其实我不太关心.NET以后会发展成什么样子,相比之下,我更关心我立马能用.NET做出什么来。.NET Core 3.0已经发布,其新功能还没来得及细看,但.NET当下能提供给我的想象力就已经非常丰富了,这可能就是我心中的“自由”:只要探索,总会有新的发现。

用.NET做动态域名解析相关推荐

  1. 用.NET做DDNS动态域名解析和SSL证书申请

    本文主要介绍 IPv6 配置 DDNS 解析和 SSL 证书申请工具的开发历程和其中的相关知识.工具使用.NET开发,已开源,目前该工具的域名解析只支持阿里云. 文中提及或使用的 .NET 开源项目: ...

  2. 群晖NAS教程(二十一)、利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云、腾讯云dnspod、Cloudflare、华为云)

    群晖NAS教程(二十一).利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云.腾讯云dnspod.Cloudflare.华为云) 为了更好的浏览体验,欢迎光顾勤奋的凯尔森 ...

  3. 通过动态域名解析(DDNS)实现远程控制Windows主机

    通过动态域名解析(DDNS)实现远程控制Windows主机 1.常规实现远程桌面控制的几种方式 2.开始配置前的一些准备工作 3.配置路由器的虚拟服务器 4.设置被控制电脑允许被远程访问 5.动态域名 ...

  4. Python+阿里云DNS 搭建DDNS动态域名解析

    家用的动态公网IP在断电以及一段时间后会变化,现在家宽公网IP开网盘以及代理管得越来越严格,已经有检测到被封的案例 上海检测web封停 这让我这种挂种子的PT党(迫真)感到害怕 以前我把国外的免费域名 ...

  5. 动态域名解析--每步动态域名解析

    什么是ddns? ddns是动态dns,也就是可以解析动态ip地址的软件 有什么作用? ddns可以实现的服务很多,可以实现在自己的服务器上架设网站,ftp,甚至是可以在自己的机器上做游戏私服. 什么 ...

  6. 腾讯云域名与个人树莓派设备的动态域名解析

    腾讯云域名与个人pc的动态域名解析 前言 目标 前置条件 路由器设置端口映射 腾讯云域名动态解析脚本 Windows脚本定时处理 前言 现在随着技术的发展,搭建个人网站已经是一个普遍的事情,也可以方便 ...

  7. DNS部署之动态域名解析DDNS

    DNS部署之动态域名解析DDNS dns+dhcp=ddns=动态域名解析=花生壳 DDNS: DDNS:之前的远程更新是基于静态网络做的,但是如果我们用动态网络获取ip,dns就不能及时更新到ip的 ...

  8. Openwrt动态域名解析

    Openwrt动态域名解析 书接上回,做armbian动态域名解析还可以用openwrt大法搞他 Armbian安装Docker之后的100种玩儿法<动态域名解析DDNS自动更新> 1&g ...

  9. linux中如何实现动态域名解析

    1.什么是动态域名解析 动态域名解析服务,是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候,客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程 ...

  10. 动态域名解析软件,域名解析管理系统学习教程

    静态域名解析,即是平常所说的域名解析,指将一个域名解析到一个固定公网IP,设定后是不会变的. 动态域名解析,这个动态是指动态公网ip,即是将动态变化的公网ip解析到固定一个域名,保证域名的长久可用. ...

最新文章

  1. Linq To select
  2. python定义一个字典并遍历字典中的键和值_python字典操作总结
  3. UA OPTI570 量子力学32 参考系与绘景
  4. Android okHttp上传图片
  5. 每日一学:如何转换png图片为jpg图片
  6. rem.js常用代码
  7. python面试题之简要描述Python的垃圾回收机制(garbage collection)
  8. centos 部署.netcore 开发环境
  9. mysql新手常见问题_MySQL数据库入门-新手常见问题答疑
  10. 44 The shopping psychology 购物心理
  11. Python文件与函数练习题
  12. TED如何和压力做朋友(第二天)
  13. vs商业智能项目的安装
  14. 台式机通过网线共享笔记本电脑无线网络
  15. 传统企业:转型互联网,机遇大,挑战也大
  16. 在鹅厂工作的广西表妹教我用Python生成会跳舞的美女~
  17. 关系模式(关系模式必须遵循)
  18. error:jump to case label [-fpermissive]
  19. 【破解利器】反汇编工具 and 反编译(Decompilers)
  20. (Talking face) EVP

热门文章

  1. 2022西工大网络安全知识竞赛赛后回顾资料
  2. 扩展Win7虚拟机硬盘
  3. PyQt5中的下拉框控件(QComboBox)文本居中
  4. 为什么亚马逊无货源是国际电商新时代
  5. 隐藏APP图标并通过代码启动
  6. 常见的非关系型数据库有哪些
  7. 【视频学习笔记】(霹雳吧啦Wz)MobileNet 系列
  8. 关于神经网络中隐藏层和神经元的深入理解
  9. 【文献阅读】ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information
  10. CVPR2019论文列表(中英对照)