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 ...
随机推荐
- 20155339 《信息安全技术》实验二、Windows口令破解实验报告
20155339 <信息安全技术>实验二.Windows口令破解实验报告 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 系统环境 Windo ...
- 微信小程序点击按钮,修改状态
WXML中: <view wx:if="{{orderstate}} = '待送检' " data-no="{{orderstate}}" bindtap ...
- wmware 10 升级到11后,macos不能运行的问题
解决方案: 1.由于wmware升级,原来的unlocker已不能使用. 所以得升级unlocker版本,目前支持wmware11的最新版本是2.0.4 http://www.insanelymac. ...
- [BZOJ4383][POI2015] Pustynia-[线段树+dp+拓扑排序]
Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息,每条信息包含三个数l,r,k以及接下来k个正整数,表示a[l],a[l+1],. ...
- 【LOJ121】「离线可过」动态图连通性
[LOJ121]「离线可过」动态图连通性 题面 LOJ 题解 线段树分治的经典应用 可以发现每个边出现的时间是一个区间 而我们每个询问是一个点 所以我们将所有边的区间打到一颗线段树上面去 询问每个叶子 ...
- Flutter系列博文链接
Flutter系列博文链接 ↓: Flutter基础篇: Flutter基础篇(1)-- 跨平台开发框架和工具集锦 Flutter基础篇(2)-- 老司机用一篇博客带你快速熟悉Dart语法 Flutt ...
- 【xshell属性设置】如何修改xshell字体大小
1.周末在家,想搞一下学习,于是远程公司的电脑(我的移动硬盘在公司,里面有虚拟机及测试环境) 发现xshell界面字体太小,不方便看,于是研究了一下如何来设置xshell 的字体大小 2.点击左上角的 ...
- VS2008 "无法找到资源编译器dll 请确保路径正确"
系统环境:windows 8.1 企业版 x64 (装有 .NET 2.0 / 3.5 / 4.0 / 4.5) 安装前确认系统已安装 .NET 2.0 / 3.5 .在安装时,最好是默认安装,并且 ...
- 如何下载YouTube 60fps视频
YouTube上面不仅支持分辨率为4K和8K的视频,同时也开启了对60fps视频的支持.60帧的视频广泛用于游戏和体育视频中,使视频看起来更加流畅和细腻.对游戏玩家来说,YouTube对60fps支持 ...
- Phaser3 屏幕适配iPhoneX、iPhoneXs的坑 -- JavaScript Html5 游戏开发
PhaserJS 坑:在config内不要把 width 设为 window.innnerWidth在config内不要把 width 设为 window.innnerWidth在config内不 ...