施工企业岗位证书有哪些,seo整站优化系统,郑州有哪些互联网公司,用html5做网站的心得体会本文主要介绍 IPv6 配置 DDNS 解析和 SSL 证书申请工具的开发历程和其中的相关知识。工具使用.NET开发#xff0c;已开源#xff0c;目前该工具的域名解析只支持阿里云。文中提及或使用的 .NET 开源项目#xff1a;SangServerTool#xff08;DDNS,SSL证书申请工具#xff… 本文主要介绍 IPv6 配置 DDNS 解析和 SSL 证书申请工具的开发历程和其中的相关知识。工具使用.NET开发已开源目前该工具的域名解析只支持阿里云。文中提及或使用的 .NET 开源项目SangServerToolDDNS,SSL证书申请工具FastTunnel内网穿透工具CertesACME证书申请库CommandLineParser命令行解析库背景前几天用.NET玩IoT设备拿出了角落吃灰的Jetson Nano。近期也买了一堆传感器还在路上准备到手之后好好捣鼓一番。Nano设备呢虽然没有一直开机但是连上了智能插座随时待命。这里不禁要吐槽一下小爱同学我把插座命令为了“Jetson Nano”然后怎么叫它小爱就是不应。行吧我只能叫他“二蛋”了啊不“小电脑”然后还被时不时听成“手电筒”。为了让后期的使用可以随时随地更顺手些那网络的处理是必不可少的。如何在外网访问内网服务如果你也有一台树莓派或者Jetson设备想让其在外网提供服务那么一般有这么几条路1.在路由器中将设备设置为DMZ区2.在路由器中配置虚拟主机3.借助其他第三方内网穿透工具因为现在一般都是光宽带了前两种呢需要拿到光猫的管理员账户账户需要费些功夫。除非你是桥接的网络用的自家路由器拨号。第三种如果你有一台外网的服务器可以借助开源项目 FastTunnel[1] 隧道开实现。这是一个.NET开发的开源的内网穿透工具。当然你也可以使用其他的第三方内网穿透工具这里不再举例。工具虽好然则不能全速走宽带的公网带宽着实非完美的方案。那么有没有更好的方案呢当然有了现在IPv6如此普及待我ipconfig一观ipconfig果然比沙子还多诚不欺我。但当我拿出之前的 nodejs 项目修改了IP监听后兴致勃勃的用手机浏览器访问了这个 IPv6 站点我不禁开始怀疑人生了。服务没法访问就算了还 ping 不通。在折腾了几番电脑防火墙和管理员身份启动之后已是半夜。无奈只好躺在床上简单搜索了几番答案便去找周公探讨究竟是哪里出了问题。翌日再次打开电脑我才发现果然不能老熬夜啊我监听的IP竟然是 0.0.0.0 这是IPv4的IPv6要用 :: 。这次等我再次用手机流量访问网站果然就顺利了许多。完全不需要什么电脑防火墙给开入站规则用管理员去权限嘛直接就进来了。知识点1.包含端口号的 IPv6 地址 http://[0:0:0:0:0:ffff:4137:270a]:9080/2.IPv6 监听的 :: 和 IPv4 的 0.0.0.0 等效3.IPv6 监听的 ::1 和 IPv4 的 127.0.0.1 等效都是环回接口什么是 DDNS我想大家应该都清楚域名解析是什么就是将不好记的IPv4地址变为好记的域名嘛。DDNS 多的D 呢是 Dynamic 顾名思义就是将我们老变的宽带IP变成固定的域名访问。之前我们拿到了一串那么长的 IPv6 地址不仅是分配的IP老变的问题再说他也不好记啊。这时我们除了使用常见的 DDNS 服务商的服务外我们也可以拿出我们程序猿之前给女朋友买的那些便宜的女朋友并不喜欢的域名来优势当然就是自己的域名自己选的想怎么解析前缀就怎么解析。好的那么假设你有一个阿里云域名要已备案通过 解析管理接口[2] 我们很容易就能自己做一个 DDNS 服务出来。SSL证书自动申请既然 DDNS 要自己整活那之前写的自动域名证书续签服务也可以直接整合进来做个新的工具。毕竟现在是个网站都用 https 了。证书自动申请这里使用的是 Certes[3] 库来实现 Let’s Encrypt 证书的自动续签。Let’s Encrypt 是一个证书颁发机构CA。要从 Let’s Encrypt 获取网站域名的证书只需要证明对域名的实际控制权即可。有两种验证方式通过域名解析添加 TXT 记录或是在网站添加指定的验证文件实现访问指定地址返回要求的字符串即可不过不支持有通配符的申请。那么假设你有一个域名通过接口解析管理这也很好实现。SangServerTool将两个功能整合成一个小工具我起名叫 SangServerTool 开源地址https://github.com/marin1993/SangServerTool 。依赖 .NET 跨平台的特性可以方便的在各种服务器上使用。作为一个控制台应用程序在参数解析上使用 CommandLineParser[4] 这个命令行解析库。这个库提供了简洁明了的 API用于操作命令行参数和相关任务并提供帮助界面。CommandLineParserSangServerTool 包含两款工具•服务器 DDNS 工具用于内网服务动态域名解析支持 IPv6•服务器 SSL 证书申请工具目前仅支持阿里云其他云服务的实现可以自行添加。提供独立的 linux-x64、linux-arm、linux-arm64、win-x64 下载[5]。其他平台可自行通过源码编译发布。这个服务的启动一般来说不需要一直运行。DDNS可以在设备开启时检测一次以后每间隔一段时间检测一次如一小时。SSL证书申请可以每天0点固定检查一次即可将要过期时程序会自动进行续期更新证书。注意 nginx 等服务需要重新加载一下证书可配置 Certificate:okshell 来实现申请成功调用你指定的脚本文件。工具的使用可以通过传入不同的参数和配置文件来实现不同的功能。DDNS和SSL证书申请作为工具只需要根据自己的需求设置好计划任务即可下面介绍这两个功能的基本使用。DDNS参数说明参数说明-c, --configRequired. Set config json file.设置配置文件路径--delay(Default: 0) How many seconds delay?启动后延迟多少秒进行检查处理默认为 0防止开机启动过早导致出现一些问题--del(Default: false) Is delete DDNS?删除配置文件中设置的DDNS域名解析默认为 false 如果为 true则尝试删除后退出--v6(Default: false) Is ipv6?使用 IPv6 来解析默认获取 IPv4--ip(Default: ) If set will be used. Otherwise automatically obtained.You can set ifconfig, It will check from https://ifconfig.me/ip to get you Internet IP.默认为空字符如果传入了指定 IP 则使用这个 IP 来解析。可以传入 ifconfig 值该值则表示通过网络获取网络出口 IP 来解析如使用本地的 IPv6 进行 DDNS 设置SangServerTool ddns -c test.json --v61如删除 DDNS 的域名解析SangServerTool ddns -c test.json --del1该功能的配置文件使用 Access 和 DDNS 这两段。{Access: {AK: 阿里云 AccessKeyId, //AccessKeyIdSK: 阿里云 AccessKeySecret //AccessKeySecret},DDNS: {ddns: xxx.domain.com, // DDNS要解析的域名basedomain: domain.com // 主域名}
}这一功能的核心其实是电脑网卡IP的获取需要判断网卡的类型排除回环和临时和本地的 IPv6 地址临时IPv6不会第一个FirstOrDefault()就可以了。/// summary
/// 获取电脑网卡IP
/// /summary
/// param nameisV6是获取IPv6/param
/// returns/returns
public static string? CurrentIPAddress(bool isV6 false)
{var family isV6? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork;Liststring exps new Liststring { docker0, lo, l4tbr0 };var ips NetworkInterface.GetAllNetworkInterfaces().Where(p !exps.Contains(p.Name)) // 排除docker、lo等.Select(p p.GetIPProperties()).SelectMany(p p.UnicastAddresses).Where(p p.Address.AddressFamily family !IPAddress.IsLoopback(p.Address));//IPv6 时去除本地的if (family AddressFamily.InterNetworkV6){ips ips.Where(p !p.Address.IsIPv6LinkLocal);}return ips.FirstOrDefault()?.Address.ToString();
}SSL参数说明参数说明-c, --configRequired. Set config json file.设置配置文件路径--retry(Default: 2) How many retries?验证域名时重试几次默认2次--delay(Default: 10) How many seconds to retry?验证域名时重试间隔多少秒默认10秒如申请域名重试 3 次SangServerTool ssl -c test.json --retry3该功能的配置文件使用 Access 、 Certificate 、 ACME 、CSR 文章不详细介绍配置文件详细配置文件说明可前往仓库查阅。在配置 Certificate 信息时•如果是新申请的只需要配置好证书 cerpath 和证书私钥 privatekey 的存放路径程序会自行生成。若已经有证书会私钥配置好其位置会自行更新证书或使用当前已有的私钥。•domains 支持多个域名使用空格隔开•okshell 证书更新后执行的脚本文件如果服务器不能热加载证书记得配置好通过脚本文件进行重启服务在配置 ACME 信息时•如果第一次使用仅需要写上你的邮箱 email 和存放 ACME 账户的私钥文件位置 account证书过期会收到邮件提醒•如果之前已有账户可以使用已有的账户私钥配置给 account关于 CSR 这段配不配都无所谓毕竟是免费的证书也不会生效只是验证了域名的归属权。DDNS 配置使用示例下面以 Jetson Nano 为例演示其 DDNS 功能的配置使用。Windows 系统可通过“任务计划程序”进行类似操作。1.首先前往仓库的 releases 下载程序上传到 Jetson Nano然后添加执行权限。2.按照说明编写自己的配置文件3.编写开机启动服务sudo vi /etc/systemd/system/ddns.service文件内容如下[Unit]
DescriptionSangServerTool DDNS
Afternetwork.target
ConditionPathExists/home/sangsq/.tools/SangServerTool[Service]
Typeforking
ExecStart/home/sangsq/.tools/SangServerTool ddns -c /home/sangsq/.tools/config.json --v61 --delay30
TimeoutSec0
StandardOutputjournalconsole
RemainAfterExityes[Install]
WantedBymulti-user.targetConditionPathExists 为刚上传的程序文件地址当其存在这个服务才会启动ExecStart 这里要写程序和配置文件的全路径在这里我用的是 IPv6 地址进行解析。保险起见服务启动后延迟 30 秒后开始执行主要是接口查询需要访问阿里云服务器刚启动的时候直接运行可能会报 DNS 解析的错误也许使用 Afternetwork-online.target 会解决不过没有测试这个。1.设置开机启动服务sudo systemctl enable ddns.service1.添加计划任务除了开机启动外我们也可以通过计划任务半个小时执行以下程序检查 IP 是否有变化。sudo crontab -e添加计划任务*/30 * * * * /home/sangsq/.tools/SangServerTool ddns -c /home/sangsq/.tools/config.json --v61这里去除了延迟的检测因为不是刚开机了。1.其他SSL 证书申请也可以通过计划任务处理每天 0 点检查一次如果服务器不能热加载证书记得在配置文件配置好 okshell 来实现 web 服务器的重启。后记这篇文章随着软件的开发迭代修修改改终于算是告一段落。后续好好整活这个台小电脑再补充写一些其他的硬件设备。目前手机的网络应该是都有 IPv6 地址的但是如果你使用的网络只接入了 IPv4那么你就不能访问纯IPv6的服务器。如果运营商支持但是你的路由器不支持你也是无法使用 IPv6 网络的。如果你想检测自己的 IPv6 可用性可以访问这个 IPv6 检测网站[6] 。References[1] FastTunnel: https://gitee.com/Hgui/FastTunnel[2] 解析管理接口: https://help.aliyun.com/document_detail/29771.html[3] Certes: https://github.com/fszlin/certes[4] CommandLineParser: https://github.com/commandlineparser/commandline[5] linux-x64、linux-arm、linux-arm64、win-x64 下载: https://github.com/marin1993/SangServerTool/releases/latest[6] IPv6 检测网站: http://test-ipv6.com/