

再折腾一下DNS,定制内部用域名解析
Posted by watashi in linux, tags: bind9, dns, domain, http, linux, nameserver, php, redirect之前为了穿墙和正常访问校园网两不误而在90上架了个DNS。昨天facebook hackercup里穿墙的90代理也是给力的,不过facebook就不怎么给力了 ╮(╯▽╰)╭ 扯远了,虽然不是最初的动机,不过即然架设好了DNS Server就会自然而然的想折腾一下,提供一些内部用的短域名。比如直接将zoj, nhd, icpc, printer解析成ZOJ, NexusHD, ZJU ICPC-HOST和218打印机的IP。不过为了省事,最后是改用了一个自己yy的.acm的根域名,只要简单修改bind9的配置文件,在/etc/named.conf.local中新加一个zone:
zone "acm." { type master; file "/etc/bind/acm.zone"; };
并且新建一个文件/etc/bind/acm.zone内容如下:
$TTL 604800 @ IN SOA acm. root.acm. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS acm. @ IN A 10.71.101.90 9 IN A 10.71.101.9 ;; ... 70 IN A 10.71.101.70 90 IN A 10.71.101.90 90 IN AAAA 2001:da8:e000:90:0:5efe:10.71.101.90 192 IN A 10.71.101.192 zoj IN CNAME acm.zju.edu.cn. watashi IN CNAME watashi.ws.
A记录对应ipv4,AAAA记录对应ipv6,CNAME记录对应别名。于是都可以如法炮制,其中特殊符号@代表current origin,也就是没有任何.的acm,而zoj对应的是zoj.acm,并会转到acm.zju.edu.cn上。注意最后有一个点,和url中的/类似,如果以.结尾表示是绝对的,而不以.结尾的则是相对的。
当然也可以邪恶一把,比如修改并加入两个zone,并加入下面的zone file:
$TTL 604800 $ORIGIN shouji.360.cn. @ IN SOA shouji.360.cn. root.shouji.360.cn. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS shouji.360.cn. shouji.360.cn. IN A 250.250.250.250 $TTL 604800 $ORIGIN mail.139.com. @ IN SOA mail.139.com. root.mail.139.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL @ IN NS mail.139.com. mail.139.com. IN A 209.85.227.17 ; mail.google.com mail.139.com. IN A 119.147.15.56 ; mail.qq;com
前面做的事情就是流氓了一把360,把shouji.360.cn解析到了不存在的IP 250.250.250.250,于是访问将会得到诸如Connection Timeout(连接超时)的错误。不知道生活在天朝的同学们是不是对此似曾相识呢 (  ̄ー ̄) 第二个就要更流氓了,如果你访问mail.139.com,那么实际可能随机访问到gmail或者qq邮箱,这也是个做负载均衡的例子,嘛,我只是建议别用139邮箱啦 >▽< 你懂的。
然后猛犸同学给了个不错的建议,就是利用这个DNS,能不能做到在地址栏里输入zoj2011之类的题号的时候就直接跳转对应题目的页面上去。当然DNS直接是做不了这个事的,DNS联系的是domain和ip address这两样东西,和http都八杆子打不着,而题目页面还是一个具体的url的http请求。不过仔细想一想其实分两步做就很简单了,简单来说就是泛域名+根据HOST重定向。所谓泛域名其实就是