跳至正文

[教程]使用Bind9为自己的IP段制作rDNS

使用自己的IP段做SMTP服务(或者装逼)时,我们往往需要建立一个权威DNS或者有rDNS服务的DNS(比如dns.he.net)来处理PTR解析,但是RIPE在绑定IP段的rDNS地址时需要先验证DNS是否有存在这个地址,HE需要你先绑定到它家的NS才会开启这个地址,就陷入了鸡生蛋的问题,这时我们就可以使用Bind9建立个属于自己的权威DNS服务器并处理诸如NS/PTR之类的解析。(注意:本教程并没有使用主从服务器,只是单纯建立一个权威DNS)
(注意:请不要全部照抄,除非你想做一个RIPENCC的权威DNS和指向1.1.1.1的NS解析)

理论可行,实践开始~
平台
一个支持UDP 53出入站的服务商(自己拿自己IP播也行)、Ubuntu 20.04 LTS、一个能用的网络

1.放行防火墙

制作DNS前,我们需要放行端口出入,不然用户查询的包进不来

#允许53/udp入站,如果有需要,你也可以指定使用哪张网卡做出站
#注:ufw默认状态下允许所有端口出站
ufw allow 53/udp 
ufw allow 53/tcp

2.安装Bind9

防火墙已经放行了出入站,我们现在做的就是安装Bind9

#安装Bind9
apt install bind9 -y
#添加到开机自启项
systemctl enable bind9
#检查是否成功运行
lsof -i:53

如果你输入了 lsof -i:53 后,返回了这些数据,那就说明你的bind开起来了(好耶)

3.写入.arpa的域,并写入解析数据

在确定了自己的Bind9安装无误后,我们可以开始编辑Bind9服务器的配置文件,把我们的域添加进去

vi /etc/bind/named.conf.options

这时,你应该看到这些内容

我们需要对Bind9做点修改,把dnssec-validation auto删掉(你如果想做DNSSEC的话可以不删)并修改listen-on-v6的数据(如果有需要),最终应该是这个样子

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        allow-query     { any; };

        //如果你想使用IPv4,请把下一行的注释删掉
        //listen-on {IPv4地址;};
        listen-on-v6 { 第一个IPv6地址; 第二个IPv6地址; };
        //关闭递归查找(RIPE发现DNS支持递归会报错)
        recursion no;
        allow-recursion { none; };
        allow-transfer { none;};
        //关闭查询缓存(没必要开着)
        allow-query-cache { none; };
        //如果你想使用dnssec,请把下一行的no改为yes并自行配置对应的解析
        dnssec-enable no;
};

然后,我们就需要加 .arpa

//这是示例,请自行修改自己的arpa信息,本文使用 2a0f:6146::/32 作为示例
zone "6.4.1.6.f.0.a.2.ip6.arpa" IN {
        type master;
        //这里的myNetwork.zone就是你之后写解析的地方
        file "myNetwork.zone";
};

file的默认路径在 /var/cache/bind/,我们可以做个链接,以后方便修改

ln -s /var/cache/bind/ zones

前往 zones

cd zones/

新建myNetwork.zone,并往里面写入解析

$TTL    60
;在Bind9中, ";"是注释
;请自行修改ns1.example.com,ns2.example.com,将其修改为你解析到你上面绑定的IP地址的域名(后面的"."不能删)
@       IN      SOA     ns1.example.com. ns2.example.com. (
                                                3   ; Serial
                                                3600    ; Refresh
                                                86400    ; Retry
                                                259200    ; Expire
                                                600 )    ; Default TTL(以$TTL为准)
;格式【空格】子域名前缀或整个子域名【空格】你想要的TTL(单纯写IN也可以,TTL就是上面的$TTL 60)【空格】解析类型(A/AAAA/PTR/TXT/NS等)【空格】目标地址(如果指向域名,后面的"."不能删)
        86400   NS      ns1.example.com.
        86400   NS      ns2.example.com.
;下面是示例解析
;此配置文件仍然使用2a0f:6146::/32作为演示
;因为2a0f:6146::的PTR为0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.4.1.6.f.0.a.2.ip6.arpa.
;我们在当时定义 .arpa域的时候已经添加了6.4.1.6.f.0.a.2.ip6.arpa.,所以我们只需要写剩下的地址即可
0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0    86400   PTR  mynetwork.example.com.

保存,reload服务

systemctl reload bind9

4.处理解析方面的问题

前往你的域的解析管理界面,新建A/AAAA解析,此子域名就是你的NS服务器地址(请不要照抄)

进入RIPE Database,Create an Object,选择domain (请确定自己已经生成了属于自己的mnt-by)

填完对应信息,提交即可

5.小结

这么做之后就可以在自己的机子上随便写PTR解析,写完reload下就行了,但是要注意保持DNS的高可用性

如果你只是想拿自己的服务器做中继,实际的解析是放在HE那边,那你可以在第三步添加解析时自行修改NS记录。