为家庭公网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

相关文章

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

在Spring中配置Quartz的三种方式

《在Spring中配置Quartz的三种方式》SpringQuartz是一个任务调度框架,它允许我们定期执行特定的任务,在Spring中,我们可以通过多种方式来配置Quartz,包括使用​​@Sche... 目录介绍使用 ​​@Scheduled​​ 注解XML 配置Java 配置1. 创建Quartz配置

Kibana的安装和配置全过程

《Kibana的安装和配置全过程》Kibana是一个开源的数据分析和可视化平台,它与Elasticsearch紧密集成,提供了一个直观的Web界面,使您可以快速地搜索、分析和可视化数据,在本文中,我们... 目录Kibana的安装和配置1.安装Java运行环境2.下载Kibana3.解压缩Kibana4.配

tomcat在nginx中的配置方式

《tomcat在nginx中的配置方式》文章介绍了如何在Linux系统上安装和配置Tomcat,并通过Nginx进行代理,首先,下载并解压Tomcat压缩包,然后启动Tomcat并查看日志,接着,配置... 目录一、下载安装tomcat二、启动tomcat三、配置nginx总结提示:文章写完后,目录可以自动