“DNS” 标签页面:

  • BIND-dlz联合数据库DNS服务器安装小记

    BIND是DNS服务程序,既可以做面向用户的DNS服务器,也可以做面向域名的DNS服务器,或者两者混合的DNS服务器。我要做的是面向域名的那种,为域名进行解析。

    下载编译安装是以下指令:

    wget ftp://ftp.isc.org/isc/bind/9.8.0-P4/bind-9.8.0-P4.tar.gz

    cd bind-9.8.0-P4

    ./configure --with-dlz-mysql --enable-largefile --enable-threads --with-openssl --prefix=/usr/local/bind

    make

    make install

    然后在/usr/local/bind/etc/named.conf输入以下内容:

    key "rndc-key" {
    algorithm hmac-md5;
    secret "gOszdwp5stjsnfI7MybyIg==";
    };

    controls {
    inet 127.0.0.1 port 953
    allow { 127.0.0.1; } keys { "rndc-key"; };
    };

    options{
    directory "/usr/local/bind/etc";
    #forwarders {8.8.8.8;};
    pid-file "/usr/local/bind/etc/named.pid";
    statistics-file "/usr/local/bind/etc/named.stats";
    recursion no;
    allow-query {any;};
    allow-transfer {none;};
    };

    logging {
    channel bind_info {
    file "/var/www/logs/bind.log" versions 20 size 20m;
    print-category yes;
    print-time yes;
    severity notice;
    };

    category default {
    bind_info;
    };
    };

    include "/usr/local/bind/etc/view_crekebind.conf";

    接着,从ftp://ftp.rs.internic.net/domain/named.root下载ROOT SERVER地址列表到/usr/local/bind/etc/。并在/usr/local/bind/etc/view_crekebind.conf输入以下内容:

    #any-view
    view "any_view" {
    match-clients { ANY; };
    allow-query-cache { ANY; };
    #allow-recursion { ANY; };
    #allow-transfer { ANY; };

    dlz "Mysql zone" {
       database "mysql
        {host=localhost dbname=crekebind user=root pass=123456 ssl=false}
            {SELECT 'TRUE' FROM canonical WHERE content = '$zone$' limit 1}
        {SELECT ttl, type, priority, CASE WHEN lower(type)='txt' THEN concat('\"', data, '\"') ELSE data END AS data FROM record, canonical WHERE content = '$zone$' and host = '$record$' AND zone = domain}
        {}
            {SELECT ttl, type, host, priority, case when lower(type)='txt' then concat('\"', data, '\"') else data end AS data FROM record, canonical WHERE zone = domain
            AND content = '$zone$'}
            {SELECT 'TRUE' FROM xfr, canonical WHERE zone = domain AND content = '$zone$'
            AND client = '$client$'}";
    };

    zone "." IN {
    type hint;
    file "named.root";
    };

    };

    上面的dlz配置对应myantdns,这是一个开源的PHP+MYSQL的DNS管理前端。

    根据官方文档,这里解释一下“dlz "Mysql zone"”一节的相关内容。如果用的是其他前端,则相关配置可能如下所示:

      1. dlz "Mysql zone" {
      2.    database "mysql
      3.    {host=localhost dbname=dns_data ssl=tRue}
      4.    {select zone from dns_records where zone = '$zone$'}
      5.    {select ttl, type, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"')
      6.         else data end AS data from dns_records where zone = '$zone$' and host = '$record$'
      7.         and not (type = 'SOA' or type = 'NS')}
      8.    {select ttl, type, mx_priority, data, resp_person, serial, refresh, retry, expire, minimum
      9.         from dns_records where zone = '%zone%' and (type = 'SOA' or type='NS')}
      10.    {select ttl, type, host, mx_priority, case when lower(type)='txt' then concat('\"', data, '\"')
      11.         else data end AS data, resp_person, serial, refresh, retry, expire,
      12.         minimum from dns_records where zone = '$zone$' and not (type = 'SOA' or type = 'NS')}
      13.    {select zone from xfr_table where zone = '$zone$' and client = '$client$'}
      14.    {update data_count set count = count + 1 where zone ='$zone$'}";
      15. };

    第一行声明使用DLZ驱动,第二节声明使用MYSQL。这些一般都是规定不变的。

    第三行声明MYSQL的链接信息,这一行可以用到的参数还有dbname、port、host、user、pass、socket、compress、ssl、space。

    第四行是查询DNS服务器中是否存在被请求域名$zone$,如果返回一行或以上结果,则被判断为存在,否则返回不存在改域名的应答。

    第五行至第七行是返回域名记录,如果在下面紧接着的定义中定义了查询SOA和NS记录的语句,则本行必须过滤掉相应的SOA和NS记录,如本例子所示;如果下面没定义,则本行必须返回相应的SOA和NS记录,如上面的例子所示。

    第八行则是刚刚说的用于返回SOA和NS记录的语句,如果上面的没有返回,则如例子所示设置;如果已经返回,则设为“{}”,注意其中不能用空格及其他字符。

    第十至十二行是返回AXFR时所有的域名记录,如果这是包括SOA和NS记录,则第八行须设为空,否则须在第八行返回SOA和NS记录。

    第十三行是查询当前请求AXFR的请求者$client$是否符合请求$zone$的授权,只要返回一行或以上记录就算符合。

    第十四行是访问$zone$时的为相应的记录加一。

    其中从第八行值第十四行的记录均为可选项。

    说实话,配置bind dlz并不算麻烦,麻烦的是,现在找不到像模像样的PHP管理前端,webmin的开发得挺好,但是它不仅仅是bind管理,所以比较庞大,安装比较麻烦。这次我没装,有空会好好研究一下。

    2011.08.21 / 7 条评论 / 5,783 次点击 / 分类: 所谓技术

  • DNS服务器SOA记录的解释

    任何DNS系统返回第一个域名记录就是SOA(Start of Authority),在域名配置中,SOA记录格式如下:

    @   IN  SOA     nameserver.place.dom.  postmaster.place.dom. (
        1            ; serial number
        3600         ; refresh   [1h]
        600          ; retry     [10m]
        86400        ; expire    [1d]
        3600 )       ; min TTL   [1h]

    使用“dig”时的返回格式为:

    nameserver.place.dom.              7200   IN      SOA     ns1.he.net. postmaster.place.dom. 1 3600 600 68400 3600

    其中的每个部分解释如下:

    serial number(序列号):是域名记录的版本,每更改一次域名的任何DNS记录,版本号就会自动加一,这时secondary dns就会知道DNS记录发生更改,以便重新同步。

    refresh(刷新时间):告诉secondary dns多久应该查询primary dns,看看DNS记录是否有更新。每次查询时,secondary dns会向primary dns请求SOA记录。如果记录中的serial number跟secondary dns已有的序列号不一样,则会向primary dns请求传送域名的当前的DNS记录。

    retry(重试时间):如果想primary dns请求传送域名当前的DNS记录失败后,间隔重试时间后再次重试请求。一般来说,retry小于refresh。

    expire(过期时间):在过期时间之前,secondary dns会继续请求传送DNS记录,并且在此时间里,secondary dns会根据已有的记录应答相关的DNS查询。如果到了过期时间后,secondary dns会停止应答该域名的DNS查询。

    min TTL(最小TTL):域名所有记录的最小生存时间值。当用户DNS查询到记录后,将存在缓存中,直到至少过了这个时间才将缓存刷新重新查询。

    有的DNS服务器还会有Negative caching TTL,就是当用户DNS查询到无此域名记录(NXDOMAIN)时,将把这个“没有此域名的记录”的声明保存在缓存中的时间。

    2011.08.19 / 2 条评论 / 7,854 次点击 / 分类: 所谓技术

  • DNS隧道大检阅

    研究了一天的DNS隧道,现在汇总一些关于我搜到的各种DNS隧道的信息。

    1、OzymanDNS

    官方网站:http://www.dnstunnel.de/

    操作系统:跨平台

    实现语言:Perl

    更新程度:最初版本只有0.1,有各个爱好者的修改版,如via1via2via3,等等。

    备注:挺复杂的,我没搞成功。

    2、tcp-over-dns

    官方网站:http://analogbit.com/software/tcp-over-dns

    操作系统:跨平台

    实现语言:JAVA

    更新程度:最新版本1.2,2011年4月更新。

    备注:JAVA编写的,由于服务器没装JDK,故我没用过。

    3、heyoka

    官方网站:http://heyoka.sourceforge.net/

    操作系统:Win2003

    实现语言:C

    更新程度:最新版本0.1.3-alpha,2009年更新。

    备注:服务器不是Windows,故我没用过。作者说很快会更新UNIX版代码,不过一直没动静。

    4、iodine

    官方网站:http://code.kryo.se/iodine/

    操作系统:Windows/Linux

    实现语言:C

    更新程度:最新版本0.6.0-rc1,2010年6月更新。

    备注:需要TAP/TUN支持。不过很多最初想用OzymanDNS的人都转投iodine,称其为“更好用的DNS隧道”。其官网也说自己的速度比其它的同类软件更快。

    5、dns2tcp

    官方网站:http://www.hsc.fr/ressources/outils/dns2tcp/index.html.en

    操作系统:Linux

    实现语言:C

    更新程度:最新版本0.5.2,2010年6月更新。

    备注:最新版代码可以在Windows下编译运行,网上也有人编译了Windows版本(via)。

     

    最后文不切题地提一个软件,叫ssocks,是一个轻量级的socks代理服务端。

    2011.06.28 / 1 条评论 / 5,101 次点击 / 分类: 所谓技术

  • 更改creke.net域名DNS服务器

    更改creke.net域名DNS服务器
        昨晚把creke.net域名的DNS服务器换了。原来使用的是新网的DNS,不过新网的DNS是公认的慢,而且,我是在代理买的,因此各种记录有限制20条。最重要的是,不支持DNS轮循。不爽。所以昨天一狠下心来,换了!
        不过,换归换,新的DNS服务还是有一点无法比拟新网的DNS,那就是URL转发。新网的URL转发是301请求的转发,这样子是对搜索引擎最友好的。我原来想找其它的转发服务代替,可惜国内的URL转发的服务几乎没有。而国外的几乎被封得差不多了,勉强能用的是everydns的转发,但是也是一天抽风半天的不稳定状态。所以,只好找个方法使得转移DNS后仍然能使用新网的URL转发。
        其实,A记录是最方便的办法,就是,把原来转发的二级域名ping出IP来,然后在新的DNS中做A记录。但是,考虑到新网的URL转发服务器IP会改变,所以这个不是一劳永逸的办法。后来,查看DNSpod的帮助文档时,灵光一闪,将转发域名设置NS记录到新网的DNS中,一切OK。
        当然,还有一个问题,就是更改到别的DNS后,新网的管理面板无法进入新网的DNS平台了。还是灵光一闪,我想到了代理商的后台中提供了两个密码,一个是域名管理密码,另一个是新网的DNS密码。起初因为能直接通过新网的管理平台进入新网的DNS,所以我也不太知道新网的DNS密码可以直接进入DNS管理后台。现在终于知道两个密码的各自的用途了。我再次感到我选择的代理商还算有点良心……
        这里讨论的前提是,域名的DNS不使用新网的DNS后,新网的DNS不会停止你的域名的解析,也不会删除DNS记录。目前看来,一切正常,而且新网的DNS大概也没时间去删除DNS记录和停止解析。再观察几天,如果新网的DNS确实不更改原有的记录,同时增加修改删除正常,那么此方法证实可行。
        其他使用creke.net二级域名的朋友们的二级域名不受影响,更换至新的DNS后,我把二级域名的NS服务器全部添加了,域名也更稳定了。

    2009.06.13 / 暂无评论 / 1,633 次点击 / 分类: 随心随感