Linux架设DDNS服务器之自动更新脚本
问题描述:客户端是动态IP,每次连网之后要nsupdate下才可以把客户端的hostname 与IP映射更新到DNS Server上
命令如下:
nsupdate -k K*****.key
>server .*.*.* #dns server ip address
>update delete yourfqdn A delete
>update add yourFQDN A your new IP
这样的效率实在是有点低,于是我就自己写个脚本来更新了。直接贴上我的脚本。脚本下载地址:http://pan.baidu.com/s/1lhlAu
#!/bin/bash
#########################################
##
## Author:Medici.Yan@gmail.com
#########################################
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
} ((params=$#%))
if [[ $# -gt ]]; 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= # ttl
interface="eth0" # 对外的联机接口!
hostname=`hostname`
servername=`grep 'nameserver' /etc/resolv.conf | head -n |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 ]
do
case $ in
-i)shift;interface=$;shift;;
-d)shift;basedir=$;shift;;
-h)shift;hostname=$;shift;;
-t)shift;ttl=$;shift;;
-s)shift;servername=$;shift;;
-k)shift;keyfile=$;shift;;
-c)shift;newip=$;shift;;
-m)shift;domain=$;shift;;
*)usage;;
esac done
#自动查找DNS和手动都找不到DNS则退出
if [ "$servername" == "" ]; then
echo "Error:Can not find the DNS Server!"
exit
fi #检查IP合法性
checkip=`echo $newip | grep "^[0-9]"` if [ "$checkip" == "" ]; then
echo "$0: The interface can't connect internet...."
exit fi
#检测basedir目录是否存在,不存在则创建
if !([ -d $basedir ]);then
mkdir -p $basedir
fi
#检测keyfile存在性
if !([ -f $keyfile ]);then
echo "Error:$keyfile does not exist!"
exit
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
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
测试如下:


这样的效率确实就提高了不少。
Linux架设DDNS服务器之自动更新脚本的更多相关文章
- linux下维护服务器之常用命令
linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [root@localhost ~]# grep -v '^$' 文件名 |grep -v '^ ...
- Linux系统如何设置开机自动运行脚本?
大家好,我是良许. 在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务.在 Windows 下,我们有很多方法可以设置开机启动,但在 Linux 系统下我们需要如何操作呢? Li ...
- linux 设置svn钩子实现自动更新
一.svn安装设置 1.安装svn启动 yum install subversion 2.建个svn的根目录,因为项目不止一个 mkdir -p /home/svn/3.新建一个新的空的版本仓库(su ...
- Git github webhook 自动更新/部署代码 php自动更新脚本
这几天尝试了利用github的webhook,当代码更新到github,我们的测试服务器自动更新最新的gitbub仓库代码. 先列几个大概步骤,有时间再补充详细 1 . 服务器生成ssh key,一般 ...
- linux 添加 service 服务并自动添加 chkconfig 启动级别
下面以添加一个叫做watchcat的服务为例进行说明: 1.写一个提供给service命令使用的脚本 service 命令的使用方法一般如下 启动: $ service watchcat start ...
- linux和windows下的自动ftp脚本(shell bat)
一.先来看linux下的: 复制代码 代码如下: #! /bin/bashcd /ftp/CURRENTDATE=` date +%Y%m%d `YESTERDAY=` date -d yesterd ...
- 【Linux】虚拟服务器之LVS
写在前面 觉得甚是幸运,能够有机会参与到ITOO配置环境的工作中去.现在正在熟悉,在搭建环境的时候,有LVS安装配置教程,对这一块有些懵逼,这几天查了一些资料,写在这里,和大家分享一下 是什么 LVS ...
- Linux Oracle服务启动&停止脚本与开机自启动
在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...
- 代替DDNS方案,自动更新CloudFlare的AAAA记录
为解决DDNS更新慢的问题,直接通过cloudflare的API来更新AAAA记录 将下面代码保存成cloudflare_ipv6_update.ps1 $config = @{} $config.z ...
随机推荐
- C语言中赋值表达式的返回值是什么?
我们或多或少都有过,或者见过将赋值表达式参与运算的情况.这通常会伴随着一些意想不到的问题.今天我就见到了一段奇怪的代码: #include<stdio.h> int main() { ; ...
- Gblocks命令行
使用默认的设置: $ Gblocks proteins.fasta -t=p 必须是 fasta 文件在前,参数在后.若没有参数,则进入交互式界面. Gblocks cds.fasta −t=c −b ...
- 20155231 cho2 课下作业
20155231 cho2 课下作业 2 调用附图代码,编写一个程序 "week0602学号.c",用show_int(), show_float()打印一下你的4位学号,参考教材 ...
- 20155307 2017-2018-3 《Java程序设计》第3周学习总结
20155307 2017-2018-3 <Java程序设计>第3周学习总结 教材学习内容总结 类相当于是设计图,对象是根据类设计出来的.用class定义,名字叫clothes.可以用ne ...
- 20155317 2016-2017-2 《Java程序设计》第十学习总结
20155317 2016-2017-2 <Java程序设计>第十学习总结 教材学习内容总结 1.网络编程的概念: 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作 ...
- 20155331 2016-2017-2 《Java程序设计》第10周学习总结
20155331 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...
- 2016-2017-2 20155339《 java面向对象程序设计》实验四Android程序设计
2016-2017-2 20155339< java面向对象程序设计>实验四Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Andr ...
- OpenCV中Mat操作clone() 与copyto()的区别
OpenCV中Mat操作clone() 与copyto()的区别 // Mat is basically a class with two data parts: the matrix header ...
- python的rtree包缺失libspatiaindex.so
1 准备autoconf工具 yum -y install autoconf automake libtool 2 准备g++编译器 yum -y install gcc gcc-c++ 3 下载并安 ...
- 用python SMTP进行邮件发送
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart & ...