为家庭公网IP配置DDNS域名
文章目录
- 域名配置
- 域名更新
- frp配置修改
在成功完成frp改造Windows笔记本实现家庭版免费内网穿透之后,某天我突然发现内网穿透失效了,一番排查之后原来是路由器对应的公网IP更换了。果然我分到的并不是固定的公网IP,而是会定期变化的。为了免受定期在配置文件中更换IP之苦,我决定将变化的IP与固定的域名绑定,过上懒人该过的快乐躺平生活。
DDNS(Dynamic DNS,动态DNS)是一种网络服务,它允许您将静态域名(如example.com)绑定到动态IP地址。动态IP地址通常是指从互联网服务提供商(ISP)获得的IP地址,这些地址可能会在用户每次连接到互联网时发生变化。
DDNS服务的核心功能是跟踪用户IP地址的变化,并在IP地址发生变化时自动更新域名解析记录,确保域名始终指向当前的IP地址。这样,即使用户的IP地址发生变化,其他网络用户仍然可以通过静态域名访问到用户的服务或设备。
域名配置
进入阿里云一元域名购买页,搜索合适的域名并斥巨资一元购买,接下来一年你就拥有了一个可用的IP。
然后准备好身份证,按照指引完成实名认证。
进入解析设置页,将域名与当前的IP绑定,虽然生效时间写着十分钟,不过实测是立即生效的。



域名更新
首先在Windows下的Python3环境中装这几个包:
pip3 install aliyun-python-sdk-core-v3 --user
pip3 install aliyun-python-sdk-domain --user
pip3 install aliyun-python-sdk-alidns --user
根据创建AccessKey教程,按如下步骤创建RAM用户的AccessKey:

添加权限:

复制AccessKey ID和AccessKey Secret或直接导出CSV文件

查看API使用文档:

