bind安装笔记

本文中一些bind参数参考自http://www.19830102.com/

dns是任何一个公司都会用到,而bind又是dns服务器的首选。

oreilly也出过这本书

http://oreilly.com/catalog/9780596001582/

虽然windows上也可以做dns服务器,但windows的dns服务器的安全性只能用这个一个垃圾桶来描述。

这次由于公司需要,所以我们也自己安装了3个bind服务器,一个master,两个slave.

基本安装方式网上都有,而我这次主要是由以下几点。

一个是启动named的用户必须是nologin用户,于是就要新建用户named,同时涉及到named的一些文件夹的权限也要赋予named用户权限。最后启动时候用

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

named -u named -c /usr/local/named/etc/named.conf
```

同时由于是自己根域的master dns,所以没有必要开启递归查询,所以只要如下设置就可。

```c

recursion  no
```

其次named默认是把日志记录在/var/log/messages中,这样并不是一个很好的选择,bind本身支持记录多种类型的日志。以下设置是记录的对于bind服务器的warning日志和查询日志。这样一旦出了问题就能很快的查找到相关原因。

```c

logging {         channel warning         { file "log/named.log" versions 3 size 2048k;         severity warning;         print-category yes;         print-severity yes;         print-time yes;         };         channel query         { file "log/query.log" versions 3 size 2048k;         severity info;         print-category yes;         print-severity yes;         print-time yes;         };         category default { warning; };         category queries { query; }; };
```

bind还可以记录以下的日志类型,大家可以根据自己的需要来选择。

category 参数:

default: 默认分类,没有分类的日志都使用这个分类的配置.

general: 没有分类的日志都记录在此分类中.

database: 服务器内部使用存储zone和缓存数据.

security: 允许/拒绝的请求.

config: 配置文件分析和处理.

resolver: DNS解析,被dns缓存服务器进行递归查询.

xfer-in: 接收区域传输.

xfer-out: 发送区域传输.

notify: NOTIFY协议.

client: 客户端请求进程.

unmatched: 未匹配的查询?

network: 网络操作.

update: 动态更新.

update-security: 允许/拒绝更新请求.

queries: 客户端队列日志.

dispatch: 数据包传送日志.

dnssec: DNSSEC和TSIG协议处理.

lame-servers: 远端的配置错误的服务器发送的请求.

delegation-only: NXDOMAIN的结果将被强制定义到delegation-only区域

具体语法如下

```c

logging {    \[ channel channel_name {      ( file path name          \[ versions ( number | unlimited ) \]          \[ size size spec \]        | syslog syslog_facility        | stderr        | null );      \[ severity (critical | error | warning | notice |                  info | debug \[ level \] | dynamic ); \]      \[ print-category yes or no; \]      \[ print-severity yes or no; \]      \[ print-time yes or no; \]    }; \]    \[ category category_name {      channel_name ; \[ channel_name ; ... \]    }; \]    ... };
```

最后由于自己dns分为master和slave模式,所以这之间互相的传输需要特别注意安全。同时我们知道dns协议是分为udp和tcp两种,tcp是用来dns互相之间传递zone文件,而udp是用来响应用户dns查询的请求。

关于互相之间进行zone安全传递,bind本身有比较多的解决方案,分别为TSIG和DNSSEC技术。

同时除了这种技术,本身也可以对于zone传递的限制参数。

区域传输(Zone Transfer):

```c

also-notify: 定义一个向在全局的地址列表的服务器发送通知信息当刷新或者加载区域的时候. max-transfer-time-in: 当区域传入运行的时间大于设定的分钟将被中断,默认为120 minutes,最大值为28天,40320 minutes. max-transfer-idle-in: 当区域传入运行处于传输等待的状态,大于设定的时间将被中断,默认为60 minutes,最大值为28天. max-transfer-time-out: 当区域传出运行的时间大于设定的时间,将被中断,默认为120 minutes,最大为28天. max-transfer-idle-out: 当区域传出运行处于传输等待的状态,大于设定时间将被中断,默认为60 minutes,最大为28天. serial-query-rate: 从服务器定期去主服务器查询区域的serial数字是否发生改变.默认为20秒. serial-queries: BIND9忽略此参数,使用serial-query-rate代替. transfer-format: 区域的传输可以使用两种不同的格式,one-answers和many-answers,one-answers传输每个记录使用一个DNS信息,many-answers近可能把资源记录打成一个包,默认为many-answers transfer-in: 设定当前同时传入的区域的最大数目,默认为10个.区域的请求超过限制将被拒绝. transfer-out: 设定当前同时传出的区域的最大数目,默认为10个,区域的传出请求超过限制将被决绝. transfer-per-ns: 设定同时进行传输的区域从给定的name服务,默认为2. transfer-source: 指定通过哪个IPV4的源地址进行域的传送. transfer-source-v6: 指定通过哪个IPV6的源地址进行域的传送. alt-transfer-source: 指定,如果transfer-source发生故障,通过哪个IPV4的源地址进行域的传松. alt-transfer-source-v6: 同上. use-alt-transfer-source: 指定是否通过alt-transfer-source进行域的传松,默认为yes,兼容BIND8. notify-source: 指定哪个本地地址,以及本地端口被用来作为发送通知信息的源.此项受限于allow-notify. notify-source-v6: 同notify-source.