使用 ADSL 动态 IP 建置虚拟主机( 三 )


$line =~ s/$zone/$ipaddr/eg;
print NEW_FILE ("$line");
}
close (NEW_FILE);
底下是内部网络名称服务器的地址记录文件 (/var/named/named.hosts.ns) 范例:
@ IN SOA dyn.hn.org. root.dyn.hn.org. (
2001010100 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; EXPire
86400 ) ; Minimum
IN NS dns.dyn.hn.org.
IN MX 0 mail.dyn.hn.org.
dns IN A 172.16.0.66
www IN A 172.16.0.66
imap IN A 172.16.0.66
mail IN A 172.16.0.66
home IN A 172.16.0.66
我们也要把 named.hosts.ns 档案备份(cp named.hosts.ns
named.hosts.default)一份,否则每当程序变动 DNS 的地址记录文件之后,下次程序就
找不到搜寻替换的目标了 。底下是使用 PERL 变更名称服务器地址记录文件的程序
(dynsite.hosts)范例:
#!/usr/bin/perl
# 拨号联机使用的适配卡
$interface = "ppp0";
# 没有联机使用的设定值
$address = "172.16.0.66";
# 拨号联机使用的设定档
$filename = "/var/named/named.hosts.ns";
# 下列程序没有必要修改
$ipconf = `/sbin/ifconfig $interface`;
$ipconf =~ /addr:(d .d .d .d )/;
$ipaddr = $1;
open (OLD_FILE,"$filename");
@lines =
close(OLD_FILE);
open (NEW_FILE,">$filename");
foreach $line (@lines) {
$line =~ s/$address/$ipaddr/eg;
print NEW_FILE ("$line");
}
close (NEW_FILE);
底下是内部网络名称服务器的指针记录文件 (/var/named/named.rev.ns) 范例:
@ IN SOA dyn.hn.org. root.dyn.hn.org. (
2001010100 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS dns.dyn.hn.org.
IN MX 0 mail.dyn.hn.org.
66 IN PTR dns.dyn.hn.org.
我们也同样把 named.rev.ns 档案备份(cp named.rev.ns named.rev.default)一
份,否则每当程序变动 DNS 的指针记录文件之后,下次程序又将会找不到搜寻替换的目
标了 。底下是使用 PERL 变更名称服务器指针记录文件的程序(dynsite.rev)范例:
#!/usr/bin/perl
# 拨号联机使用的适配卡
$interface = "ppp0";
# 没有联机使用的设定值
$point = "66";
# 拨号联机使用的设定档
$filename = "/var/named/named.rev.ns";
# 下列程序没有必要修改
$ipconf = `/sbin/ifconfig $interface`;
$ipconf =~ /addr:(d .d .d .d )/;
$ipaddr = $1;
($addr1, $addr2, $addr3, $addr4)=split(/./, $ipaddr);
open (OLD_FILE,"$filename");
@lines =
close(OLD_FILE);
open (NEW_FILE,">$filename");
foreach $line (@lines) {
$line =~ s/$point/$addr4/eg;
print NEW_FILE ("$line");
}
close (NEW_FILE);
当然我们总不能只使用手动方式逐一更新吧,现在把上述所有动作整合起来,以便
使用于工作排程自动执行,底下是使用 Bourne Shell 整合的程序范例:
#!/bin/sh
# 拨号联机使用的适配卡
interface=ppp0
# 没有联机使用的设定档
named_hosts_default=/var/named/named.hosts.default
named_rev_default=/var/named/named.rev.default
named_conf_default=/etc/named.conf.default
httpd_vhosts_default=/etc/httpd/conf/vhosts.conf.default
# 拨号联机使用的设定档
named_hosts_dynamic=/var/named/named.hosts.ns
named_rev_dynamic=/var/named/named.rev.ns
named_conf_dynamic=/etc/named.conf
httpd_vhosts_dynamic=/etc/httpd/conf/vhosts.conf
# 下列程序没有必要修改
case "$1" in
"start")
IPADDR=`/sbin/ifconfig $interfacegrep "inet addr"awk "{print $2;}"
awk -F":" "{print $2;}"`
if [ "${IPADDR}" = "" ] ; then
echo "$interface: error fetching interface information: Device not found"

推荐阅读