编写如下代码更新dns:
import warnings
warnings.filterwarnings('ignore')
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.auth.credentials import AccessKeyCredential
import json
from urllib.request import urlopen
import timeclass DnsUpdater:def __init__(self):accessKeyId = "***"accessSecret = "***"credentials = AccessKeyCredential(access_key_id=accessKeyId, access_key_secret=accessSecret)self.client = AcsClient(region_id='cn-hangzhou', credential=credentials)self.domain = "***"self.myip = self.get_ip()def get_ip(self):ip = urlopen('https://api-ipv4.ip.sb/ip').read() ipv4 = str(ip, encoding='utf-8').strip()print("\n本机当前IP为:", ipv4)return ipv4def DescribeDomainRecords(self):request = CommonRequest()request.set_accept_format('json')request.set_domain('alidns.cn-hangzhou.aliyuncs.com')request.set_method('POST')request.set_protocol_type('https')request.set_version('2015-01-09')request.set_action_name('DescribeDomainRecords')request.add_query_param('DomainName', self.domain)response = self.client.do_action(request)data = json.loads(response.decode('utf-8'))order = 1for item in data["DomainRecords"]["Record"]:print("域名"+str(order)+":", item["DomainName"])print("IP"+str(order)+":", item["Value"])order += 1if item["DomainName"] == self.domain:self.RecordId = item["RecordId"]self.RR = item["RR"]self.Type = item["Type"]self.RecordIp = item["Value"]def UpdateDomainRecord(self):request = CommonRequest()request.set_accept_format('json')request.set_domain('alidns.cn-hangzhou.aliyuncs.com')request.set_method('POST')request.set_protocol_type('https')request.set_version('2015-01-09')request.set_action_name('UpdateDomainRecord')request.add_query_param('RecordId', self.RecordId)request.add_query_param('RR', self.RR)request.add_query_param('Type', self.Type)request.add_query_param('Value', self.myip)response = self.client.do_action(request)print(str(response, encoding = 'utf-8'))def QueryDSRecord(self):request = CommonRequest()request.set_accept_format('json')request.set_domain('domain.aliyuncs.com')request.set_method('POST')request.set_protocol_type('https')request.set_version('2018-01-29')request.set_action_name('QueryDSRecord')request.add_query_param('DomainName', self.domain)response = self.client.do_action(request)print(str(response, encoding = 'utf-8'))if __name__ == '__main__': # 定义一个函数来执行更新操作,并等待10秒后重试def update_domain_record():try:dnsupdater = DnsUpdater()dnsupdater.DescribeDomainRecords()if dnsupdater.myip != dnsupdater.RecordIp:print("主机IP与公网IP不一致,进入更新模式")print(dnsupdater.myip)print(dnsupdater.RecordIp)dnsupdater.UpdateDomainRecord()print("更新成功")return True # 返回True表示更新成功,不需要再次尝试except Exception as e:print(f"网络连接异常,重试中...")time.sleep(10) # 等待10秒后重试return False # 返回False表示更新失败,需要再次尝试# 循环尝试更新,最多尝试6次for attempt in range(6):if update_domain_record():break # 如果更新成功,则跳出循环else:print("尝试更新六次后仍然失败,请检查网络或服务状态。")
frp配置修改
将服务器端的start.bat修改如下
@echo off
:home
python3 updateDNS.py
frps -c frps.toml
goto home
最后将客户端的toml中文件的IP地址设置为域名
相关文章:
为家庭公网IP配置DDNS域名
文章目录 域名配置域名更新frp配置修改 在成功完成frp改造Windows笔记本实现家庭版免费内网穿透之后,某天我突然发现内网穿透失效了,一番排查之后原来是路由器对应的公网IP更换了。果然我分到的并不是固定的公网IP,而是会定期变化的。为了免受…...
QT-TCP通信
网上的资料太过于书面化,所以看起来有的让人云里雾里,看不懂C-tcpsockt和S-tcpsocket的关系 所以我稍微画了一下草图帮助大家理解两个套接字之间的关系。字迹有的飘逸勉强看看 下面是代码 服务端: MainWindow::MainWindow(QWidget *parent) …...
SparkSQL优化
SparkSQL优化 优化说明 缓存数据到内存 Spark SQL可以通过调用spark.sqlContext.cacheTable("tableName") 或者dataFrame.cache(),将表用一种柱状格式( an inmemory columnar format)缓存至内存中。然后Spark SQL在执行查询任务…...
STM32——基础篇
技术笔记! 一、初识STM32 1.1 ARM内核系列 A 系列:Application缩写。高性能应用,比如:手机、电脑、电视等。 R 系列:Real-time缩写。实时性强,汽车电子、军工、无线基带等。 M 系列:Microcont…...
【从零开始学架构 架构基础】架构设计的本质、历史背景和目的
本文是《从零开始学架构》的第一篇学习笔记,主要理解架构的设计的本质定义、历史背景以及目的。 架构设计的本质 分别从三组概念的区别来理解架构设计。 系统与子系统 什么是系统,系统泛指由一群有关联的个体组成,根据某种规则运作&#…...
Learning C# Programming with Unity 3D
作者:Alex Okita 源码地址:GitHub - badkangaroo/UnityProjects: A repo for all of the projects found in the book. 全书 686 页。...
北京车展现场体验商汤DriveAGI自动驾驶大模型展现认知驱动新境界
在2024年北京国际汽车展的舞台上,众多国产车型纷纷亮相,各自展示着独特的魅力。其中,小米SUV7以其精美的外观设计和宽敞的车内空间,吸引了无数目光,成为本届车展上当之无愧的明星。然而,车辆的魅力并不仅限…...
企业终端安全管理软件有哪些?终端安全管理软件哪个好?
终端安全的重要性大家众所周知,关系到生死存亡的东西。 各类终端安全管理软件应运而生,为企业提供全方位、多层次的终端防护。 有哪些企业终端安全管理软件? 一、主流企业终端安全管理软件 1. 域智盾 域智盾是一款专为企业打造的全面终端…...
Linux内核--设备驱动(七)媒体驱动框架整理--HDMI框架(2)
目录 一、引言 二、drm框架 ------>2.1、画布( FrameBuffer ) ------>2.2、绘图现场(CRTC) ------>2.3、输出转换器(Encoder ) ------>2.4、连接器 (Connector ) ------>2.5、显示面(Planner) 三、VOP部分详解 ------>3.1、dts ------>3.2、v…...
3.3 Gateway之自定义过滤器
1.Gateway过滤器种类 过滤器种类描述GatewayFilter路由过滤器,作用于任意指定的路由。默认不生效,要配置到路由后生效GlobalFilter全局过滤器,作用范围是所有路由。声明后自定生效 2.Gateway过滤器参数 参数描述ServerWebExchangeGateway内…...
Skywalking数据持久化与自定义链路追踪
学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Skywalking详解 一,Sky walking数据持久化 Sky walking提供了es,MySQL等数据持久化方案,默认使用h2基于内存的数据库,重启之后数据即会丢失。 在实际工…...
设计模式之模板模式TemplatePattern(五)
一、模板模式介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中…...
划重点!PMP报考条件、报考步骤、考试内容、适合人群
参加PMP认证的好处,可以从几个方面来认识: 一、参加PMP认证与考试的过程,同时是一个系统学习和巩固项目管理知识的过程 二、参加PMP认证,您可以获得由PMI颁发的PMP证书 而拥有PMP认证表示你已经成为一个项目管理方面的专业人员…...
Java | Leetcode Java题解之第74题搜索二维矩阵
题目: 题解: class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m matrix.length, n matrix[0].length;int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid / n][m…...
C#高级编程笔记-泛型
本章的主要内容如下: ● 泛型概述 ● 创建泛型类 ● 泛型类的特性 ● 泛型接口 ● 泛型结构 ● 泛型方法 目录 1.1 泛型概述 1.1.1 性能 1.1.2 类型安全 1.1.3 二进制代码的重用 1.1.4 代码的扩展 1.1.5 命名…...
(超简单)SpringBoot中简单用工厂模式来实现
简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表,比如按角色查询用户列表、按机构查询用户列表,用户信息需要从数据库中查询,因为不同的类型查询的逻辑不相同,因此简单用工厂模式来设计一下; 首先新建一个…...
java中的条件、循环和scanner类
if else ; 单行逻辑大括号可以省略;但是不建议省略; public static void main(String[] args) {boolean bool1 (Math.random() * 1000) % 2 > 1;System.out.println((Math.random() * 1000) % 2 "-" bool1);if(bool1) {System.out.prin…...
【Qt QML】Frame组件
Frame(框架)包含在: import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局,但需要自己对元素位置进行设置和定位,例如通过…...
Web API之DOM
DOM 一.认识DOM二.获取元素三.事件基础四.操作元素(1).改变元素内容(2).修改元素属性(str、herf、id、alt、title)(3).修改表单属性(4).修改样式属性操作(5).小结 五.一些思想(1).排他思想(2).自定义属性的操作 六.节点操作1.认识2.节点层级关系3.创建和添加、删除、…...
windows驱动开发-内核编程技术汇总(六)
在驱动程序中使用文件 内核模式组件通过其对象名称引用文件,该对象名称是连接到文件的完整路径的 \DosDevices 。 在 Microsoft Windows 2000 及更高版本的操作系统上, \?? 等效于 \DosDevices。例如,C:\WINDOWS\example.txt 文件的对象名…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
