背景

公司电信宽带(PPoE)分配了一个公网IP,但它每过一段时间就变了,如果我要用它远程桌面,意味着每过一段时间就要改一次IP,记一个新的IP,非常复杂,该如何用一个固定的地址来替代这些变化的IP并且实现定时自动替换呢?虽然可以通过购买EIP来固定这个地址,但是成本稍微高了。替代的办法就是动态解析,用一个别名代替变换的IP。而别名就是域名,用一个固定的域名,解析到这些IP,即可实现DDNS。

原理

基本流程就是获取公网IP,然后修改某个域名的解析为获得的IP
流程图如下

实施

网络:
将服务器网络出口NAT到动态IP线路上(其他设置可自行科普,以下仅供参考)
此处已Cisco路由器为例:

ip nat inside source static tcp 192.168.0.217 80 interface Dialer1 11180
#Dialer1为PPOE拨号线路
access-list 100 permit ip host 192.168.0.217 any
#ACL 100为PPOE拨号线路

密钥:
在确定服务器经由PPoE线路上网后,需要在DNSPod上申请API密钥,从而获取SecretId以及SecretKey

环境:
Ubuntu 20.04 + Python 3.8.10

安装依赖包:

pip install tencentcloud-sdk-python
pip install tencentcloud-sdk-python-dnspod

**详细脚本如下: **
Ref: 腾讯云 API Explorer

