服务器架设篇 - RedHat 6.1

动态 DNS 申请

动态 DNS 申请

最近更新时间: 2001/08/21

本文数据主要针对 RedHat 6.1 的系统进行说明,要注意的是,RedHat 6.1 与 Red Hat Enterprise Linux (RHEL) 是完全不同的东西!RedHat 6.1 在 1999 年推出,在 2000 年底就不再维护了!这部份网站更新到 2002 年,也没有再维护过! 因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 RedHat 6.1 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!

什么是 DNS ?

如果你常常在台湾上网络的话,应该都知道奇摩站的网址为 www.kimo.com.tw 吧!所以你在浏览器的网址列上打入 http://www.kimo.com.tw 就可以连上 奇摩站 了!好啦,那我们知道其实 Internet 上面用来认识你的电脑的门牌都是使用 IP 来进行的,例如 奇摩站 的 IP 其实是 202.1.237.21,所以如果你在网址列打上 http://202.1.237.21 同样也可以连上 奇摩站 的!虽然使用 IP 即可连上主机,但是由于 IP 是一堆数字的集合,很难记忆,所以才会有 DNS 这种网址列的出现,这样一来,只要你记得 kimo 就大概可以知道他的网址列,而不用死记一堆 IP 数字了!

举个简单的例子,你知道教育的英文吧(education),另外我们也知道 WWW 为一般的网页主机开头,所以如果你要登录台湾的教育部首页,直接在网址列打上 www.edu.tw 就可以啦,那你就不用去记 IP 了!所以,简单的来说,DNS只是要帮我们记忆一些名称以对应相对的 IP 的一个系统。

那网址列的名称有没有什么意义呢?其实是有的,网址列的最后几个字母代表的意义如下:
 

名称 代表意义
com 公司、行号、企业
org 组织、机构
edu 教育单位
gov 政府单位
net 网络、通信
mil 军事单位

我对 DNS 的了解也不是很深,大概有的只是一些概念而已,如果你想要对 DNS 有更深一层的了解,建议到 study-area 来看看!

去申请免费的动态 DNS 系统

好了,既然知道了 DNS 系统了,那什么叫 动态DNS 呢?这是由于近年来拨接网络的盛行,而拨接网络所分给你的 IP 并非固定的,例如以 seednet 为例,你每次重新开机而 seednet 给你的 IP 大致上是分布在 211.74.XXX.XXX 这一个 IP !所以你每次拨接上网的 IP 是随机分配的!

那就会产生一个问题,如果你架设了一个网站,但是你的 IP 却一直变来变去,那用户端如何跟你连接呢?这时就有所谓的动态 DNS 出现了,他的运作原理是这样:你每次开机的时候,写一个小程序去向这个 动态DNS主机 要求更改你的 IP ,这个主机会将你申请的名称与 IP 重新作一个调整,因此,只要别人知道你的主机名称,不论你的 IP 为何,他一定可以连上你的主机(因为 IP 跟着你的主机而变!)这对于我们这种使用动态 IP 的人是很有帮助的!

目前就我所知,台湾地区有一个试验性的免费动态 IP 系统,由于是试验性的,所以他并不保证完全可以让你的DNS永远没有问题!不过,如果你有心去架设一个网站的话,可以去申请需要付费的动态DNS系统!那应该会比较好一些!至于申请的方式,你可以到底下的网址去看看,这里就不多作介绍了!

免费动态 DNS :
台湾地区免费动态DNS系统
付费动态 DNS 系统:
荻恩斯科技
当然还有很多的动态DNS系统,你可以多多比较了!不过,目前我所申请的是免费的 DNS 系统,你可以上去看看啰。

侦测小技巧

申请了 动态DNS系统 当然是希望在每次重新连接的时候可以自动将你的 IP 送上主机去更改了,这时你就需要用到 crontab 这种例行性检查的服务了!

crontab
在 Linux 系统当中,由于有些服务是必须在某些时刻打开的,因此就有 crontab 服务的产生, crontab 可以让你在固定的时候运行某些动作!关于系统的 crontab 你可以到 /etc/crontab 这个文件去看看, RedHat 6.1 缺省的 crontab 有点像这样:
 

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01-59/3 * * * * root run-parts /etc/cron.min <= 我加上的一行
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

