.Net Core跨平台应用研究-HelloDDNS(动态域名篇)

.Net Core跨平台应用研究-HelloDDNS

-玩转DDNS

摘要

为解决自己搭建的内网服务器需要域名而因没有超级用户密码不能开启光猫内置DDNS功能的问题,自己动手,基于.net core,实现动态域名的自助解析更新功能。

起因

最近学习ABP开源项目框架,因测试和展示需求,需要部署基于asp.net core的web应用。手上有一个闲置了两年的35互联基于windows IIS的虚拟主机空间,联系服务商升级支持.net core运行时,增加无托管应用程序池,等了两天,技术支持回复不能予以支持,建议购买云主机。

登录35的管理控制台,看了看35云主机的价格,2核4G内存10M出口带宽的云主机,1年不下5K大洋的价格,让人无语。

听说马云baba的阿里云性价比不错,登录阿里云,2核4G的ECS,1年价格也不低于1.5K。

错过了双11,也错过了双12,肿么办?

想到家里100M的电信宽带,20M的上行速率,是不是可以利用下呢?

正好最近在折腾基于arm64的Linux嵌入式平台(ubuntu core内核),已经成功实现了.net core应用跨平台部署(详见之前《.Net Core跨平台应用研究-HelloArm(串口篇)》文章),只要解决了外部网络访问及域名解析问题,手上就是现成的云主机啊。

习大大说,撸起袖子加油干。

说干就干。

自已动手,丰衣足食

.Net Core Web应用部署

首先,需要解决web app的部署。发布.net core Web项目的Linux(arm64)平台运行版本,部署到Linux。具体步骤参见笔者另一篇文章《.Net Core跨平台应用研究-HelloArm(串口篇)》,在此不再赘述。

配置外网访问

登录电信提供的光猫,开启端口映射功能。(不懂的同学请自行百度或必应)

通过www.ip138.com,查看自己的外网地址(本人直接使用的光猫路由功能,未使用二级路由),或登录光猫查看WLAN信息,获取自己的外网IP地址。

关掉手机WIFI,用4G上网,通过手机浏览器访问http://外网IP:Port,访问发布的Web站点,bingo,访问成功。

有同学会问,为什么要关掉手机wifi用流量访问?通常这些小型的家用路由器之类,是不会具有NAT回环配置功能的,无法从内网通过外网IP再NAT到内网IP。我的光猫,也不例外。

DDNS简介

稍懂网络知识的同学应该知道,家庭宽带用户,每次拨号上网得到IP地址是非固定的(固定IP地址的带宽线路用户,每年至少需要几万大洋哦,非土豪用户,一般不会申请 固定IP),光猫断个电或由于某些原因重新启动一下,IP就发生了变化。

如何解决这个问题呢?此时,本文的主角终于快要出现了。

我们知道,TCP/IP网络中的计算机,是通过IP地址进行寻址访问的,由于IP地址不好记忆,人们发明了一种便于标识IP的方式:域名。通过域名与IP进行绑定,解决IP地址难以记忆的问题。

域名到IP地址的解析,是由DNS服务所完成。

DNS通常只实现静态注册IP地址的解析,我们这种经常会变化的IP地址怎么办呢?

这年头,只要有需求,就会有对应的产品或服务。针对这种IP地坦经常发生变化又需要有域名的情况,一种叫DDNS的服务应运而生。

顾名思义,DDNS就是动态DNS,当IP地址发生变化时,只要能及对所辖域名的DNS服务器进行更新,则可保证对应域名的解析服务可用。当然,DDNS在IP发生变化时,会有一个失效时间,但只要更新及时,失效时间很短,用于测试和展示的话,基本不影响使用。

DDNS使用

中国的互联网络,从电话拨号上网,到ADSL,到现在的光纤入户,经历了好几代的演进。目前,大部分的接入设备-光猫,都是具备DDNS功能的,只不过该功能属于高阶功能,通常需要具有管理员权限才能使用。

使用DDNS服务,需要先到DDNS服务商注册,注册成功后,可下载DDNS客户端软件(pc端)或配置开启光猫DDNS功能,即可实现DDNS服务的自助更新。

DDNS服务商

笔者接触互联网较早(没有从事互联网行业,感觉错失几个亿,在此汗一个),知道国内较早提供DDNS服务的是花生壳,国外提供DDNS的有dynu.com、noip.com等。

另外在折腾路由器的过程中,用过的内置支持DDNS的光猫,在此记录一下:

华为HG8245光猫,支持3322、dynu;

烽火HG2201T光猫,支持oray(花生壳);

……

蛋疼的中兴F450(V2)

因升级到100M带宽,电信给提供了一个支持1000M的光猫,型号为中兴F450。根据网络上目前能查询到的资料,一翻折腾,确定目前中兴F450(V2版本)的光猫无法在免拆机的情况获取到超级管理员帐号。

在没有超管密码的情况下,无法进入高级网络应用功能设置,不能开启光猫内置的动态域名支持(其实我也不知道它支持哪家的动态域名哈)。

生命不休,折腾不止

