Linux架设DDNS服务器之自动更新脚本

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

命令如下:

nsupdate -k K*****.key
>server 192.*.*.*        #dns server ip address
>update delete yourfqdn A delete
>update add yourFQDN 600 A your new IP

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

#!/bin/bash
#########################################
##
##    Author:[email protected]
#########################################
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH
usage(){
  echo "  Usage:$0 [-i interface] [-d basedir] [-h hostname] [-t ttl] [-s servername] [-k keyfile] [-c ClientIP] [-m testdomain]"
  echo "	  Default:"
  echo "		   -i eth0 -d /usr/local/ddns -t 600 -k /usr/local/ddns/*.key"
  echo ""
  echo "  Notice:  如果你自己的主机是DNS Server,那么你不能改变你自己的 hostname 与 IP"
  echo "	  如果你不知道你的DNS Server是什么,就加上-m 参数,后面是测试的域名,eg:$0 -m swu.edu.cn "
  echo "  Notice:  If your PC is your DNS Server, you can‘t change your hostname and IP"
  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 "
    exit 1
}

((params=$#%2))
if [[ $# -gt 14 ]]; then
  usage
#elif [ $params -eq 1 ]; then
#       usage
fi

#设置默认参数值
domain="swu.edu.cn"			     #默认测试DNS Server 地址的域名
basedir="/usr/local/ddns"		       # 基本工作目录
keyfile="$basedir"/"`ls $basedir|grep ‘.key$‘`" #公钥文件
ttl=600					 # ttl
interface="eth0"				# 对外的联机接口!
hostname=`hostname`
servername=`grep ‘nameserver‘ /etc/resolv.conf | head -n 1 |awk ‘{print $2}‘`   #dns Server IP
newip=`ifconfig "$interface" | grep ‘inet addr‘ | awk ‘{print $2}‘ | sed -e "s/addr\://"`       #IP地址

#处理NetworkManager管理DNS Server,基本上用不到,一般在启动NetworkManager后会自动修改resolv.conf
if [ "$servername" == "" ]; then
  servername=`nslookup $domain|grep Server|awk ‘{print $2}‘`
fi
#获取用户输入参数,如不指定则使用默认参数
while [ $# -gt 0 ]
do
  case $1 in
    -i)shift;interface=$1;shift;;
    -d)shift;basedir=$1;shift;;
    -h)shift;hostname=$1;shift;;
    -t)shift;ttl=$1;shift;;
    -s)shift;servername=$1;shift;;
    -k)shift;keyfile=$1;shift;;
    -c)shift;newip=$1;shift;;
    -m)shift;domain=$1;shift;;
    *)usage;;
  esac

done
#自动查找DNS和手动都找不到DNS则退出
if [ "$servername" == "" ]; then
  echo "Error:Can not find the DNS Server!"
  exit 1
fi

#检查IP合法性
checkip=`echo $newip | grep "^[0-9]"`

if [ "$checkip" == "" ]; then
  echo "$0: The interface can‘t connect internet...."
  exit 1

fi
#检测basedir目录是否存在,不存在则创建
if !([ -d $basedir ]);then
  mkdir -p $basedir
fi
#检测keyfile存在性
if !([ -f $keyfile ]);then
  echo "Error:$keyfile does not exist!"
  exit 1
fi

tmpfile=$basedir/tmp.txt
#如果文件不存在,则创建
if !([ -f $tmpfile ]);then
  touch $tmpfile
  #查看是否创建成功
  if !([ -f $tmpfile ]);then
    echo "Permission Denyed,Can not touch $tmpfile in $basedir"
    exit 1
  fi
fi
#写入配置文件
echo "server $servername" > $tmpfile
echo "update delete $hostname A " >> $tmpfile
echo "update add $hostname $ttl A $newip" >> $tmpfile
echo "send" >> $tmpfile
#更新
nsupdate -k $keyfile -v $tmpfile

测试如下:

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

时间: 2024-12-26 07:19:40

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

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

linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [[email protected] ~]# grep -v '^$' 文件名 |grep -v '^#' 2.如何查阅系统上面正在运作当中的程序呢? 利用静态的 ps 或者是动态的top,还能以 pstree 来查阅程序树之间的关系! 一个是叧能查阅自己 bash 程序癿『 ps -l 』一个则是可以查阅 所有系统运作癿程序『 ps aux 』 [[email protected] ~]#

linux下DNS服务器之视图和轮询

案例4 视图  viwer 拓扑图: 1.查看帮助 [[email protected] ~]# vim /usr/share/doc/bind-9.8.2/sample/etc/named.conf [[email protected] ~]# cd /var/named/chroot/etc 2.[[email protected] etc]# vim named.conf 添加视图: 36 view    "lan-view" 37 { 38 zone "."

linux下PXE无人值守环境自动安装脚本

当时单位要安装一套linux的PXE无人值守装机程序,装完后花了九牛二虎之力写了一个自动安装脚本,以便今后安全方便,不过后来就没怎么用了,甚至都有些淡忘了,哈哈,分享出来,有研究PXE自动安装的可以看看,在使用的时候里面的ip地址要换掉的. #!/bin/sh #writer:gaolixu yum -y install dhcp tftp-server vsftpd syslinux xinetd if ! service dhcpd status ;then ############### 

linux系统初始化--​配置ntp自动更新时间

配置ntp自动更新时间 安装ntpdate程序 Shell># yum –y install ntpdate 使用crontab将系统设定为每天0:00与NTP服务器同步时间 Shell># crontab –e 0   0  *  *  *  ntpdate   your_ntp_server_domain_name   or  your_ntp_server_ip_addr 保存退出, 为了我们步骤继续下去,我们执行一次同步 Shell># ntpdate ntp.jn.idc 如果

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

一.先来看linux下的: 复制代码 代码如下: #! /bin/bashcd /ftp/CURRENTDATE=` date +%Y%m%d `YESTERDAY=` date -d yesterday +%Y%m%d `THREEDAYAGO=` date -d '3 days ago' +%Y%m%d `#echo $TWODAYAGOftp -n -i 34.97.34.3 << !user ftpuser ftpuserbinmput $YESTERDAY.*delete $THRE

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

下面以添加一个叫做watchcat的服务为例进行说明: 1.写一个提供给service命令使用的脚本 service 命令的使用方法一般如下 启动: $ service watchcat start 停止: $ service watchcat stop 重启: $ service watchcat restart 所以这个watchcat脚本就需要至少接受这三个命令 大概如下:$ cat watchcat #!/bin/bash function start_cat() { echo "cat

[ Tomcat ] 自动更新脚本

之前总是要更新基于 Tomcat 的web项目,而且更新频繁. 手工更新太烦人了,遂写了一个半自动的脚本.已经快一年没接触 Tomcat ,脚本仅供参考 . #!/bin/bash # Author: Jeffery.Su # Mail: [email protected] # Site: http://suzf.net # Date: Sep 10,2014 # Version: 1.0.2 # Definite variable PRO_NAME=javacenter WORK_PATH=/

内网自动更新脚本

#!/usr/bin/expect set host "10.1.1.119" set pass "123.com" spawn /usr/bin/scp -r [email protected]$host:/home/update/ /var/cache/yum/ expect "password:" send "$pass\r" spawn /usr/bin/yum -y update interact #自己在机房装机的

Python自动更新脚本

本脚本主要针对python2.6升级至python2.10,并且解决了升级后不能使用yum的问题.添加了ipython功能 ##########################!/bin/bashpath="/home/tools"if [ ! -d $path ];thenmkdir $pathelserm -rf $path && mkdir $pathfi cd $path yum -y install automake gcc gcc-c++ readline-