在一个 Firewall 系统上面,我们希望外部机器无法查寻内部机器的 IP 与hostname 的对照表,但内部机器彼此间却需要互相认识。如果我们只能在一台机器上建立 DNS server 而且它要能同时服务内外两个网络的使用者时,这样的要求可以借着两种方法来达成。一是建立两个独立的 DNS 程序, 分别服务内外两个网络的使用者,第二种方法是利用 BIND 本身的功能,来限制查寻(query)者的身份。这边,我们选用第一种(也是比较复杂的)方法作示范。:p
此外,为了安全上的考量,我们也希望 DNS server 执行起来的时候,能使用 root 以外的身份,并且能以 change root directory (chroot) 的动作。
本文采用的范例,外部网络为 140.109.7.* (*.wsl.sinica.edu.tw),内部网络使用 192.168.7.* (*.ascc)。我们使用 FreeBSD 3.3-STABLE 为操作系统做一个完整的练习,至于 Linux 的部份,已经有人写好了,请参考 Dave Lugo 的文章,位置是 http://www.etherboy.com/dns/chrootdns.html