虽然本人的动手能力,足以通过拆机连接TTL串行接口的方式,以串行终端登录的方式获取中兴光猫的超级管理用户密码,一方面,考虑到光猫还在保修期(最近升级更换的新光猫呵),另一方,之前对DNS,DDNS的工作机制有一定的了解,知道DDNS厂家通常除了DDNS Client工具外,也有API接口可供用户自行开发集成。

本着自已动手,丰衣足食的原则,决定自己实现DDNS定期更新功能。

DDNS API协议研究

获取相关DDNS协议

ORAY

通过一翻搜索,查询到花生壳的协议文档,链接在这里,支持浏览器手动更新和原始Http Get请求:

1.使用URL验证

适用于浏览器或应用程序(fetch, curl, lwp-request),可以在URL中包含验证信息。

http://username:password@ddns.oray.com/ph/update?hostname=yourhostname&myip=ipaddress

2.原始HTTP GET请求

实际的HTTP请求,类似下面的代码。 其中 base-64-authorization 请使用 Base64 加密 username:password 后的字符替换。

GET /ph/update?hostname=yourhostname&myip=ipaddress HTTP/1.0

Host: ddns.oray.com

Authorization: Basic base-64-authorization

User-Agent: Oray

请注意必须使用GET请求,POST是不被允许的。

更新参数

目前仅允许提交以下参数

参数      说明

hostname    需要更新的域名,此域名必须是开通花生壳服务。多个域名使用,分隔,默认为空,则更新护照下所有激活的域名。例:hostname=test.oray.com,customtest.oray.com

myip     需要更新的IP地址,可以不填。如果不指定,则由服务器获取到的IP地址为准。

看了花生壳的动态域名更新协议,心中有底了,very easy。

DYNU

因本人以前有申请过DYNU的免费域名,顺便也查了下接口文档,文档地址如下(某些地区需要梯子呵):

https://www.dynu.com/DynamicDNS/IP-Update-Protocol

主要内容如下:

GET /nic/update?myip=198.144.117.32 HTTP/1.1

Host: api.dynu.com

Authorization: Basic [BASE64-ENCODED-USERNAME:PASSWORD-PAIR]

User-Agent: [DEVICE-MODEL-MAKE-VERSION]

Oray和Dynu的接口协议简直是一个模子出来的,不知道是谁模仿了谁,本人不想深究,好用就行。

NO-IP

群中有网友提到No-IP,本人没有注册过,相关资料在此,无需FQ,有需要的同学拿走不谢。

https://www.noip.com/

https://www.noip.com/integrate/request

http://username:password@dynupdate.no-ip.com/nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4

万事具备 ,只欠编码……

编码实践

创建类库项目

打开宇宙最强IDE,名字我就不说了,你懂的,新建一个类库项目,选择.NET Standard类库。

为什么选择.NET Standard类库,.net跨平台的之首选佳品。相关知识自行百度/必应补充。

类库实现以下功能:

夜深了,还是上图吧

创建dotnet core控制台程序

为啥选择dotnet core,原因很简单,跨平台。本人需要部署到Linux系统平台。

照旧,上图

HttpClient和HttpClientFactor

原来准备直接使用HttpClient,参考一些文章后,我发现HttpClient的使用会导致一些问题:

.NET Core 中 HttpClientFactory 如何解决 HttpClient 臭名昭著的问题

https://www.zhibaoku.com/2018/10/31/net-core-zhong-httpclientfactory-ruhejiejue-httpclient-choumingzhaozhudewenti/

What is HttpClientFactory?

https://www.stevejgordon.co.uk/introduction-to-httpclientfactory-aspnetcore

.NET Core 2.1中的HttpClientFactory最佳实践

https://www.cnblogs.com/xiaoliangge/p/9476568.html

Microsoft.Extensions.Http

网上博客文章中,介绍IHttpClientFactory的可真不少,但是都没有提到需要安装其所需要Package,最后经过东搜西搜,花费了一翻不小的力气,还是在官方文档中找到了解决方法(好怀念有Google的日子啊)

需要安装Microsoft.Extensions.Http包

官方文档出处:

https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2

完成程序,运行:

本项目已开源至:https://github.com/flyfire-cn/flyfire.DDNS

类库flyfire.DDNS已发布至:https://www.nuget.org

有需要的同学,请自行获取。

注:本次折腾过程中,还出现了一个意外。在配置光猫NAT端口映射时,发现死活无法生效,开始还以为是光猫功能有问题,差点准备换光猫了(手上还有HW -HG8245光猫,因是华为早期产品,功耗有点大,无线信号稍弱,退休闲置中),无意中发现WLAN中得到的IP地址,居然是一个10开头的地址,原来电信把我给分配到了一个大局域网中了。

同学们如果遇到这种情况,不要慌,给10000号打报修电话,要求使用公网IP,通常电信客服会帮你搞定。

原文地址:https://www.cnblogs.com/flyfire-cn/p/10381298.html

时间: 2024-11-08 06:26:16

.Net Core跨平台应用研究-HelloDDNS(动态域名篇)的相关文章

.Net Core应用程序跨平台应用研究-HelloArm(串口篇)

