使用自己的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记录。