码迷,mamicode.com
首页 > 其他好文 > 详细

dhcp、tftp及pxe简介

时间:2018-12-23 00:25:18      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:定向   efault   exec   rem   释放   edit   art   central   其他   

DHCP:

全称:Dynamic Host Configuration Protocol  动态主机配置协议

DHCP配置内容:

IP/Netmask

Gateway

DNS Server

 

bootp: boot protocol --> dhcp  动态指派IP,永久有效

租约:即使用期限,DHCP服务器为客户端分配IP后,客户端使用IP地址是有期限的

2hours:假如租约期限为2小时

50%: 1hours --> 2hours        过了一个小时之后就要续租

50%1hours --> 2hours   续租后又过了一个小时,就再续租,如果不用的时候,地址会自动被释放

75%: 0.5hours --> 2hours

87.5%: 0.25hours --> 2hours

dhcp discover   如果租约快要到期一直无法续租就要提前广播寻找DHCP服务器

RARP:(Reverse Address Resolution Protocol),是一种网络协议互联网工程任务组(IETF)在RFC903中描述了RARP。RARP使用与ARP相同的报头结构,作用与ARP相反。                            RARP用于将MAC地址转换为IP地址。其因为较限于IP地址的运用以及其他的一些缺点,因此渐为更新的BOOTPDHCP所取代。

RARP工作原理  

  1. 发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
  2. 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
  3. 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
  4. 如果不存在,RARP服务器对此不做任何的响应;
  5. 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

DHCP的工作流程:

比如客户端刚开机,那么客户端关机的时候地址是被释放的了。所以客户端开机后要重新做地址获取。地址获取是通过RARP协议获取的,所以客户端广播请求DHCP服务为其分配一个IP地址。分以一下4个步骤,都是以广播的方式进行的

1Client: dhcp discover客户端发送广播寻找DHCP服务器

2Server: dhcp offer(IP/netmask, gw)  DHCP服务器端收到广播报文后会做出响应,提供与客户端MAC匹配的IP/network,gw

3Clientdhcp request  客户端选择DHCP服务器提供的IP后,要发出一个广播说采用了哪个IP。假如采用了DHCP服务器1的提供的IP,那么这台服务器就要在地址池中删除这次被采用的地                                                 址。而没有被采用的IP,DHCP服务器会回收过来 

                                             (有两种情况:1:多台DHCP服务器同时响应客户端的广播请求为客户端提供IP,2:客户端MAC相匹配的IP已经被占用)

4Server: dhcp ack DHCP  被选定地址的服务器确认

 

续租:是以单播的方式

Client: dhcp request   客户端直接给DHCP服务器发送请求采用续租的地址

Server: dhcp ack        服务器端响应,

       Server: dhcp nak       DHCP服务器拒绝续租,如果DHCP服务器拒绝续租,有可能DHCP服务器上的地址范围被修改了,客户端请求续租的地址不在此范围内

 

技术分享图片

假如公司的网络做了两个区域,一个区域是财务,另一个区域是技术部门,彼此之间使用路由器链接。在财务部门的网络区域中提供了一台DHCP服务器,所以财务部门获取IP地址是没有问题。但技术部门如何获取IP地址?由于路由器是广播报文的屏障,所以财务部门这边的DHCP服务器是无法收到技术部门的客户端发送的广播。那么如何才能让DHCP服务器为技术部门的客户端分配地址呢?由于DHCP协议是可以被中继的,但是需要路由器开启中继功能,即路由器在右侧网络接口上安装一个提供DHCP服务的程序,这里成为A,监听在某个接口上接收技术部门客户端的请求并分配地址。所以技术部门的客户端广播的时候是路由器的A是可以接收到广播报文的。但路由器是没有DHCP功能的,所以路由器在收到报文后会定向单播给财务部门的DHCP服务器,DHCP服务器收到路由器的报文后,会定向把响应报文定向单播给路由器,路由器接收响应报文后再有A把此报文广播给技术部门的客户端。技术部门的客户端接收到IP地址后会再广播一个request,路由器接会把这个广播报文封装后再次单播给DHCO服务器。DHCP服务器接收到报文后再次单播给路由器,路由器A再次广播给技术部门的客户端。

问题:

1、DHCP服务器本身有地址,同时DHCP服务器自己的地址是不能动态分配的。

2、DHCP服务器应该跟财务部门一体。首先先满足财务部门客户端的需求,才能提供其他网络提供DHCP服务。

为每一个网络提供地址服务的功能称为作用域。所谓作用域就是能够为哪些网络提供地址池列表,从而能够完成地址分配。首先保证本地作用域,才能为其他网络提供。

 

Linux DHCP协议的实现程序:dhcp, dnsmasq

dnsmasq既可以配置成DNS转发器又可以作为DHCP server使用

# yum info dnsmasq

 

Dnsmasq is lightweight, easy to configure DNS forwarder and DHCP server.
: It is designed to provide DNS and, optionally, DHCP, to a small network.
: It can serve the names of local machines which are not in the global
: DNS. The DHCP server integrates with the DNS server and allows machines
: with DHCP-allocated addresses to appear in the DNS with names configured
: either in each host or in a central configuration file. Dnsmasq supports
: static and dynamic DHCP leases and BOOTP for network booting of diskless
: machines.

 

 

