bind9实战 前言 不想每次都修改host文件来实现我的域名访问,所以我在想有没有一个更好的方式,可以让我实现域名映射。这个时候我想到了自己架设一个dns服务器。使用用开源dns系统bind9 。
DNS资源记录类型
A : 此记录列出特定主机名的 IPv4地址。这是名称解析的重要记录。
AAAA : 名称至 IPv6 地址
CNAME 标准名称 此记录指定标准主机名的别名。
PTR : IPv4/IPv6 地址至名称
MX:邮件交换器,此记录列出了负责接收发到域中的电子邮件的主机。
NS:名称服务器,此记录指定负责给定区域的名称服务器。
dig结果显示中status参数
NOERROR : 查询成功
NXDOMAIN : DNS 服务器提示不存在这样的名称
SERVFAIL : DNS 服务器停机或 DNSSEC 响应验证失败
REFUSED : DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )
安装 其实安装非常简单,一条命令就搞定了
管理命令 启动:
1 sudo systemctl start bind9
停止:
1 sudo systemctl stop bind9
重启:
1 sudo systemctl restart bind9
状态:
1 sudo systemctl status bind9
配置域名 举个例子,比如现在我们有个域名是:wang.pro(先ping一下是否存在这个域名,换一个不存在的域名)。现在我们要对这个域名进行虚拟映射。
首先打开/etc/bind/named.conf.local
,追加如下内容到文件尾部:
1 2 3 4 zone "wang.pro" { type master; file "/etc/bind/zones/wang.pro.db"; };
那么现在这个文件的内容完整如下:
1 2 3 4 5 6 7 8 9 10 11 12 // // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; zone "wang.pro" { type master; file "/etc/bind/zones/wang.pro.db"; // 这个文件定义了文件地址 };
我们定义的地址是/etc/bind/zones/wang.pro.db
。但是我们的/etc/bind/
并没有该目录。所以需要如下命令进行创建:
1 sudo mkdir -p /etc/bind/zones
进入该目录:
然后创建该文件wang.pro.db
,并追加如下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; BIND data file for wang.pro ; $TTL 14400 @ IN SOA ns1.wang.pro. host.wang.pro. ( 201006601 ; Serial 7200 ; Refresh 120 ; Retry 2419200 ; Expire 604800) ; Default TTL ; wang.com. IN NS ns1.wang.pro. ;域名解析的ip地址:118.190.207.216 ns1 IN A 118.190.207.216 www IN A 118.190.207.216
这样就设置完成了。然后我们将bind9进行重启。
测试DNS效果 dns服务器ip地址(虚拟机地址):192.168.1.12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $ dig @192.168.1.12 www.wang.pro ; <<>> DiG 9.11.5-P1-1ubuntu2.5-Ubuntu <<>> @192.168.1.12 www.wang.pro ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4142 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 665bf0102d35512c4df4b27b5daf07b1ec2114e2fa9beb42 (good) ;; QUESTION SECTION: ;www.wang.pro. IN A ;; ANSWER SECTION: www.wang.pro. 14400 IN A 118.190.207.216 ;; AUTHORITY SECTION: wang.pro. 14400 IN NS ns1.wang.pro. ;; ADDITIONAL SECTION: ns1.wang.pro. 14400 IN A 118.190.207.216 ;; Query time: 0 msec ;; SERVER: 192.168.1.12#53(192.168.1.12) ;; WHEN: Tue Oct 22 21:44:17 CST 2019 ;; MSG SIZE rcvd: 119
好了,这样就表示已经配置成功了
设置默认本机DNS可用 之前的设置我们需要指定本机的DNS服务器才可以使用,如果我们不指定的话,那么查询该域名是没有效果的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ dig www.wang.pro ; <<>> DiG 9.11.5-P1-1ubuntu2.5-Ubuntu <<>> wang.pro ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34758 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;wang.pro. IN A ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Tue Oct 22 21:44:51 CST 2019 ;; MSG SIZE rcvd: 37
设置虚拟机的dns
将关闭虚拟机自动获取dns,添加dns服务器ip:192.168.1.12,114.114.114.114
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ dig www.wang.pro ; <<>> DiG 9.11.5-P1-1ubuntu2.5-Ubuntu <<>> www.wang.pro ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49051 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;www.wang.pro. IN A ;; ANSWER SECTION: www.wang.pro. 6597 IN A 118.190.207.216 ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Tue Oct 22 22:13:49 CST 2019 ;; MSG SIZE rcvd: 57
测试:ping www.wang.pro
局域网访问 比如我的windows 10的ip地址是192.168.1.96。那么我们可以添加如下内容到/etc/bind/named.conf.options
文件中。
1 2 3 4 listen-on { 192.168.1.12; 192.168.1.96; };
填写完成后打开/etc/bind/named.conf.options
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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 //======================================================================== dnssec-validation auto; listen-on-v6 { any; }; listen-on { // dns服务器ip(虚拟机) 192.168.1.12; // pc测试机ip 192.168.1.96; }; };
重启bind9。
然后在windows 10 上设置DNS为192.168.1.12
和114.114.114.114
。
这样我们打开cmd,查看域名是否获取到了正确的ip。
1 2 3 4 5 6 7 8 9 10 11 12 PS C:\Users\pc> ping www.wang.pro 正在 Ping www.wang.pro [192.168.1.12] 具有 32 字节的数据: 来自 192.168.1.12 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.1.12 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.1.12 的回复: 字节=32 时间<1ms TTL=64 来自 192.168.1.12 的回复: 字节=32 时间<1ms TTL=64 192.168.1.12 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 0ms,最长 = 0ms,平均 = 0ms
但是如果我们这边手机要连怎么办。不能每次都加ip吧。所以这里有个简单的办法。直接将上面的配置修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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 //======================================================================== dnssec-validation auto; listen-on-v6 { any; }; listen-on { any; }; };
这样直接将ip列表修改为any。就可以接收所有的ip了。这个时候我们将bind9再次重启。
手机测试 每个手机的设置是不同的。进入设置->无线局域网->在已连接的WIFI右边点击带圈的感叹号->配置DNS->选择手动。
最后点击添加服务器,输入我们虚拟机的地址:192.168.1.12。这个时候我们在手机的浏览器里面输入我们之前设置的域名www.wang.pro 。
泛域名设置 在开发的时候,可能会出现使用多个域名的情况,但是如果每次添加域名都要设置bind9,还要重启,非常麻烦,那么有没有简单的办法呢?有,就是使用泛域名设置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ cat /etc/bind/zones/wang.pro.db ; BIND data file for wang.pro ; $TTL 14400@ IN SOA ns1.wang.pro. host.wang.pro. ( 201006601 ; Serial 7200 ; Refresh 120 ; Retry 2419200 ; Expire 604800) ; Default TTL ; wang.pro. IN NS ns1.wang.pro. ;wang.pro. IN A 118.190.207.216 ns1 IN A 118.190.207.216 ;www IN A 118.190.207.216 * IN A 118.190.207.216
那么如果要设置泛域名,只需要把最后一行的www
更改为*
就可以了。