问题描述:客户端是动态IP,每次连网之后要nsupdate下才可以把客户端的hostname 与IP映射更新到DNS Server上

  命令如下:

  

  1. nsupdate -k K*****.key
  2. >server .*.*.* #dns server ip address
  3. >update delete yourfqdn A delete
  4. >update add yourFQDN A your new IP

  这样的效率实在是有点低,于是我就自己写个脚本来更新了。直接贴上我的脚本。脚本下载地址:http://pan.baidu.com/s/1lhlAu

  1. #!/bin/bash
    #########################################
    ##
    ##    Author:Medici.Yan@gmail.com
    #########################################
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  3. export PATH
  4. usage(){
  5. echo " Usage:$0 [-i interface] [-d basedir] [-h hostname] [-t ttl] [-s servername] [-k keyfile] [-c ClientIP] [-m testdomain]"
  6. echo " Default:"
  7. echo " -i eth0 -d /usr/local/ddns -t 600 -k /usr/local/ddns/*.key"
  8. echo ""
  9. echo " Notice: 如果你自己的主机是DNS Server,那么你不能改变你自己的 hostname 与 IP"
  10. echo " 如果你不知道你的DNS Server是什么,就加上-m 参数,后面是测试的域名,eg:$0 -m swu.edu.cn "
  11. echo " Notice: If your PC is your DNS Server, you can't change your hostname and IP"
  12. echo " If you don't know your DNS Server Address, you can use the param [-m TestDomain] to get the right server address,eg:$0 -m swu.edu.cn "
  13. exit
  14. }
  15.  
  16. ((params=$#%))
  17. if [[ $# -gt ]]; then
  18. usage
  19. #elif [ $params -eq 1 ]; then
  20. # usage
  21. fi
  22.  
  23. #设置默认参数值
  24. domain="swu.edu.cn" #默认测试DNS Server 地址的域名
  25. basedir="/usr/local/ddns" # 基本工作目录
  26. keyfile="$basedir"/"`ls $basedir|grep '.key$'`" #公钥文件
  27. ttl= # ttl
  28. interface="eth0" # 对外的联机接口!
  29. hostname=`hostname`
  30. servername=`grep 'nameserver' /etc/resolv.conf | head -n |awk '{print $2}'` #dns Server IP
  31. newip=`ifconfig "$interface" | grep 'inet addr' | awk '{print $2}' | sed -e "s/addr\://"` #IP地址
  32.  
  33. #处理NetworkManager管理DNS Server,基本上用不到,一般在启动NetworkManager后会自动修改resolv.conf
  34. if [ "$servername" == "" ]; then
  35. servername=`nslookup $domain|grep Server|awk '{print $2}'`
  36. fi
  37. #获取用户输入参数,如不指定则使用默认参数
  38. while [ $# -gt ]
  39. do
  40. case $ in
  41. -i)shift;interface=$;shift;;
  42. -d)shift;basedir=$;shift;;
  43. -h)shift;hostname=$;shift;;
  44. -t)shift;ttl=$;shift;;
  45. -s)shift;servername=$;shift;;
  46. -k)shift;keyfile=$;shift;;
  47. -c)shift;newip=$;shift;;
  48. -m)shift;domain=$;shift;;
  49. *)usage;;
  50. esac
  51.  
  52. done
  53. #自动查找DNS和手动都找不到DNS则退出
  54. if [ "$servername" == "" ]; then
  55. echo "Error:Can not find the DNS Server!"
  56. exit
  57. fi
  58.  
  59. #检查IP合法性
  60. checkip=`echo $newip | grep "^[0-9]"`
  61.  
  62. if [ "$checkip" == "" ]; then
  63. echo "$0: The interface can't connect internet...."
  64. exit
  65.  
  66. fi
  67. #检测basedir目录是否存在,不存在则创建
  68. if !([ -d $basedir ]);then
  69. mkdir -p $basedir
  70. fi
  71. #检测keyfile存在性
  72. if !([ -f $keyfile ]);then
  73. echo "Error:$keyfile does not exist!"
  74. exit
  75. fi
  76.  
  77. tmpfile=$basedir/tmp.txt
  78. #如果文件不存在,则创建
  79. if !([ -f $tmpfile ]);then
  80. touch $tmpfile
  81. #查看是否创建成功
  82. if !([ -f $tmpfile ]);then
  83. echo "Permission Denyed,Can not touch $tmpfile in $basedir"
  84. exit
  85. fi
  86. fi
  87. #写入配置文件
  88. echo "server $servername" > $tmpfile
  89. echo "update delete $hostname A " >> $tmpfile
  90. echo "update add $hostname $ttl A $newip" >> $tmpfile
  91. echo "send" >> $tmpfile
  92. #更新
  93. nsupdate -k $keyfile -v $tmpfile

  

  测试如下:

  

  

  

  这样的效率确实就提高了不少。