上面的说明是这样的:
MAILTO:如果底下运行的动作发生了一些消息,这些消息应该传给谁?由于 root 没有办法在其他的机器上登录以取得邮件,因此这一行我都会改成我的 ID帐号 !
另外,在 run-parts 部分,(注意: # 后面接的是注解,并不会被运行)共有五个数字(如果没有数字的话,必须以 * 来代替),这五个数字的意义是:
 
1 2 3 4 5
分钟(0-59) 小时(0-23) 每月的第几天 月份(1-12) 星期几(0-6)
例如 01 * * * * root run-parts /etc/cron.hourly 表示每个小时的 1 分钟运行 /etc/cron.hourly 这个目录中的所有运行档,而 42 4 1 * * root run-parts /etc/cron.monthly 则表示每个月的一号的4点42分运行 /etc/cron.montly 这个目录下的所有运行档,然后我通常会在run-parts 当中加入如上表中黄色显示的那一行,那一行表示:在每隔三分钟之后运行 /etc/cron.min 这个目录下的所有运行档!因此,我必须在 /etc 中先创建一个名为 cron.min 的目录: mkdir /etc/cron.min,然后将我所需要的例行性运行档写在这个目录中!

一个范例
以下是我写的一个小程序,你可以看看:
 

#!/bin/sh
# 这个小批量档将可以让你的 DNS 更改你目前的 IP ,
# 并请注意,这个批量档是在 seednet 的网域中写的,
# 在 hinet 或其他的 ISP 中我还不能肯定是否可以运行!
# 我的系统是 Redhat 6.1,内核是 2.2.18 ,
# 另外,我的 eth0 是内部网络的接线, eth1 是连接到 ATU-R 上的!
# 我使用的拨接程序是 rp-pppoe-2.6.1 这一个!
# 所以我的拨接运行档在 /usr/sbin/adsl-start !

#                                 VBird 2001/08/18
# ============== 请输入必要的参数  ==========================
# 1. 请输入你的 eth0 这张网络卡的 IP (虚拟 IP )
#    以我为例,我是使用 192.168.1.2 这一个 IP ,请依你的设置来写!
  ETH0IP=192.168.1.2
  PASSWD=xxxxxx
  EMAIL=xxx@xxx.xxx.xxx
  HOSTNAME=xxx.adsldns.org
# ===========================================================
  PATH=$PATH:/sbin

# 创建搜索文件! 
   Base=`pwd`
   CardFile="no"
   [ -f ${Base}/card1 ] && CardFile="yes"
   if [ "$CardFile" = "no" ]; then
 echo card1 > ${Base}/card1
   else
 qq=qq
   fi

# 搜索你目前主机上的 IP 
   IP1=`/sbin/ifconfig eth0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
   IP2=`/sbin/ifconfig eth1|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
   IP3=`/sbin/ifconfig ppp0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
   IP11=`echo $IP1 |awk -F '.' '{print $1}'`
   IP21=`echo $IP2 |awk -F '.' '{print $1}'`
   IP31=`echo $IP3 |awk -F '.' '{print $1}'`
   workIP=`ifconfig ppp0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
   LANIP=`ifconfig eth0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`

# 你上一次登录的 IP 为何? 
   CARDIP=`cat ${Base}/card1`

# 1. 没有任何的拨接网络被启动
if [ "$IP3" = "" ]; then
        ifdown eth1
        /usr/sbin/adsl-stop
        /usr/sbin/adsl-start
        IP3=`/sbin/ifconfig ppp0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
fi
if [ "$IP3" = " " ]; then
        ifdown eth1
        /usr/sbin/adsl-stop
        /usr/sbin/adsl-start
        IP3=`/sbin/ifconfig ppp0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
fi

# 2. 旧的登录 IP 是错的!
if [ "$CARDIP" = " " ]; then
        ifdown eth1
        /usr/sbin/adsl-stop
        /usr/sbin/adsl-start
        IP3=`/sbin/ifconfig ppp0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
fi
if [ "$CARDIP" = "" ]; then
        ifdown eth1
        /usr/sbin/adsl-stop
        /usr/sbin/adsl-start
        IP3=`/sbin/ifconfig ppp0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
fi

# 3. 是否需要重新修改你的 IP ?
if [ "$IP3" = "$CARDIP" ]; then
 exit 1
else
        IP3=`/sbin/ifconfig ppp0|grep 'inet' |awk '{print $2}' |sed -e "s/addr\://"`
# send your IP to kevin.adsldns.org
 echo 'passwd='$PASSWD'&email='$EMAIL'&hostname='$HOSTNAME'&debug=1&forceip='$IP3'' | lynx http://www.adsldns.org/clientupdate.php -post_data
# repleas your card1 file
 echo $IP3 > ${Base}/card1
fi

上面这个批量档你可以在这里下载,并请注意,上面黄色的字的地方是你需要修改的东西,ETH0IP为你的内部网络的通信闸的 IP ,其他的项目则是你在 www.adsldns.org 申请的时候所附上的信息!请填写这些东西就可以了,然后将这个文件放置到你刚刚创建的 /etc/cron.min 这个目录中,然后修改他的属性成为: chmod 744 /etc/cron.min/ping_net_card.sh,如此一来,则每三分钟系统会去侦测你的网络是否存在,若不存在则会重新启动你的拨接程序,并且在拨接之后将会直接更新你在 www.adsldns.org 的 DNS 啰!
修改历史:
2002/01/01以来统计人数
其他链接
环境工程模式篇
鸟园讨论区
鸟哥旧站

今日 人数统计
昨日 人数统计
本月 人数统计
上月 人数统计