DNS服务
DNS:Domain Name Service //协议
实现:BIND(Berkeley Internet Name Domain)
监听端口:
UDP:53
TCP:53
名称解析:将一种格式的信息转化为另外一种格式,以某关键字为标准查找某一数据库的过程
passwd <--> nsswitch转换
login:nsswitch为login提供服务
nsswitch配置文件在/etc/nsswitch
hosts:存放的为主机与ip、别名
由于主机是在太多,所以将数据库和服务器进行分片管理。 分布式数据库:将数据库切割,放在不同的服务器上。实际上还需要一个类似于"引路人"一般的放置着引导向各个分布式数据库的数据库的服务器。当外部需要进行DNS域名转换时,便告诉他需要到哪个数据库上进行名称解析,再找到那个数据库。实际上每个数据库都要通过这个服务器进行登记备案。否则将不承认,也无法找到你自己所建立的。实际上,由于数量过大,一些分布式数据库需要再进行分布。
其中的结构其实可以类比成Linux上的根文件系统,每个人都要通过根为入口来进行访问文件和目录,底下的目录一层套着一层,最终才能找到自己需要的文件。
根域(.)-->一级域(ICCNA)-->二级域(组织域) 实际上我们平时输入的域名都是自下而上进行输入的如(www.baidu.com)www是最小的域,由此自下而上。
namespace:名称空间
一级域:
组织域:.com,.org,.mil,.gov,.edu,
国家域:.cn,.hk,.tw,.jp,.ir(伊朗),.iq(伊拉克),.us,.uk
反向域:.in-addr.arpa
另外任何想要访问其他主机信息的,都需要以跟作为入口去寻找,除非是在同一个服务器管辖下的域名,只需要找自己的服务器就行。但是确又不会进行逐层的递归解析,否则根的工作量太大。每一次访问的时候,都只会告诉其一个下一次要寻找的地址让他自行去寻找。如找到根,根返回消息说让他去找.com,于是.com再说你去找baidu 直到找到负责管辖的 再给以正确的IP地址信息。
递归:逐层解析
迭代:DNS才会迭代
根拒绝回答递归问题 所谓的递归和迭代在这边通俗一点讲,就是递归只需发出一次请求就能够收到消息。而迭代则是发出好几次请求。
客户端指向的DNS服务器,一定是允许给本地主机做递归的
数据库每一个条叫一个资源记录(Resource Record),资源记录有类型 ,用于表示资源的功能
SOA:Start Of Authority,起始授权
NS:Name Server,域名服务器
MX:mail eXchanger:邮件交换器
A:Address,(FQDN-->IP)
PTR: PoiTeR,(IP-->FQDN)
AAAA:Address,FQDN-->IPv6
CNAME:Canonical Name,正式名称(别名记录)
DNS:FQDN --> IP
正反向解析技术不同,因此不应该存放于同一个数据库文件中进行
域:Domain,逻辑概念
区域:zone,物理概念
DNS服务器的类型
主DNS服务器
辅助DNS服务器 辅助服务器不能够自行的血区域数据文件,只能够从主服务器上读取。该过程称为区域传送
缓存名称服务器
转发器
DNS的数据库文件(区域数据文件,区域自身有名字):文本文件,只能包含资源记录或宏定义,每行一个
资源记录的格式:
name [ttl(缓存时间)] IN 资源记录类型(RRtype) Value
例子:
www 600(单位s) IN A 1.2.3.4
www.magedu.com. 600 IN A 1.2.3.4
SOA:
name:只能是区域名称,通常可以简写为@,例如:magedu.com.
value:有n个数值,最主要的是主DNS服务器的FQDN,点不可省略
注意:SOA必须是区域数据库文件第一条记录
例子:
@ 600 IN SOA na.magedu.com. 管理员邮箱(dnsadmin.magedu.com.)(
序列号(serial number) ;注释内容,十进制数据,不能超过10位,通常使用日期,例如2014031001 用以让辅助服务器知道数据发生了改变的,主服务器上每次数据改变,序列号都会发生改变
刷新时间(refresh time) ;即每隔多久到主服务器检查一次
重试时间(retry time) ;应该小于refresh time
过期时间(expire time)
netgative answer ttl ;否定答案的ttl
)
NS:可以有多条
name:区域名称,通常可以简写为@
value:DNS服务器的FQDN(可以使用相对名称)
例子:
@ 600 IN NS na
A:只能定义在正向区域数据文件中
name:FQDN(可以使用相对名称)
value:IP
例子:
www 600(单位s) IN A 1.2.3.4
www 600(单位s) IN A 1.2.3.5
可做轮询
www 600(单位s) IN A 1.2.3.4
ftp 600(单位s) IN A 1.2.3.4
但凡以FQDN做为其值的记录,应该给这个值做一条A记录
AAAA:
MX:可以有多个
name:区域名称,用于标识smtp服务器
value:包含优先级和FQDN
优先级:0-99,数字越小,级别越高,
例子:
@ 600 IN MX 10 mail
@ 600 IN MX 20 mail2 先找优先级高的,实在太过繁忙,则找第二个。并没有在轮换工作
PTR:IP --> FQDN,只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in.addr.arpa.后缀组成
name:IP,逆向的主机地址,例如172.16.100.7的name为7.100,完全格式为7.100.16.172.in-addr-arpa.
value:FQDN
例子:
4.3.2. 600 IN PTR www.magedu.com.
区域传送:
辅助DNS服务器从主DNS服务器或其他的辅助DNS服务器请求数据传输过程
完全区域传送:传送区域的所有数据,AXFR
增量区域传送:传送区域中改变的数据部分,IXFR
辅助服务器按时间段去跟主服务器进行请求数据的跟新,如果多次主服务器未能响应请求,则认为主服务器瘫痪,不再与主服务器进行通信(一般相关规定定义在SOA中了)。另外主服务器如果有数据跟新,也会立刻通知辅助服务器数据的跟新,以实现数据的同步
BIND:组织维护者isc(www.isc.org) DHCP
4:功能简单,安全
9:
协议DNS,实现BIND,进程named
chroot 为安全提供的机制 chroot假根,让其以这个作为根,保证安全性
主配置文件:定义区域 /etc/named.conf
至少有三个区域:
根、
locahost、
127.0.0.1
区域数据文件:/var/named
named
用户:named
组:named
先由主配置文件声明各种区域,然后再到/var/named 文件目录下读取相关的区域数据文件
主配置文件:
options{
//全局选项
}
zone "zone name" {
//定于区域
}
logging{
//日志文件
}
include:加载别的文件
自定义
optins{
directory "/var/named";
};
zone "." IN{
type{hint(根)|master(主)|slave(从)|forward(转发)}
file "named.ca"
}
例子如果你申请到了域名test.com
那么你可以配置
zone "test.com." IN{
type{master(主)}
file "test.com.zone"
}
再在/var/named目录下创建test.com.zone文件 文件内容
$TTL 600
@ IN SOA dns.test.com. admin test.com.(
.
.
)
@ IN NS dns (这里用了SOA上定义的相对名称)
@ IN MX 10 mail
dns IN A 192.168.48.128
mail IN A 192.168.48.128
www IN A 192.168.48.128
pop IN CNAME mail
ftp IN CNAME www
之后改个属组属主和权限
name-checkconf 检查主配置文件
named -u named
name-checkzone "区域文件" 配置文件
定义监听的地址
recursion 是否允许递归查询
dig 命令
dig [-t type] [-x addr] name @DNS服务器
+[no]trace [不]适用迭代
+[no]tcp 是否使用tcp
+[no]recurse:是否使用递归
host
host[-t type] {name} [server]
nslookup
nslookup>
server DNS_SERVER_IP
set q=TYPE
{name}
反向解析区域数据库文件:区域名称以逆向的网络地址,并以.in-addr.arpa为后缀
第一条必须SOA
应该具有NS记录,但不能出现MX和A记录
较常见的微PTR记录
名称为逆向的主机名
$TTL 600
@ IN SOA dns.test.com. admin test.com.(
.
.
)
@ IN NS dns (这里用了SOA上定义的相对名称)
@ IN MX 10 mail
IN NS dns.test.com
7 IN PTR dns.test.com
1 IN PTR www.test.com
区域传送:
用dig模拟完全区域传送
dig -t axfr 区域名称 @server
主从同步:
/etc/resolv.conf
主从:
主:bind版本可以低于从的
主从可以不再同一网段
向区域中添加从服务器的关键两步
在上级获得授权
在区域数据文件中为从服务器添加一条NS记录和对应的A或PTR记录,另外SOA里的序列号也要加个1
配置从服务器的步骤
zone"test.com" IN {
type slave;
masters {192.168.48.128; };
file "slaves/test.com.zone" ; 注意这里辅助服务器的区域数据文件需要放在/var/named/slaves下
};
区域传送安全控制
allow-transfer{127.0.0.1;127.16.100.1}
allow-transfer{none;}
rndc:Remote Name Domain Controller
远程管理BIND的工具
rndc:密钥
rndc:持有一半密钥,保存于rndc的配置文件中
BIND:持有一般密钥,保存在主配置文件中
rndc的配置文件/etc/rndc.conf 现在好像已经没有了
生成密钥 rndc-confgen 生产的密钥文件中的一半用于BIND的文本复制到BIND的主配置文件中将注释去掉 便可以使用rndc
rndc
reload
reload zone
reconfig:重读配置文件并加载新增的区域
querylog:关闭或开启查询日志
stop 关闭服务
flush 清空服务器的缓存
flushname name:只清空指定名称相关的缓存
trace:打开debug,调试模式,debug有级别的概念,每执行一次提升一个等级
trace LEVEL:指定debug的级别
如果rndc无法正常工作,可尝试使用rndc-confgen生成/etc/rndc。conf配置文件,并将配置文件中的后半部分复制到BIND的主配置文件中按指示启用即可
BIND子域授权的实现:
在父域的配置文件中添加如下项:
授权的子区域名称
子区域的名称服务器
子区域的名称服务器的IP地址
例子:
tech.test.com IN NS dns.tech.test.com
dns.tech.test.com IN A 192.168.48.160
tech.test.com IN NS ns2.tech.test.com
ns2.tech.test.com IN A 192.168.48.161 另外子域服务器需要副服务器的话,也需要再主服务器上进行标明
接着子域服务器,需要同主服务器那样配置属于自己的DNS服务器
子域服务器与主副服务器最大的配置差别就是,子域服务器的域名和父服务器的域名是不同的,而主副服务器的域名是相同的
配置区域转发:转发域
解析某本机不负责的区域内的名称时不转发给根,而是转给指定的主机:
zone "ZONE NAME" IN{
type forward;
forwarders { DNS_SERVER; };
forward only(仅转发)|first(先转发在找根)
}
配置转发的方式
转发非本机负责解析的所有区域
options{
forward only|frist
forwarders{ ip; }
}
转发某特定区域
zone"特定区域" IN{
type forward;
forwarders{ ip; }
forward only|frist
}
转发必须对方服务器支持对本服务器的递归
安全控制选项:
allow-transfer{};通常都需要启用,从服务器
allow-query{};此项仅用于服务器是缓存名称服务器时,只开放查询功能给本地客户端
allow-recursion{可以使用网段};允许递归的白名单
allow-update{ none; }:允许动态更新数据文件的主机白名单
ACL:BIND支持使用访问控制列表
acl ACL_NAME{
172.16.0.0/16
192.168.0.0/24
127.0.0.0/8
}
访问控制列表只有定义后才能使用,通常acl要定义在named.conf的最上方
BIND有四个内置的acl
any:任何主机
none:无一主机
local:本机
localnet:本机所在的网络
DNS编译安装,view视图,LINUX完全定制内核
3月11
view 视图,逻辑的DNS服务器,即能够让不同网络(如电信和网通)访问同一个域名时,使其指向不同的主机IP实现访问速度的加快。能够实现让一个view实现多次
acl telecom{
1.2.0.0/16
4.5.8.0
}
acl unicom{
6.4.0.0/16
4.5.3.0
}
view view_name {
match-clients{ telecom; }
zone"magelinux.com" IN{
type master;
file "magelinux.com.telcom";
}
}
view view_name {
match-clients{ unicom; }
zone"magelinux.com" IN{
type master;
file "magelinux.com.unicom";
}
}
view view_name {
match-clients{ any; }
zone"magelinux.com" IN{
type master;
file "magelinux.com.unicom";
}
}
只要写入view,所有的都应该写在view中 包括将/etc/named.conf下的zone "."根也放在view中
自上而下匹配
/dev/random:自动生成
熵池
/dev/udandom:软件生成
bind dlz
rndc reeconfig
源码安装named
thrads 线程
epoll 时间库
--diabled-chroot
前提:配置好开发环境,安装包组
1.下载源代码。编译安装
tar xf bind-9.9.5.tar.gz
cd bind-9.9.5
./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/--enable-threads --enable-epoll --disabled--chroot
make && make install
2配置主配置文件
3.创建区域数据文件
3.1 name.ca
dig -t NS @ >/var/named/named.ca
3.2 name.localhost
3.3 named.loopback
4创建用户,并测试启动
groupadd -g 53 -r named
useradd -g named-r named
chown root:named /etc/named/* /var/named/*
chmod 640 /etc/named/named.conf /var/named/*
vim /etc/profile.d/nmaed.sh
export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH'
named -u named -c /etc/named/named.conf
5、rndc
rndc -confgen -r /dev/
6、准备启动脚本DNS 编译安装 02 23分到53分
7、性能测试
banckmark
queryperf
dnstop
<DNS and BIND>
bash编程之变量
1、bash的内置变量:
PATH PS1 HOSTNAME UID HISTFILE HISTEILESIZE HISTCONTROL
$BASH:bash二进制程序文件的路径
$BASH_SUBSHELL:子shell的层次
$BASH_VERSION
$EDITOR:默认编辑器
$EUID:有效的用户ID
$UID:当前用户的ID号
$FUNCNAME:当前函数的名称
$GROUPS:当前用户显示的组
$HOME:当前用户的家目录
$HOSTTYPE:主机架构类型,用来识别系统硬件
$MACHTYPE:平台类型,系统平台依赖的编译平台
$OSTYPE:OS系统类型
$IFS:输入数据时的字段分隔符,默认是空白符(空格、制表符、换行符)
$OLDPWD:上次使用的目录
$PWD:当前目录
$PPID:父进程
$PS1:主提示符
$PS2:第二提示符,主要用于补充完全命令输入时的提示符
$PS3:第三提示符,用于select命令中
$PS4:第四提示符,当使用-X选项调用脚本时,显示的提示符,默认为+号
$SECONDS:当前脚本已经运行的时长
$SHLVL:shell的级别。bash别嵌入的深度
2、特殊变量:
$0:脚本名称自身
$1,$2。。。。:位置参数
$#:命令行参数个数
$*:所有的参数,被当作一个字符串
$@:所有的参数,每个参数都是一个独立的字符串
$-:传递给脚本的标记
$!:运行于后台的最后一个作业的PID
$_:上一条命令的最后一个参数的值
$?:上一条命令状态的返回值
$$:脚本自身的PID
操作变量:
${#var} :返回变量中字符串的长度
${var}:变量引用
${var:-default}:如果var没有声明或者为空,则返回default字串,否则返回var自身的值
${var:+default}:如果var没有声明或者为空,则返回空字串,否则返回default的值
${var:=default}:如果var没有声明或者为空,则返回default字串,并且将default赋值给var,否则返回var自身的值
${var:?default}:如果var没有声明或者为空,则以default为错误信息返回,否则
zb 返回var自身的值
字串消除
${var#*word}:查找var中自左而右第一个被word匹配到的串,并将此串及向左的所有内容都删除
${var#*word}:查找var中自左而右最后一次被word匹配到的串,并将此串及向左的所有内容都删除
${var%word*}:查找var中自右而左第一个被word匹配到的串,并将此串及向右的所有内容都删除
${var%%word*}:查找var中自右而左最后一次被word匹配到的串,并将此串及向右的所有内容都删除
取字串:
${var:pos}:偏移pos个字符,取余下的字串
name=jerry,${name:2}结果为rry
${var:pos:num}偏移pos个字符,取num个字符长度的字串
name='hello world' ${name:2:5}结果为llo w
字串替换
${var/Pattern/Replaceplacement} :以Pattern为模式匹配var中的字串,将第一次匹配到的替换为Replaceplacement
${var// Pattern/Replaceplacement} :以Pattern为模式匹配var中的字串,将全部匹配到的替换为Replaceplacement6
声明变量:
declare
-i:整形
-a:数值
-x:环境变量
-r:只读变量,不能撤销,不能修改,相当于readonly
-f:声明函数
OpenSSH:
ssh OpenSSH
安装配置dropbear
1.编译安装
tar
cd
./configure
make PROGRMS="dropbear dbclient dropberkey scp"
make PROGRMS="dropbear dbclient dropberkey scp" install
2.脚本
3配置文件位置/etc/sysconfig/dropbear
keysize=2048
port=22022
4后配置
chmod +x /etc/rc.d/init.d/dropbear
chkconfig -add dropbear
定制Linux内核
tar -xf -C /usr/src
cd /usr/src/linux
cp /boot/config-VERSION /usr/src/linux/.config 自己选的可能会导致驱动的缺少,所以复制一份模板,再执行make menuconfig来增删改查
make menuconfig
make
make modules_install
make install
make clean
make mrproper
make distclean
单内核:核心+ko模块
/lib/modules/VERSION
make allnoconfig 自定义一个最小功能的内核,能够让系统正常运行。此时就需要完全配置
第一步 给一个将要被新主机识别的装有内核文件的磁盘不需要太大。
fdisk /dev/sdb 创建新分区,并添加2个分区 sdb1 50M sdb2 512M
mke2fs -t ext4 /dev/sdb1 /dev/sdb2 分区格式化
mkdir /mnt/{boot,sysroot}
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot 创建两个虚拟的根目录,将磁盘挂在到上面
grub-install -root-directory=/mnt /dev/sdb 安装grub
第二步 下载一个内核版本 假设叫linux3.1
tar xf linux3.1.tar.xz -C /usr/src 解压内核文件
cd /usr/src
ln -sv linux.3 linux 软连接一下(猜测应该是便于被系统识别)
make allnoconfig 将.config文件中的绝大部分可以省略的内核功能给关闭
make menuconfig 定制内核 这边省略 较复杂,可以看视频如何定制的,10-17分
make bzI(大写的i)mage 这个只编译压缩格式的内核核心,并不编译内核模块
cp arch/x86/boot/bzImage /mnt/boot/
vim /mnt/boot/grub/grub.conf 此处省略
default=0
timeout=3
title Customzed Linux
root (hd0,0)
kernel /bzImage ro root=/dev/sda2 init=/bin/bash
为什么要将bash 软连接成 sh ,难道识别的时候是识别sh吗?
PC Server CPU + men + i/o
make bzImage 只编译核心不编译模块