Linux也可以充当DHCP中继器

# yum install dhcp     //提供了两个守护进程,dhcp服务器和dhcp中继器,且二者取其一

 

/etc/dhcp/dhcpd.conf      //配置文件
/etc/dhcp/dhcpd6.conf
/etc/dhcp/scripts
/etc/dhcp/scripts/README.scripts
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/usr/bin/omshell
/usr/lib/systemd/system/dhcpd.service 
/usr/lib/systemd/system/dhcpd6.service
/usr/lib/systemd/system/dhcrelay.service
/usr/sbin/dhcpd      -->   /etc/rc.d/init.d/dhcpd(centos6)   //启动进程
/usr/sbin/dhcrelay  -->   /etc/rc.d/init.d/dhcrelay     //中继器不需要配置文件

 

如何配置使用DHCP

# cat /etc/dhcp/dhcpd.conf   //是一个空文件

#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example   //这里有一个模板
# see dhcpd.conf(5) man page
#

# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf    //把模板copy过来用

# vim /etc/dhcp/dhcpd.conf

在dhcpd.conf配置文件中:如果定义了多个option,那么范围最小的option优先级最高

subnet {   //每一个subnet用来定义一个子网,在windows中叫作用域,所以地址池就是在子网中定义的,每一个地址再分配是,额外的属性如网关、DNS服务器等都

    ...    //通过option指定,而option既可以放在subnet之外也可以放在subnet之内,如果option放在subnet之外,则全局有效,对每一个subnet都有效。

}

host {     //固定分配给某一个主机的保留地址,有些主机来请求IP地址,都期望使用固定地址,这个地址不在地址池中,而是额外保留给某个主机使用

    ...

}