引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证研究. 硬件环境 硬件系统经过对比筛选,选用了友善之臂出品的NanoPC-T3 Plus.该控制板为掌上型嵌入式Linux系统迷你PC,采用64位三星arm CPU,具有完善的硬件接口和驱动支持,大于1G的内存和8G以上的eMMC闪存,具有较高的性能价格比. NanoPC-T3 Plus是友善之臂专

.NET Core跨平台:使用.NET Core开发一个初心源商城总括

1..NET Core基本介绍 a 作为一个.NET的开发者,在以前的开发中,我们开发的项目基本都是部署在windows服务器上,但是在windows服务器上的话某些比较流行的解决访问量的方案基本都是先出现在linux上,而后才能迁移出现windows上,而且效率处理方面也不再一个级别.曾经让.NET的开发者非常无奈可又不得不遵循,随着时间的推移,后来第三方公司开发了.NET可以依赖跨平台的技术Mono,我们可以简单地对其开发的程序实现跨平台.关于Mono部署ASP.NET跨平台的技术我曾经写过

教程:动手用自己电脑搭建一个网站 (nat123 花生壳 动态域名 个人电脑做服务器)

先ps一下..今晚试了N种方法,终于找到一个靠谱 免费 好用的方法,来改装自己电脑成为服务器,在外网也能通过域名访问了!!! 需要准备的东西: Tomcat:这个是web容器,其实有了这个就已经让电脑成为服务器了,在自己电脑上可以通过 localhost:8080/xxx 来访问自己电脑上的web应用了,而其他人也可以通过你的IP地址 xxx.xxx.xx.xx:8080 来访问你的web应用.具体的安装和基本使用方法在李刚的轻量级javaee一书中有很详细的说明. nat123:提供免费域名.

在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序

引子 在此前的一篇文章中,我介绍了如何在本地docker环境中运行ASP.NET Core跨平台应用程序(http://www.cnblogs.com/chenxizhang/p/7148657.html),看起来非常不错,不是吗?那么,如果我们希望真正在实际的生产环境去部署和运行这个应用程序,应该怎么做呢? 通常来说,有两种方案可以选择 1. 在目标运行环境(可以是本地的服务器,也可以是云端)申请虚拟机,然后启用docker运行这些应用程序,所有的细节都可以(也必须)由你自己控制. 2. 使用

.NET Core跨平台的奥秘[上篇]:历史的枷锁

微软推出的第一个版本的.NET Framework是一个面向Windows桌面和服务器的基础框架,在此之后,为此微软根据设备自身的需求对.NET Framework进行裁剪,不断推出了针对具体设备类型的.NET Framework版本以实现针对移动.平板和嵌入式设备提供支持.除此之外,在Windows平台之外一致游荡着一只特立独行的猴子(Mono)..NET平台看起来欣欣向荣,而实际上却日薄西山,就在这个时候微软走了一条唯一正确的道路,那就是基于跨平台理念重新设计的.NET Core,以及由此驱

.NET Core 跨平台发布(dotnet publish)

.NET Core 跨平台发布(dotnet publish) ,无需安装.NET Core SDK,就可以运行. 前面讲解了.NET Core 的VSCode 开发.现在来讲讲发布(dotnet publish). .NET Core and ASP.NET Core 1.0 RC2 runtime and libraries 在五月中旬发布. .NET Core and ASP.NET Core 1.0 RTM (release) runtime and libraries  六月底发布.

使用EJS脚本实现花生壳动态域名更新服务(二)

此博客为9925.org的镜像,登录9925.org可以查看到最新博文. 原文出处:http://ily.so/AV3yQv 在<使用EJS脚本实现花生壳动态域名更新服务(一)>中,我们粗暴的把代码放在一起,然后执行.利用EJS支持的“#include”预编译指令我们可以以更加优美的方式组织代码. 步骤如下: 把BASE64编码部分的代码复制到一个新建的脚本. /** * UTF16和UTF8转换对照表 * U+00000000 – U+0000007F   0xxxxxxx * U+0000

使用EJS脚本实现花生壳动态域名更新服务(一)

此博客为9925.org的镜像,登录9925.org可以查看到最新博文. 原文出处:http://ily.so/FrQBne 花生壳提供了动态域名服务,动态域名可实现几乎实时生效的DNS解析服务,并且花生壳还提供了webapi更新域名解析的服务. 通过EJS我们可以轻松调用花生壳提供的webapi服务实现动态域名更新功能. 注意:这个webapi是采用Http Basic Authentication(HTTP基本认证)的,因此账号和密码必须用BASE64(account:password)编码

ImageSharp .NET Core跨平台图形处理库

ImageSharp 是支持.NET Core跨平台图形处理库,ImageSharp是ImageProcessor 的.NET Core跨平台实现. ImageSharp 支持如下操作: 调整大小,裁剪,翻转,旋转,边缘检测等. 支持BMP,PNG,GIF,JPEG 编码器. EXIF 读取和针对JPEG写. 暂时还不支持Drawing ,即无法支持验证码及水印等操作. GitHub:https://github.com/JimBobSquarePants/ImageSharp 目前版本为1.0