Linux架设DDNS服务器之自动更新脚本的更多相关文章

  1. linux下维护服务器之常用命令

    linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [root@localhost ~]# grep -v '^$' 文件名 |grep -v '^ ...

  2. Linux系统如何设置开机自动运行脚本?

    大家好,我是良许. 在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务.在 Windows 下,我们有很多方法可以设置开机启动,但在 Linux 系统下我们需要如何操作呢? Li ...

  3. linux 设置svn钩子实现自动更新

    一.svn安装设置 1.安装svn启动 yum install subversion 2.建个svn的根目录,因为项目不止一个 mkdir -p /home/svn/3.新建一个新的空的版本仓库(su ...

  4. Git github webhook 自动更新/部署代码 php自动更新脚本

    这几天尝试了利用github的webhook,当代码更新到github,我们的测试服务器自动更新最新的gitbub仓库代码. 先列几个大概步骤,有时间再补充详细 1 . 服务器生成ssh key,一般 ...

  5. linux 添加 service 服务并自动添加 chkconfig 启动级别

    下面以添加一个叫做watchcat的服务为例进行说明: 1.写一个提供给service命令使用的脚本 service 命令的使用方法一般如下 启动: $ service watchcat start ...

  6. linux和windows下的自动ftp脚本(shell bat)

    一.先来看linux下的: 复制代码 代码如下: #! /bin/bashcd /ftp/CURRENTDATE=` date +%Y%m%d `YESTERDAY=` date -d yesterd ...

  7. 【Linux】虚拟服务器之LVS

    写在前面 觉得甚是幸运,能够有机会参与到ITOO配置环境的工作中去.现在正在熟悉,在搭建环境的时候,有LVS安装配置教程,对这一块有些懵逼,这几天查了一些资料,写在这里,和大家分享一下 是什么 LVS ...

  8. Linux Oracle服务启动&停止脚本与开机自启动

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...

  9. 代替DDNS方案,自动更新CloudFlare的AAAA记录

    为解决DDNS更新慢的问题,直接通过cloudflare的API来更新AAAA记录 将下面代码保存成cloudflare_ipv6_update.ps1 $config = @{} $config.z ...

随机推荐

  1. 20155339 《信息安全技术》实验二、Windows口令破解实验报告

    20155339 <信息安全技术>实验二.Windows口令破解实验报告 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 系统环境 Windo ...

  2. 微信小程序点击按钮,修改状态

    WXML中: <view wx:if="{{orderstate}} = '待送检' " data-no="{{orderstate}}" bindtap ...

  3. wmware 10 升级到11后,macos不能运行的问题

    解决方案: 1.由于wmware升级,原来的unlocker已不能使用. 所以得升级unlocker版本,目前支持wmware11的最新版本是2.0.4 http://www.insanelymac. ...

  4. [BZOJ4383][POI2015] Pustynia-[线段树+dp+拓扑排序]

    Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r,k以及接下来k个正整数,表示a[l],a[l+1],. ...

  5. 【LOJ121】「离线可过」动态图连通性

    [LOJ121]「离线可过」动态图连通性 题面 LOJ 题解 线段树分治的经典应用 可以发现每个边出现的时间是一个区间 而我们每个询问是一个点 所以我们将所有边的区间打到一颗线段树上面去 询问每个叶子 ...

  6. Flutter系列博文链接

    Flutter系列博文链接 ↓: Flutter基础篇: Flutter基础篇(1)-- 跨平台开发框架和工具集锦 Flutter基础篇(2)-- 老司机用一篇博客带你快速熟悉Dart语法 Flutt ...

  7. 【xshell属性设置】如何修改xshell字体大小

    1.周末在家,想搞一下学习,于是远程公司的电脑(我的移动硬盘在公司,里面有虚拟机及测试环境) 发现xshell界面字体太小,不方便看,于是研究了一下如何来设置xshell 的字体大小 2.点击左上角的 ...

  8. VS2008 "无法找到资源编译器dll 请确保路径正确"

    系统环境:windows 8.1 企业版 x64 (装有 .NET 2.0 / 3.5 / 4.0 /  4.5) 安装前确认系统已安装 .NET 2.0 / 3.5 .在安装时,最好是默认安装,并且 ...

  9. 如何下载YouTube 60fps视频

    YouTube上面不仅支持分辨率为4K和8K的视频,同时也开启了对60fps视频的支持.60帧的视频广泛用于游戏和体育视频中,使视频看起来更加流畅和细腻.对游戏玩家来说,YouTube对60fps支持 ...

  10. Phaser3 屏幕适配iPhoneX、iPhoneXs的坑 -- JavaScript Html5 游戏开发

      PhaserJS 坑:在config内不要把 width 设为 window.innnerWidth在config内不要把 width 设为 window.innnerWidth在config内不 ...