share-network {  //超级作用域,把多个对应的地址网段在同一个池中进行同一分配

#option指明除了地址和掩码以外分配的其他属性,既可以定义在全局位置,也可以定义在subnet中

option domain-name "example.org";   //搜索域,比如在主机上#ping www,这时候是不通的,如果在此处定义了搜索域,他会在www后面自动补全的
option domain-name-servers ns1.example.org, ns2.example.org;   //域名服务器,如果是域名,则需要先把域名转换成IP地址,再分配给客户端,因为客户端本来就没有域名服务器指向,没办法解析

#全局配置选项

default-lease-time 600; //默认租约期限,单位是秒钟,比如改为1天86400,后面必须是分号结尾

max-lease-time 7200; //最大租约期限

log-facility local7;  //日志

 

subnet 10.152.187.0 netmask 255.255.255.0 {  //先满足本子网,在服务其他网段。这里是为10.152.187.0分配IP地址,注意:这里的这里定义的网络一定是配置文件的当前主机所在的网络

range  10.152.187.120 10.152.187.130; //指明起始地址和结束地址,叫地址池,这里一共定义了10个地址

}

 

对本机的dhcpd.conf进行修改

option domain-name "dongshi.com";
option domain-name-servers 8.8.8.8;

default-lease-time 86400;
max-lease-time 86400;

log-facility local7;

  subnet 192.168.184.0 netmask 255.255.255.0 {
     range 192.168.184.130 192.168.184.160;
  }

 

:.,$s/^[^#]/#/g     //然后把后面的不以#开头的内容加上#号

# systemctl start dhcpd   //  启动

技术分享图片

监听在udp的67号端口

技术分享图片

在另外一个主机上进行测试

# dhclient -d  //用另一个主机以工作于前台的方式动态获取地址,dhclient进程只能启动一次

技术分享图片

此时绑定的192.168.184.130是可以登录的,监听在68号端口上

技术分享图片

如何知道DHCP服务器把地址分配给哪个主机?

# cat /var/lib/dhcpd/dhcpd.leases   //记录了DHCP的租约位置

# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5

server-duid "\000\001\000\001#\260\371l\000\014)\316\370\004";

lease 192.168.184.130 {             //130地址被分配到MAC地址是最下面一行的主机
  starts 6 2018/12/22 13:41:57;     //租约的起始时间
  ends 0 2018/12/23 13:41:57;       //租约的到期时间
  cltt 6 2018/12/22 13:41:57;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:67:09:fe;    //被分到IP地址的主机的MAC地址
}
lease 192.168.184.145 {
  starts 6 2018/12/22 13:47:32;
  ends 0 2018/12/23 13:47:32;
  cltt 6 2018/12/22 13:47:32;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet 00:0c:29:cf:00:6b;
}

 在node2上查看绑定的地址

技术分享图片

在node3上查看绑定的地址

技术分享图片

技术分享图片

如何分配网关呢?

# vim dhcpd.conf   //编辑配置文件指定网关

option domain-name "dongshi.com";
option domain-name-servers 8.8.8.8;
option routers 192.168.184.141;        //添加此行,放在这里是全局使用,如果有subnet的话,也可以把option放在指定的subnet中,一般routers都是定义在subnet中

# systemctl restart dhcpd

技术分享图片

再在node2上查看网关,依然没有,因为dhclient功能有限,所以在设置node2网络采用内部网关通道,自定义下的VMnet2

技术分享图片

 

 

其它配置选项:

filename: 指明引导文件名称;

next-server:提供引导文件的服务器IP地址;

 

filename "pxelinux.0";

next-server 172.16.100.67;

 

PXEpreboot execute environment, Intel

dhcp, tftp, file server(yum repository)

 

CentOS 6 PXE:

yum -y install syslinux tftp-server

 

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/

cp /media/cdrom/isolinux/{boot.cfg,vesamenu.c32,splash.png} /var/lib/tftp/boot/

mkdir /var/lib/tftpboot/pxelinux.cfg/

cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default/

 

 

CentOS 7 PXE:

yum -y install syslinux tftp-server

 

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

cp /media/cdrom/images/pxelinux/{vmlinuz,initrd.img} /var/lib/tftp/boot/

cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/

mkdir /var/lib/tftpboot/pxelinux.cfg/

 

创建/var/lib/tftpboot/pxelinux.cfg/default

内容类似如下:

 

default menu.c32

prompt 5

timeout 30

MENU TITLE CentOS 7 PXE Menu

 

LABEL linux

MENU LABEL Install CentOS 7 x86_64

KERNEL vmlinuz

APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 ks=http://172.16.100.67/centos7.cfg

 

Ansible

 

运维工作:系统安装(物理机、虚拟机)--> 程序包安装、配置、服务启动 --> 批量操作 --> 程序发布  --> 监控

 

OS Provisioning

物理机:PXECobbler

虚拟机:Image Templates

Configration:

puppet (ruby)

saltstack (python)

chef

cfengine

Command and Control:

fabric

 

预发布验正:

新版本的代码先发布到服务器(跟线上环境配置完全相同,只是未接入到调度器);

 

程序发布:

不能影响用户体验;

系统不能停机;

不能导致系统故障或造成系统完全不可用;

 

灰度发布:

发布路径:

/webapp/tuangou-1.1

/web/app/tuangou

/webapp/tuangou-1.2

 

在调度器上下线一批主机(maintanance) --> 关闭服务 --> 部署新版本的应用程序 --> 启动服务 --> 在调度器上启用这一批服务器;

 

自动化灰度发布:脚本、发布平台;

 

运维工具的分类:

agent: puppet, func

agentless: ansible, fabric

ssh

 

ansible:

模块化,调用特定的模块,完成特定的任务;

基于Python语言实现,由ParamikoPyYAMLJinja2三个关键模块;

部署简单,agentless

主从模式

支持自定义模块

支持Playbook

 

幂等性:

 

配置文件:

/etc/ansible/ansible.cfg

/etc/ansible/hosts

 

http://172.16.0.1/centos7.cfg

 

回顾:pxe, ansible

 

pxe:

网卡支持网络引导;

dhcp, filename, next-server

tftp-server

pxelinux.0

vmlinuz, initrd.img

menu.c32

pxelinux.cfg/default

 

system-config-kickstart

ksvalidator

 

ansible:

os provision:

物理机:pxe, cobbler

虚拟机:image file template

configuration:

程序包管理、用户管理、配置文件、服务管理、cron任务等等;

puppet, saltstack, chef, cfengine

task exec

command and control

func, fabric

 

程序发布:灰度模型

 

agent

agentless:

ssh服务;

 

ansible

 

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

args:

key=value

 

注意:command模块要执行命令无须为key=value格式,而是直接给出要执行的命令即可;

 

常用模块:

command

-a ‘COMMAND‘

user

-a ‘name= state={present|absent} system= uid=‘

 

group

-a ‘name= gid= state= system=‘

 

cron

-a ‘name= minute= hour= day= month= weekday= job= user= state=‘

 

copy

-a ‘dest= src= mode= owner= group=‘

 

file

-a ‘path= mode= owner= group= state={directory|link|present|absent} src=‘

 

ping

没有参数

 

yum

-a ‘name= state={present|latest|absent}‘

 

service

-a ‘name= state={started|stopped|restarted} enabled=‘

 

shell

-a ‘COMMAND‘

 

script

-a ‘/path/to/script‘

 

setup

 

playbook的核心元素:

tasks: 任务

variables: 变量

templates: 模板

handlers: 处理器

roles: 角色

 

变量:

facts

--extra-vars "name=value name=value"

role定义

Inventory中的变量:

主机变量

hostname name=value name=value

组变量

[groupname:vars]

name=value

name=value

 

Inventory的高级用法:

 

Playbook

 

- host:

vars:

remote_user:

tasks:

-

-

-

variables:

-

-

-

handlers:

-

-

 

- host:

 

- host:

 

"ansible_distribution_major_version": "7",

 

nginx.conf

worker_processes {{ ansible_processor_cores * ansible_processor_count - 1 }};

 

实战:用ansible playbook完成配置keepalived的集群;

博客:ansible的用法;

dhcp、tftp及pxe简介

标签:定向   efault   exec   rem   释放   edit   art   central   其他   

原文地址:https://www.cnblogs.com/hanshanxiaoheshang/p/10162905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!