一.配置子域DNS服务器:子域授权
当DNS之间有上层,下层的关系时,如何开放子域的授权呢?
以luyx30.no-ip.org为例,有人申请domain name,他要的域名是test.luyx30.no-ip.org:
----上层DNS服务器:
即master.luyx30.no-ip.org这一台,只要在luyx30.no-ip.org那个zone file内,增加自定义的NS并指向下层DNS的主机名与IP(A)即可,zone file的序号也要增加才行。设置完重启DNS服务。
#####/var/named/named.luyx30.no-ip.org
$TTL 600
@ IN SOA master.luyx30.no-ip.org. luyx.www.luyx30.no-ip.org. (2012110203 1D 1H 1W 1D);
# 其他设置于前面几节相同,增加以下两行即可
test.luyx30.no-ip.org. IN NS dns.test.luyx30.no-ip.org.
dns.test.luyx30.no-ip.org. IN A 192.168.1.111
.................
----下层DNS服务器:
设置的内容依据实际情况,配置内容与前面几节的内容相同。
二.依据不同接口给予不同的DNS主机名:view功能应用
目标:让不同来源的用户,能够取得自己的Zone响应。
举例(鸟哥的linux私房菜-服务器篇(第三版)第632页):当用户来自10.0.0.1时,这个来源是外部的,因此就用外部的zone file内容来响应。
----修改/var/named.conf,红色部分为修改部分:
####/var/named.conf
options {
####.....(前面部分相同,省略)......
......
};
acl intranet {192.168.100.0/24; };
acl internet {! 192.168.100.0/24; any ;};
view "lan" {
match-clients {"intranet";};
zone "." IN {
type hint;
file "named.ca";
};
zone "centos.vbird" IN {
type master;
file "named.centos.vbird";
allow-transfer {192.168.100.10;};
};
zone "100.168.192.in-addr.arpa" IN {
file "named.192.168.100";
view "wan" {
match-clients {"internet";};
type hint;
file "named.ca";
type master;
file "named.centos.vbird.inter";
##外网因为没有使用到内网的IP,所以IP反解部分就不写了
};
----在/var/named目录下新增named.centos.vbird.inter文件,内容与named.centos.vbird基本相同,只需将序号和服务器对应的IP地址改成192.168.1.100即可
三.搭建动态DNS服务器:让你成为ISP
如果我们本身是以拨号方式的ADSL连接上Internet时,我们的IP是ISP随机提供的,因此我们需要利用DDNS(Dynamic DNS).
DDNS的原理,简单的说:1.我们的DDNS主机先提供Client一个key,2.Client利用这个key.并配合BIND 9的nsupdate命令,就可以连上DDNS主机,并且修改主机上面的zone file内的对应表了。具体步骤如下:
----DDNS Server的设置:
1.DDNS Server建立密钥:
dnssec-keygen -a [算法] -b [密码长度] -n [类型] 名称
参数说明:
算法 主要有,HMAC-MD5(常用),RSA,DSA,DG,RSAMD5等
密码长度 通常给予512位的HMAC-MD5
类型 是指客户端能够更新的类型主要有,ZONE(客户端可以更新任何标志及整个ZONE),HOST(客户端仅可以针对他的主机名更新,一般建议给HOST)
dnssec-keygen -a HMAC-MD5 -b 512 -n HOST web
2.将公钥(刚才生成的文件中的.key文件)的密码复制到/etc/named.conf
###/etc/named.conf
//在任意位置加入key的相关密码信息
key "web" {
algorithm hmac-md5;
secret "......";
//在原有的zone加入以下代码
zone "centos.vbird" IN {
file "named.centos.vbird";
allow-transfer {192.168.100.10;};
update-policy {
grant web name web.centos.vbird. A; //即授权web的key在这个name:centos.vbird.范围内可以修改A标志
};
3.由于未来客户端传来的信息要有named写入,所以修改权限chown g+w /var/named
4.重新启动,并检查日志。
----Client的设置:
5.web.centos.vbird获取到Server建立的私钥和公钥。
假设你已经将这两个档案放置到 /usr/local/ddns 里面去,然后测试看看:
[root@web ~]# cd /usr/local/ddns
[root@web ddns]# nsupdate -k Kweb.+157+36124.key
> server 192.168.100.254
> update delete web.centos.vbird ####<==删除原有的
> update add web.centos.vbird 600 A 192.168.100.200 ## 新增一笔数据,ttl 是600,给予A 标签,对应192.168.100.200
> send
>#### 最后在此按下 [ctrl]+D 即可
由于手动更新好像挺麻烦的,我们就让 Client 自动更新吧!利用底下这个 script 即可!
[root@web ~]# vim /usr/local/ddns/ddns_update.sh
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH
# 0. keyin your parameters
basedir="/usr/local/ddns" # 基本工作目录
keyfile="$basedir"/"Kweb.+157+36124.key" # 将档名填进去吧!
ttl=600 # 你可以指定 ttl 的时间喔!
outif="eth0" # 对外的联机接口!
hostname="web.centos.vbird" # 你向 ISP 取得的那个主机名啦!
servername="192.168.100.254" # 就是你的 ISP 啊!
# Get your new IP
newip=`ifconfig "$outif" | grep 'inet addr' | \
awk '{print $2}' | sed -e "s/addr\://"
`checkip=`echo $newip | grep "^[0-9]"`
if [ "$checkip" == "" ]; then
echo "$0: The interface can't connect internet...."
exit 1
fi
# create the temporal
filetmpfile=$basedir/tmp.txt
cd $basedir
echo "server $servername" > $tmpfile
echo "update delete $hostname A " >> $tmpfile
echo "update add $hostname $ttl A $newip" >> $tmpfile
echo "send" >> $tmpfile
# send your IP to serverns
update -k $keyfile -v $tmpfile
你只要将上述的程序里面,特殊字体的部分给他修改一下,就能够以 /etc/crontab 的方式在你的系统内自动执行了!
参考资料:http://vbird.dic.ksu.edu.tw/linux_server/0350dns_6.php