当前位置: 首页 > news >正文

为家庭公网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题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; 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#高级编程笔记-泛型

本章的主要内容如下&#xff1a; ● 泛型概述 ● 创建泛型类 ● 泛型类的特性 ● 泛型接口 ● 泛型结构 ● 泛型方法 目录 1.1 泛型概述 1.1.1 性能 1.1.2 类型安全 1.1.3 二进制代码的重用 1.1.4 代码的扩展 1.1.5 命名…...

(超简单)SpringBoot中简单用工厂模式来实现

简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表&#xff0c;比如按角色查询用户列表、按机构查询用户列表&#xff0c;用户信息需要从数据库中查询&#xff0c;因为不同的类型查询的逻辑不相同&#xff0c;因此简单用工厂模式来设计一下&#xff1b; 首先新建一个…...

java中的条件、循环和scanner类

if else ; 单行逻辑大括号可以省略&#xff1b;但是不建议省略&#xff1b; 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&#xff08;框架&#xff09;包含在&#xff1a; import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局&#xff0c;但需要自己对元素位置进行设置和定位&#xff0c;例如通过…...

Web API之DOM

DOM 一.认识DOM二.获取元素三.事件基础四.操作元素(1).改变元素内容(2).修改元素属性(str、herf、id、alt、title&#xff09;(3).修改表单属性(4).修改样式属性操作(5).小结 五.一些思想(1).排他思想(2).自定义属性的操作 六.节点操作1.认识2.节点层级关系3.创建和添加、删除、…...

windows驱动开发-内核编程技术汇总(六)

在驱动程序中使用文件 内核模式组件通过其对象名称引用文件&#xff0c;该对象名称是连接到文件的完整路径的 \DosDevices 。 在 Microsoft Windows 2000 及更高版本的操作系统上&#xff0c; \?? 等效于 \DosDevices。例如&#xff0c;C:\WINDOWS\example.txt 文件的对象名…...

Fast-GitHub浏览器插件:国内开发者必备的GitHub下载加速终极解决方案

Fast-GitHub浏览器插件&#xff1a;国内开发者必备的GitHub下载加速终极解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还…...

一文掌握【行为克隆 (Behavior Cloning)】的实战应用与局限

1. 行为克隆是什么&#xff1f;从模仿人类到AI决策 想象一下教小朋友骑自行车的情景。你不会先讲解力学原理&#xff0c;而是亲自示范如何保持平衡、如何踩踏板。孩子通过观察和模仿你的动作&#xff0c;逐渐掌握骑行技巧——这就是行为克隆&#xff08;Behavior Cloning&#…...

毕业设计:基于springboot的林业产品推荐系统(源码)

4 系统设计当前&#xff0c;系统的类型有很多&#xff0c;从系统呈现的内容来看&#xff0c;系统的类型有社交类&#xff0c;有商业类&#xff0c;有政府类&#xff0c;有新闻类等。那么&#xff0c;在众多系统类型中&#xff0c;先明确将要设计的系统的类型才是系统设计的首要…...

HT4182:5V 输入 1.6A 同步升压双节锂电充电器,高集成全保护可 P2P 替代

在便携式音箱、POS 机、电子烟、对讲机等采用双节串联锂电池供电的设备中&#xff0c;5V USB 输入升压充电是最主流的方案&#xff0c;市场对充电效率、集成度和可靠性的要求越来越高。HT4182 作为一款专为 5V 输入优化的同步升压型双节锂电池充电器&#xff0c;凭借高转换效率…...

小米路由器4A千兆版刷机翻车实录:从Breed救砖到完美刷入Padavan固件全记录

小米路由器4A千兆版救砖实战&#xff1a;从硬件识别到Padavan固件完美适配 深夜的台灯下&#xff0c;我盯着桌面上那台已经变砖的小米路由器4A千兆版&#xff0c;USB转TTL模块的指示灯微弱地闪烁着。这已经是本周第三次尝试救砖了——前两次要么是夹子接触不良导致校验失败&…...

Formation:macOS前端开发环境一键配置终极指南

Formation&#xff1a;macOS前端开发环境一键配置终极指南 【免费下载链接】formation &#x1f4bb; macOS setup script for front-end development 项目地址: https://gitcode.com/gh_mirrors/fo/formation Formation是一款专为macOS设计的前端开发环境配置脚本&…...

告别手动提交!用Bash脚本批量处理VASP+ShengBTE热输运计算的700+任务

计算材料学自动化革命&#xff1a;Bash脚本驱动的高通量热输运计算实践 在计算材料学领域&#xff0c;研究者常常需要处理数百甚至上千个相似的计算任务。以硅材料热输运性质计算为例&#xff0c;当使用VASP结合ShengBTE进行三阶力常数计算时&#xff0c;可能产生700多个独立的…...

别再只会if-else了!用状态机思路重构你的STM32寻迹小车代码(附工程源码)

从if-else到状态机&#xff1a;重构STM32寻迹小车的工程化实践 当三个红外传感器同时检测到黑色轨迹时&#xff0c;你的小车应该左转还是右转&#xff1f;当传感器短暂丢失信号时&#xff0c;是紧急刹车还是保持原有动作&#xff1f;这些问题在初学者用if-else堆砌的代码中往往…...

破解人类微生物组数据分析难题:curatedMetagenomicData的完整解决方案

破解人类微生物组数据分析难题&#xff1a;curatedMetagenomicData的完整解决方案 【免费下载链接】curatedMetagenomicData Curated Metagenomic Data of the Human Microbiome 项目地址: https://gitcode.com/gh_mirrors/cu/curatedMetagenomicData 宏基因组数据分析在…...

明日方舟自动化助手MAA:3步解放双手,让游戏回归乐趣

明日方舟自动化助手MAA&#xff1a;3步解放双手&#xff0c;让游戏回归乐趣 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: ht…...