import json
import requests
import logging
from datetime import datetime
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.dnspod.v20210323 import dnspod_client, models############################################
#此处需要按照实际情况修改
Domain = "*****.com"        #修改域
SubDomain = "p1234"          #修改域名
SecretId = "SecretId"
SecretKey = "SecretKey"
############################################filename = "./" + datetime.now().strftime("%Y%m%d") + "-" + SubDomain + "-DDNS-Log.log"
logging.basicConfig(filename=filename, level=logging.INFO,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')logging.info("脚本开始运行...")
#获取当前公网IP地址,通过AWS提供的服务。
def get_external_ip():try:ip = requests.get('https://checkip.amazonaws.com/').text.strip()return iplogging.info("成功获取当前公网地址...")except:return Nonelogging.info("获取当前公网地址失败...")CurrentGlobalIP = get_external_ip()try:cred = credential.Credential(SecretId, SecretKey)  #修改成你获得的SecretId以及SecretKeyhttpProfile = HttpProfile()httpProfile.endpoint = "dnspod.tencentcloudapi.com"clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = dnspod_client.DnspodClient(cred, "", clientProfile)req = models.DescribeRecordListRequest()params = {"Domain": Domain,"Subdomain": SubDomain}req.from_json_string(json.dumps(params))resp = client.DescribeRecordList(req)RecordID = resp.RecordList[0].RecordIdRecordValue = resp.RecordList[0].ValueRecordLine = resp.RecordList[0].LineRecordType = resp.RecordList[0].Typelogging.info("成功获取域名信息...")logging.info("域名信息:  " + SubDomain+"."+Domain+"   "+RecordValue)except TencentCloudSDKException as err:logging.info("获取域名信息失败..." + err)if CurrentGlobalIP == RecordValue:logging.info("域名信息未发生变动...")
else:logging.info("域名信息发生变动...")try:req = models.ModifyRecordRequest()params = {"Domain": Domain,"RecordId": RecordID,"RecordLine": RecordLine,"RecordType": RecordType,"SubDomain": SubDomain,"Value": CurrentGlobalIP}req.from_json_string(json.dumps(params))resp = client.ModifyRecord(req)logging.info("新域名信息:  " + SubDomain + "." + Domain + "   " + CurrentGlobalIP)except TencentCloudSDKException as err:logging.info("修改域名信息失败..." + err)logging.info("脚本结束运行...")

将脚本设置成定时运行

此处是将脚本设置为每小时的10分运行一次,也可按照自己需求进行修改。

日志输出:

到此,就完成了动态公网解析,更多可能,需要我们一起继续探索…

【DNS解析】使用DNSPOD实现动态公网解析(DDNS)相关推荐

  1. 群晖docker实现阿里云动态公网域名解析ddns服务

    日常生活中,一般家庭用户宽带使用的都是内网ip,如果需要在外网就是远程使用,需要将家庭ip向电信部门申请变更为公网ip,通常情况下,我们获得的都是动态公网ip,这种ip每隔一段时间都会自动变化,这样如 ...

  2. 家庭宽带 动态公网IP,使用腾讯云DDNS实现实时更新DNS解析记录

    解决DDNS问题 动态公网IP 环境说明: 我是家庭宽带 只能申请到动态的公网ip,好处是不花钱,弊端是每次重启光猫,都会重新获取一个新的公网IP 为解决此办法,我尝试了很多个DDNS的方案. 包括但 ...

  3. 【计网】DNS解析 DDNS解决动态公网IP访问

    DNS服务与DDNS 前言 一.DNS服务 二.DNS域名解析 1.解析过程 2.DNS污染 三.DDNS解决动态公网IP访问 总结 前言 本篇主要记录一下DNS域名解析在我们平时上网时的使用,与DN ...

  4. 动态ip解析 linux,ddwrt路由/linux动态解析ip(ddns)到dnspod配置

    dnspod域名解析服务有提供出来api,可以通过curl命令与dnspod交互.需要在dnspod先绑定一个域名,并设置一个二级域名(A记录),如我的test.xdty.org指向到了127.0.0 ...

  5. 修改新网域名DNS服务器到DNSPOD解析服务

    修改新网  后台  DNS   地址 1.先看域名状态是否允许修改dns 2.修改dns地址为dnspod的dns地址 具体操作 应改不改版而定

  6. CenOS7 运维 - DNS域名解析服务 | 正向解析 | 反向解析 | 主从服务器实时同步 | 分离解析 | 排错思路及方案 | 超详细

    CenOS7 运维 - DNS域名解析服务 一.DNS系统的作用 二.域名的结构 根域 顶级域 二级域 子域 主机 三.DNS服务器类型 ►主域名服务器 ►从域名服务器 ►缓存域名服务器 ►转发域名服 ...

  7. 国际域名及其他可解析域名免费捆绑动态IP地址

    国际域名及其他可解析域名免费捆绑动态IP地址   [ 日期:2004-09-25 ]   "让网络更免费更自由! 让所有国内的动态域名服务商破产!"本站推荐可解析三级域名:.COM ...

  8. 外网系统怎么访问协同oa?快解析内网端口映射公网

    办公软件oa系统功能涵盖移动办公.流程审批.信息门户.知识文档.电子签章.移动考勤.即时通讯.计划任务.费用报销.人事管理等,让办公更智能. 办公OA网站是企业公司信息管理的一个重要使用场景,除了在公 ...

  9. 域名解析教程:Cloudflare解析与DNSPod解析

    在购买域名后,需要将你的域名解析到你的IP后才能正常使用你的域名代替IP.本文是一个详细的域名解析教程,以NameSilo为例,分别介绍NameSilo自带的域名解析,以及国外的Cloudflare域 ...

最新文章

  1. Linux Kernel中local_irq_enable()和local_irq_disable()的实现
  2. Altium Designer-Net has no driving source解决办法
  3. jQuery的链式操作
  4. 数字后端——可制造性设计
  5. [导入][导入][c#]Web开发中Tag的开发技巧
  6. 同步与异步以及线程与进程
  7. 干货|我在 GitHub 上发现了一款骚气满满的字体!
  8. phython拟合曲面方程_python数据关系型图表散点图系列曲面拟合图
  9. VxRack与VxRail遭受Power的“全面入侵”
  10. 【万里征程——Windows App开发】使用华丽丽的字体
  11. 咸鱼笔记-编程语言优缺点
  12. SQL Server 2008 R2 安装图文详解
  13. 百度文库免费下载(附:分享一些有趣的网站,最后一个可以免飞下载百度文库)
  14. UVa10653.Prince and Princess
  15. word-break 换行
  16. 博世传感器调试笔记(三)加速度及地磁传感器BMC156
  17. RTCP Receiver Report(RR)相关
  18. 计算机 博士 论文要求,计算机学院博士生发表论文要求.doc
  19. java写json数组字符串,Java将前端的json数组字符串转换为列表
  20. JAVA unusual问题收集

热门文章

  1. 【自动驾驶轨迹规划之dubins曲线与reeds-shepp曲线】
  2. 广州云翼信息:设计师在进行设计实践时的依据是什么?
  3. 运维工程师(Operations)
  4. 20190613:多因子选股模型-思维导图
  5. NYOJ - 478
  6. All About Testing
  7. Linux与Windows多年之争后——谁也替代不了谁的角色
  8. 数据结构实验1:线性表:贪吃蛇
  9. Shell命令 getopts/getopt用法详解 命令行参数
  10. 用Python爬取5K分辨率超清唯美壁纸