1、描述centos6系统开机启动流程; a,POST:开机加电自检,ROM,BIOS b,Boot seuquence:按次序查找各引导设备,第一个引导程序的设备即为本次启动用到的设备 c,Boot loader: 引导加载器,程序 MBR主引导记录,GRUB Boot loader 功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用户选定的内核装载到内存中特定空间,解压展开并把系统控制权移交给内核。 d,kernel:自身初始化, 探测可识别到的所有硬件设备 加载硬件驱动程序(有可能借助于ram disk加载驱动) 以只读方式挂载根文件件系统 运行用户空间的第一个应用程序/sbin/init 2、描述/etc/rc.d/sysinit脚本功能; a,设备主机 b,设置欢迎信息 c,激活udev和selinux d,挂载/etc/fstab文件中定义的文件系统 e,检测根文件并以读写方式重新挂载根文件系统 f,设置系统时钟 g,激活swap设备 h,根据/etc/sysctl.conf文件设置内核参数 i,激活lvm及software raid设备 j,加载额外设备的驱动程序 k,清理操作 3、总结文本处理工具sed及awk的用法; sed:编辑器 sed: Stream EDitor,行编辑器: 用法: sed [option]... 'script' inputfile... script: ‘地址命令’ 常用选项 -n: 不输出模式中的内容到屏幕 -e: 多点编辑 -f: /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本 -r: 支持使用扩展正则表达式 -i: 原处编辑 地址定界 (1)不给地址:对全文进行处理 (2)单地址: #:指定的行 /patern/:被此处模式所能够匹配到的每一行 (3) #,# #,+# /pat1/,/pat2/ #,/pat1/ (4)~步进 1~2 2~2 编辑命令 d: 删除 # sed '1,4d' /etc/fstab p: 显示模式空间中的内容 # sed -n '/^UUID/p' /etc/fstab a \'text' 在行后面追加文本:支持使用\n实现多行追加 # sed -n '/^UUID/p' /etc/fstab i \'text': 在行前面追加文本:支持使用\n实现多行插入 # sed '/^UUID/i \#hello sde.\nwelcom' /etc/fstab c \'text' 替换行为单行或多行文本 # sed '/^UUID/c \#hello sde.\nwelcom' /etc/fstab w /path/to/somefile:保存模式空间匹配到的行至指定文件中 #sed '/^UUID/w /tmp/fstab.txt' /etc/fstab r:/path/to/somefile:读到指定文件的文本流至械空间中匹配的行的行后 # sed '6r /etc/issue' /etc/fstab =: 为模式空间中的行打印行号 # sed '/^UUID/=' /etc/fstab !:取反条件 # sed '/^UUID/!d' /etc/fstab s///:查找替换,支持其它分隔符,s@@@,S### 替换标记: g:行内全局替换 # sed 's@^UUID@uuid@' /etc/fstab p:显示替换成功的行 # sed -n '[email protected]@&er@p' /etc/passwd w: /PATH/TO/SOMEFILE:将替换成功的结果保存到指定文件中 # sed '[email protected]@&er@' /etc/passwd 高级编辑命令 h: 把模式空间中的内容覆盖到保持空间中 H:把模式空间中的内容追加至保持空间中 g: 从保持空间取出数据覆盖到模式空间 G:从保持空间取出内容追加到模式空间 x:把模式空间中的内容与保持空间中的内容进行互换 n:读取匹配到的行的下一行到模式空间 N:追加匹配到的行的下一行到模式空间 d:删除模式空间中的行 D:删除多行模式空间中的所有行 # vim test.txt 显示偶数行 # sed -n 'n;p' test.txt 2 4 6 逆向显示文件内容 # sed '1!G;h;$!d' test.txt 6 5 4 3 2 1 显示文件后两行 # sed '$!n;$!D' /etc/fstab 取文件最后一行 # sed '$!n;$!D' /etc/fstab 在每行后面多加空白行 # sed 'G' test.txt 1 2 全部显示空白行 # sed 'g' test.txt # sed '/^$/d;G' test.txt 显示奇数行 # sed 'n;d' test.txt 逆向显示文件每一行 # sed '1!G;h;$p' test.txt 显示偶数行 # sed -n '2~2p' test.txt 显示奇数行 # sed -n '2~2p' test.txt wak wak:报告生成器,格式化文本输出 AWK: Aho, Weiberger,Kernighan ---New AWK , Nawk GNU awk, gawk gawk - pattern scanning and processing language 基本用法 : gawk [options] 'program' FILE... program: PATTERN{ACTION STATEMENT} 语句之间用分号分隔 print, printf 选项: -F:指明输入时用到的字段分隔符 -v: var=value:自定义变量 1,print print item1,item2,... 要点 : (1)逗号分隔符 # tail -3 /etc/fstab | awk '{print $2,$4}' (2)输出的各item可以字符串,也可以是数值,当前记录的字段,变量或awk的表达式 # tail -3 /etc/fstab | awk '{print "hello" $2,$4,6}' (3)如果省略item,相当于print $0; # tail -3 /etc/fstab | awk '{print }' 2,变量 内建变量 FS:input field seperator,默认为空白字符 # awk -v FS=':' '{print $1}' /etc/passwd OFS:output field seperator,默认为空白字符 # awk -v FS=':' -v OFS=':' '{print $1,$3,$7}' /etc/passwd RS:input record seperator:输入时的换行符 # awk -v RS='' '{print}' /etc/passwd ORS: output record seperator:输入时的换行符 # awk -v RS='' -v ORS='#' '{print}' /etc/passwd NF: number of field,字段数量 # awk '{print NF}' /etc/fstab {print NF}, {print $NF} NR:number of record ,行数 # awk '{print NR}' /etc/fstab FNR:各文件分别计数:行数 # awk '{print FNR}' /etc/fstab /etc/issue FILENAME: 当前文件名 # awk '{print FILENAME}' /etc/fstab /etc/issue ARGC:命令参数的个数 # awk 'BEGIN{print ARGC}' /etc/fstab /etc/issue ARGV:数组,保存的是命令行中所给定的各参数 # awk 'BEGIN{print ARGV[0]}' /etc/fstab /etc/issue 自定义变量 (1) -v var=value 变量名区分字符大小写 (2)在program中直接定义 # awk -v test='hello gawk' 'BEGIN{print test}' /etc/fstab # awk 'BEGIN{test="hello gawk";print test}' 3,printf命令 格式化输出:printf FORMAT, item1,item2,... (1) FORMAT是必须给出 (2)不会自动换行,需要显式给出换行控制符,\n (3)FORMAT中需要分别为后面的每个item指定一个格式化符号 格式符: %c:显示字符的ASCII码 %d,%i:显示十进制整数 %e,%E:科学计数法数值显示 %f:显示为浮点数 %g,%G:以科学计数法或浮点形式显示数值 %s:显示字符串 %u:无符号整数 %%:显示%自身 # awk -F: '{printf "Username:%s\n",$1}' /etc/passwd # awk -F: '{printf "Username:%s,UID:%d\n",$1,$3}' /etc/passwd 修饰符: #[.#]:第一个数字控制显示的宽度,第二个#表示小数点后的精度 %3,1f # awk -F: '{printf "Username:%15s,UID:%d\n",$1,$3}' /etc/passwd -:左对齐 # awk -F: '{printf "Username:%-15s,UID:%d\n",$1,$3}' /etc/passwd +:显示数值的符号 4,操作符 算数操作符 x+y ,x-y ,x*y ,x/y ,x^y, x%y, -x +x:转换为数值 字符串操作符:没有符号的操作符,字符串连接 赋值操作符 =, +=, -=, *=, /=, %=,^=, ++, --, 比较操作符 >, >=, < , <=, !=, == 模式匹配符: ~:是否匹配 !~:是否不匹配 逻辑操作符 && 与 || 或 ! 非 函数调用: function_name(argu1,argu2,...) 条件表达式 selector?if-ture-exprssion: if-false-expression # awk -F: '{$3>=1000?usertype="Common user":usertype="Sysadmin or Sysuser";printf "%15s:%-s\n",$1,usertype}' /etc/passwd 5, PATTERN (1)empty:空模式,匹配每一行 (2)/regular expression/:仅处理能够被此处的模式匹配到的行: #awk '/^UUID/{print $1}' /etc/fstab # awk '!/^UUID/{print $1}' /etc/fstab (3)relational expression:关系表达式:结果有“真”“假”:结果为“真”才会被处理 真:结果为非0值,非空字符串 # awk -F: '$3>=1000{print $1,$3}' /etc/passwd # awk -F: '$3<1000{print $1,$3}' /etc/passwd # awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/passwd (4)line ranges:行范围 startlin,endline /pat1/,/pat2/ 注意:不支持直接给出数字的格式 # awk -F: '(NR>=2&&NR<=10){print $1}' /etc/passwd (5)BIGIN/END模式 BIGIN{}:仅在开始处理文件中的文本之前执行一次 # awk -F: 'BEGIN{print" username uid \n------------"}{print $1,$3}' /etc/passwd END{}: 仅在文本处理完成之后执行一次 # awk -F: 'BEGIN{print" username uid \n------------"}{print $1,$3}END{print "++++++++++++++++++\n end "}' /etc/passwd # awk -F: '{print" username uid \n------------";print $1,$3}' /etc/passwd 6,常用的action (1) Expressions (2)Control statements: if while... (3)Compound statements:组合语句 (4)input statements (5)output statements 7,控制语句 if (condition) {statments} if(condition) {statments} else {statments} while (condition) {statments} do {statments} while (condition) for(expr1,expr2,expr3,) {statments} continue delete array[index] delete array exit { statments } 7.1 if-else 语法: if (condition) {statments} [else statement] # awk -F: '{if($3>=1000)print $1,$3}' /etc/passwd else 语句用法 # awk -F: '{if($3>=1000) {printf "Common user: %s\n",$1} else {printf "root or Sysuser: %s\n",$1}}' /etc/passwd # awk -F: '{if($NF=="/bin/bash") print $1}' /etc/passwd # awk '{if(NF>5) print $0}' /etc/fstab # df -h | awk -F[%] '/^\/dev/{print $1}' | awk '{if($NF>=20) print $1}' 使用场景: 对awk取得的整行或某个字段做条件判断 7.2 while 循环 语法:while (condition) {statments} 条件“真”,进入循环,条件为“假” 退出循环 使用场景:对一行内多个字段逐一类似处理时使用:对数组中的各元素逐一处理时使用 # awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {print $i,length($i);i++}}' /etc/grub2.cfg # awk '/^[[:space:]]*linux16/{i=1;while(i<=NF) {if(length($i)>=7) {print $i,length($i)};i++}}' /etc/grub2.cfg 73 do-while循环 语法:do statement while (condition) 意义:到少执行一次循环体 7.4 for 循环 语法: for(expr1,expr2,expr3,) {statments} for(variable assignment; condition;iteration process) {for-body} # awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++) {print $i,length($i)}}' /etc/grub2.cfg 特殊用法 能够遍历数组中的元素 语法: for (var in array) {for-body} 7.5 swith 语句 语法:switch(expression) {case VALUE1 or /REGEXP/: statement; case VALUE2 or /REGEXP2/:statement;... default: statement} 7.6 break 和continue break [n] continue 7.7 next 提前结束对本行的处理而直接进入下一行: # awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd 8 array 数组 关联数组:array [index-expression] index-expression (1)可使用任意字符串,字符串要使用双引号 (2)如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空串” 若要判断数组中是否存在某元素,要wget"index in array"格式进行 weekday[mon]="Monday" # awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}' 若要遍历数组中的每个元素,要使用for循环 for(var in array) {for-body} # awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";for(i in weekdays) {print weekdays[i]}}' 注意:var会遍历array的每个索引 state["LISTEN"]++ state["ESTABLISHED"]++ # netstat -tan | awk '/^tcp\>/{state[$NF]++}END{for(i in state) {print i,state[i]}}' # awk '{ip[$1]++}END{for(i in ip) {print i,ip[i]}}' /var/log/httpd/access_log 练习1:统计/etc/fstab文件中每个文件系统类型出现 的次数 # awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab 练习2:统计指定文件中每个单词出现的次数 # awk '{for(i=1;i<=NF;i++){count[$i]++}}END{for(i in count) {print i,count[i]}}' /etc/fstab 9,函数 9.1 内置函数 rand():返回0和1之间一个随机数 字符串处理: length([s]):返回指定字条串的长度 sub(r,s,[t]):以r表示的模式来查找t所表示的字条串中的匹配的内容,并将其第一次出现替换为s所表示的内容 gsub(r,s,[t]):以r表示的模式来查找t所表示的字条串中的匹配的内容,并将其所有出现均替换为s所表示的内容 split(r,s,[t]):以r为分隔符切割字符s,并将切割后的结果保存到a所表示的数组中 # netstat -tan | awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for (i in count) {print i,count[i]}}' 4、写一个脚本,生成10个随机数,并按从小到大进行排序(要求至少使用2中方法) #!/bin/bash declare -a rand declare -i max=0 for i in {0..9}; do rand[$i]=$RANDOM [ ${rand[$i]} -gt $max ] && max=${rand[$i]} done echo "Max: $max" 5、在每周二的凌晨1点5分执行脚本/data/get_username.sh,并将脚本的输出至/tmp/get_username.log日志文件中; #crontab -e 5 1 * * 2 /tmp/zuoye/get_username.sh >> /tmp/zuoye/get_username.log 6、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型; #!/bin/bashif ls $1 &> /dev/null ;thenstat $1|head -2else mkdir -p $1fi 7、写一个脚本,打印9X9乘法表; 1, #!/bin/bash declare -i j=1 declare -i i=1 until [ $j -gt 9 ]; do until [ $i -gt $j ]; do echo -n -e "${i}X${j}=$[$i*$j]\t" let i++ done echo let i=1 let j++ done 2, #!/bin/bash for((j=1;j<=9;j++)); do for((i=1;i<=j;i++))do echo -e -n "${i}X${j}=$[$i*$j]\t" done echo done 8、描述dns的工作流程,以及完整搭建一套dns主从服务器,相关域名和ip可自行设定。 DNS Domain Name Service 协议 (c/s, 53/udp, 53/tcp):应用层协议: BIND: Bekerley Internat Name Domain, ISC (www.isc.org) TCP :面向连接的协议 UDP:User Datagram Protocol 无连接协议 本地名称解析配置文件: hosts /etc/hosts %WINDOWS%system32/drives/etc/hosts Top Level Domain: tld com,edu,mil, gov, net, org, int 三类:组织域,国定域(,cn, .iq, .hk, .tw) 反向域 DNS查询类型: 递归查询 迭代查询 名称服务器:域内负责解析本域内的名称的主机 根服务器:13组服务器 解析类型 Name--> IP IP--->Name 注意:正反向解析是两个不同的名称空间,是两棵不同的 DNS服务器类型 主DNS服务器 辅助DNS服务器 缓存DNS服务器 转发器 主DNS服务器:维护所负责解析的域内解析库的服务器:解析库由管理员维护 从DNS服务器:从主DNS服务器或其它的从DNS服务那里“复制”(区域传递)一份解析 序列号:解析库的版本号 ,前提:主服务器解析库内容发生变化,其序列递增 刷新时间间隔 : 从服务器从主服务器请求同步解析的时间间隔 重试时长间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔 过期时长: 从服务器使终联系不到主服务器时,多久后放弃从服务器角度,停止提供服务 "通知"机制 区域传递: 全量传送:传送整个解析库 增量传递:传送解析库变化的那部分内容 DNS: Domain: 正向:FQDN -->IP 反射:IP --> FQDN 各需要一个解析库来负责本地域名的正向和反向解析 正向区域 反向区域 FQDN: Full Qulified Domain Name:完全合格域名 一次完整的查询请求经过的流程 Client --> hosts文件 --> DNS Server Local Cache -->DNS Server(recursion) --> Server Cache --> Iteration(迭代) --> 解析答案 肯定答案: 否定答案:请求的条目不存在等原因导致无法返回结果 权威答案 非权威答案 资源记录:Resource Record,RR 有记录类型:A,PTR, SOA, NS, CNAME, MX AAAA SOA:Start Of Authority: 起始授权记录,一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录 A:internet Address: 作用: FQDN--IP AAAA: FQDN--IPV6 PTR:PoinTeR:指针 IP -- FQDN NS:Name Server: 专用于标明当前区域的DNS服务器 CNAME:Canonical Name:别名记录 MX:Mail eXchanger: 邮件交换器 资源记录定义的格式: 语法: name [TTL] IN rr_type value 注意: (1)TTL可从全局继承 (2)@可用于引用 当前区域的名字 (3)同一个名字可以通过多条记录定义多个不同的值,些时DNS服务器会以轮询方式响应 (4)同一个值 也可以有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义:此仅表示通过多个不同的名字可以找到同一个主机 SOA : name: 当前区域的名字,例如“magedu.com.” value: 有多部分组成 (1)当前区域的主DNS服务器的FQDN, 也可以使用当前区域的名字:@ (2)录前管理员的邮箱地址:介地址中不能使用@符号,一般用.替换,例如:linux.magedu.com (3)(主从服务协调属性的定义以及否定的答案的统一的TTL) 例如: magedu.com. 86400 IN SOA ns.magedu.com. nsadmin.magedu.com. ( 2016011901 ;序列号 2H ;刷新时间 10M ;重试时间 1W ;过期时间 1D ;否定答案的TTL值 ) NS: name: 当前区域的名字 value:当前区域的某DNS服务器的名字,例如:ms.magedu.com.: 注意: 一个区域可以有多个NS记录 例如: magedu.com. IN NS ns1.magedu.com. magedu.com. IN NS ns2.magedu.com. 注意: (1)相邻的两个资源记录的name相同时,后续的可省略 (2) 对NS记录而言,任何一个ns记录后面的服务器名字,都 应该在后续有一个A记录 MX: name: 当前区域的名字 value:当前区域的某邮件服务器(smtp服务器)的主机名 一个区域内,MX记录可有多个,但每个记录的value之前应该有一个数字(0-99),表示 此服务器的优先级,数据越小�晗燃对礁� 例如: magedu.com. IN MX 10 mx1.magedu.com. IN MX 10 mx2.magedu.com. 注意:对MX记录而言,任何一个MX记录后面的服务器名字,都 应该在后续有一个A记录 A: name: 某主机的FQDN,例如: www.magedu.com. value:主机名对应主机的IP地址 例如: www.magedu.com. IN A 1.1.1.1 www.magedu.com. IN A 1.1.1.2 mx1.magedu.com. IN A 1.1.1.3 mx2.magedu.com. IN A 1.1.1.3 注意: (1)*.magedu.com IN A 1.1.1.4 magedu.com IN A 1.1.1.4 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址 AAAA : name: FQDN value: IPV6 PTR: name: IP,有特定格式:把IP地址反过来写,1.1.1.2要写作2.1.1.1,而有特定后缀: in-addr.arpa. 所以完整写法为:2.1.1.1.in-addr.arpa value: FQDN 例如: 2.1.1.1.in-addr.arpa IN PTR www.magedu.com 简写成 2 IN PTR www.magedu.com. 注意: 网络地址及后缀可省略,主机地址依然需要 反着写 CNAME: name: 别名的 FQDN value: 正式名字名的 FQDN 例如: web.magedu.com. IN CNAME www.magedu.com. 子域授权:每个域的名称服务器,都是这通过其上级名称服务器在解析库进行授权 类似根域授权tld: .com. IN NS ns1.com. .com. IN NS ns2.com. ns1.com. IN A 2.2.2.1 ns2.com. IN A 2.2.2.2 magedu.com 在.com的名称服务器上,解析库中添加资源记录 magedu.com. IN NS ns1.magedu.com. magedu.com. IN NS ns2.magedu.com. magedu.com. IN NS ns3.magedu.com. ns1.magedu.com. IN A 3.3.3.1 ns2.magedu.com. IN A 3.3.3.2 ns3.magedu.com. IN A 3.3.3.3 glue record: 粘合记录 域名注册 代理商: 万网, 新网;godaddy 注册完成以后,想自已用专用服务来解析? (1)管理后台,把NS记录指向的服务器名称,和A记录指向的服务器地址 BIND的安装配置 dns服务,程序包名bind,程序名:named 程序包 bind bind-libs bind-utils bind-chroot: /var/named/chroot bind: 服务脚本: /etc/rc.d/init.d/named 主配置文件: /etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key 解析库文件: /var/named/zone_name.zone 注意:(1)一台物理服务器可同时为多个区域提供解析 (2)必须要有根区域文件 named.ca (3)应该有两个(如果包括IPV6的,应该更多)实现localhost和本地回环地址的解析库 rndc: remote name domain controller: 默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程,提供辅助性管理功能 953/tcp 端口 主配置文件 : 全局配置:options{} 日志子系统配置:logging{} 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone zone"ZONE_NAME" IN {} 注意:任何服务程序如果想期望其能够通过网络被其他主机访问,至少应该在一个能与外部主机通信的IP地址上 # cp -v /etc/named.conf{,.bak} 缓存名称服务器的配置: 监听外部地址就行 #vim /etc/namec.conf options { listen-on port 53 { 192.168.1.8; 127.0.0.1; }; /* listen-on-v6 port 53 { ::1; }; */ allow-query { any; }; # named-checkconf 检查语法错误 dnssec: 建议关闭dnssec #vim /etc/namec.conf /* dnssec-enable yes; dnssec-validation yes; Path to ISC DLV key bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; */ 主DNS名称服务器: (1)在主配置文件中定义区域 zone "zone_name" IN { type;{master;slave; hint;forward} file "zone_name.zone"; }; (2) 定义区域解析库文件 出现的内容: 宏定义: 资源记录定义: # vim /var/named/magedu.com.zone $TTL 1D $ORIGIN magedu.com. @ IN SOA ns1.magedu.com. admin.magedu.com ( 2016012001 1H 5M 7D 1D ) IN NS ns1 IN NS ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 192.168.1.8 ns2 IN A 192.168.1.9 mx1 IN A 192.168.1.10 mx2 IN A 192.168.1.11 www IN A 192.168.1.12 # named-checkzone "magedu.com" /var/named/magedu.com.zone 检查语法错误 # chown :named magedu.com.zone # systemctl start named.service # rndc status 测试命令: dig的使用 dig [ -t type ] name [@SERVER] [ query options ] dig用于测试dns系统,因此,不会查询host文件 # dig -t A www.magedu.com @192.168.1.8 查询选项 +[no] trace: 跟踪解析过程 +[no]recures: 进行递归解析 测试反向解析 dig -x IP @server 模拟区域传送 dig -t axfr ZONE_NAME @SERVER # dig -t axfr magedu.com @192.168.1.8 host命令 host [-t type] name [server] nslookup命令: nslookup [-option] [name | -] [server] 交互式模式: nslookup> server IP:指明使用哪个DNS server进行查询 set q=RR_TYPE:指明查询的资源记录类型 NAME:要查询的名称 反向区域 区域名称:网络地址反写:in-addr.arpa. 192.168.1.-->1.168.192.in-addr.arpa. (1)定义区域 zone "ZONE_NAME" IN { type {master |slave | forward}; file "网络地址".zone }; (2)区域解析库文件 注意:不需要MX和A,以及AAAA记录,以PTR记录为主 # vim /etc/named.rfc1912.zones zone "1.168.192.in-addr.arpa" IN { type master; file "192.168.1.zone"; }; #vim -o magedu.com.zone 192.168.1.zone $TTL 1D $ORIGIN 1.168.192.IN-ADDR.ARPA. @ IN SOA ns1.magedu.com. admin.magedu.com. ( 2016012101 1H 5M 7D 1D ) IN NS ns1.magedu.com. IN NS ns2.magedu.com. 8 IN PTR ns1.magedu.com. 12 IN PTR www.magedu.com. 11 IN PTR mx1.magedu.com. # chmod 640 192.168.1.zone # chown :named 192.168.1.zone # named-checkzone "1.168.192.in-addr.arpa" 192.168.1.zone # named-checkconf # systemctl reload named.service # rndc status # dig -t axfr magedu.com @192.168.1.8 检测 主从复制 1,应该为一台独立的名称服务器 2,主服务器的区域解析库文件中必须有一条NS记录是指向从服务器: 3,从服务器只需要定义区域,无须提供解析库文件,解析库文件应该放置于/var/named/slaves/目录中 4,主服务器得允许服务器作区域传送 5,主从服务器时间应该同步,可通过ntp进行 6,bindr程序的版本应该保持一致,否则应该从高,主低 定义从区域的方法 zone "zone_named" IN { type slave; mastes { master_ip; }; file "slaves/zone_named.zone"; }; 服务器地址:192.168.1.9 # yum install bind -y # vim /etc/named.conf options { listen-on port 53 { 192.168.1.9; 127.0.0.1; }; /* listen-on-v6 port 53 { ::1; }; */ directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; // pid-file "/run/named/named.pid"; // session-keyfile "/run/named/session.key"; }; 指明从服务器 修改下列文件 # vim /etc/named.rfc1912.zones zone "magedu.com" IN { type slave; masters { 192.168.1.8; }; file "slaves/magedu.com.zone"; } rndc: rndc --> rndc (953/tcp) rndc COMMAND COMMAND reload:重载主配置文件和区域解析库文件 reload zone: 重载区域解析库文件 retransfer zone:手动启动区域传送过程,面不管序列号是否增长 notify zone:重新对区域传送发通知 reconfig:重载主配置文件 querylog:开启或关闭查询日志 trace:递增debug级别 trace LEVEL:指定使用的级别 DNS and BIND 子域授权: 分布式数据库 正向解析区域子域方法: 定义一个子域 ops.magedu.com. IN NS ns1.ops.magedu.com. ops.magedu.com. IN NS ns2.ops.magedu.com. ns1.ops.magedu.com. IN NS 1.1.1.1 ns2.ops.magedu.com. IN NS 1.1.1.2 fin.magedu.com. IN NS ns1.fin.magedu.com. fin.magedu.com. IN NS ns2.fin.magedu.com. ns1.fin.magedu.com. IN NS 2.1.1.1 ns2.fin.magedu.com. IN NS 2.1.1.2 定义转发服务器: 注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予转发 (1)全部转发:凡是非本机所负责解析的区域请求,统统转发给指定的服务器 options { forward {first|only} forwarders } (2)区域转发,仅转发对特定区域的请求至某服务器 zone "zone_name" IN { type forward; forward {first|only} forwarders } 注意:关闭dnssec功能 dnssec-enable no; dnssec-validation no;