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


基本上 Linux 系统的大部份网络服务,都可以接听所有网络接口的连接端口 。只要
把各种服务(例如 DNS 、 WWW )架设在拥有固定 IP 地址的内部网络接口上,即使您府
上是用电话拨接上网,您的系统服务激活、停止、关机应该都没有问题才对 。
使用动态 IP 架站(据说即使没有中断联机 HiNet 的 ADSL 动态 IP 天天也会变
动),网际网络上的使用者要怎么样使用您的网络服务?我想这个不是问题,只要使用
免费动态网域名称服务(例如 Hammer Node - http://hn.org/ 、 myIP -
http://myip.org/ )即可解决 。
问题是您不知道什么时候 IP 会被换掉,所以要使用客户端程序(例如 KVTek"s
yiPost - http://www.kvtek.com/ 、 DynSite for Windows - http://noeld.com/ )
来侦测 。
半数以上的动态网域名称服务客户端程序都是 Windows 平台,这样您要有另外一
台透过 Linux 上网的计算机来执行程序,定期(例如每 5-10 分钟)更新您的地址,但是
很多人只有一台计算机,想要使用 VMware - http://www.vmware.com/ 却又担心启用视
窗影响系统效能 。
那么就用 Linux 来做吧,底下是使用 PERL 的动态网域名称地址更新程序范例:
#!/usr/bin/perl
$interface = "ppp0";
$id = "abc"; # 填上您的帐号
$pwd = "xxxx"; # 填上您的密码
$hostname = "abc.myip.org"; # 您的网域名称
$recordtype = "A"; # 据悉 NS record 尚未开放
$ipdata = https://www.rkxy.com.cn/dnjc/`ifconfig $interface`;
$ipdata =https://www.rkxy.com.cn/dnjc/~ /addr:(d .d .d .d )/;
$ipaddress = $1;
$myip_org_data = https://www.rkxy.com.cn/dnjc/`lynx -dump
"http://www.myip.org/cgi-bin/Update.py?id=$id&pwd=$pwd&hostname=$hostname&i
p=$ipaddress&recordtype=$recordtype"`;
print "$myip_org_datan";
把上面这段程序存盘,就用 myip.org 为档名 。给它执行属性(chmod 755
myip.org)然后加到工作排程 。底下是定期(每 10 分钟)更新网域名称与 IP 地址对应
的排程范例:
5,15,25,35,45,55 * * * * /usr/local/bin/myip.org > /dev/null 2>&1
再把上面这段排程存盘,就用 cron.jobs 为档名 。把它加到排程(crontab
cron.jobs)就解决了 。现在从内部网络看来一切服务似乎没有问题,但是当您从网际网
路浏览虚拟主机的网站时,您将会发现所有虚拟主机的网页都变成与主网站相同的网页
了 。怎么办?
由于 Apache 的 NameBase 虚拟主机只监听设定文件指定 NameVirtualHost 的 IP
地址,也就是说每当 ADSL 的 IP 变动时,您就要修改设定文件的 IP 地址然后重新激活
网站服务 。
这工作也可以用排程来做,为了文字剖析语言程序的执行速度考量,我们先把虚拟
主机的设定文件部份另存新档,再从 Apache 的主设定档案
(/etc/httpd/conf/httpd.conf)中使用加载的方式 Include conf/vhosts.conf 进来 。
底下是虚拟主机的设定文件(vhosts.conf)范例:
# If you want to use name-based virtual hosts you need to define at
# least one IP address (and port number) for them.
#
NameVirtualHost 172.16.0.66
#
################# Named VirtualHosts

ServerAdmin root@dyn.hn.org
ServerName http://www.dyn.hn.org
DocumentRoot /var/www/Html
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-Access_log common


ServerAdmin liu@dyn.hn.org
ServerName home.dyn.hn.org
DocumentRoot /home/liu/public_html
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-access_log common


ServerAdmin root@dyn.hn.org
ServerName mail.dyn.hn.org

推荐阅读