为家庭公网IP配置DDNS域名

2024-05-02 17:20
文章标签 配置 ip 域名 公网 家庭 ddns

本文主要是介绍为家庭公网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 urlopenclass 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__':dnsupdater = DnsUpdater()dnsupdater.DescribeDomainRecords()if dnsupdater.myip != dnsupdater.RecordIp:print("主机IP与公网IP不一致,进入更新模式")print(dnsupdater.myip)print(dnsupdater.RecordIp)dnsupdater.UpdateDomainRecord()

frp配置修改

将服务器端的start.bat修改如下

@echo off
:home
python3 updateDNS.py
frps -c frps.toml
goto home

最后将客户端的toml中文件的IP地址设置为域名

这篇关于为家庭公网IP配置DDNS域名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954773

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2