1、原理部分
许多管理人员在网络管理中,非常头疼的问题就是为用户进行安装操作系统。许多企业的客户端配置基本上很少有带cd-rom,也不可能所有客户端都有操作系统安装光盘。笔者经常发现许多维护人员手拿光驱、光盘来为用户重新进行或升级操作系统。为解决这一枯燥而又重复的工作,不少企业建立了windows远程安装服务器与Linux远程安装服务器。在这里主要探讨一下关于Linux方面的远程安装过程及实现。
在安装过程中Linux首先需要一个引导程序来让安装程序启动,再实行配置与安装。远程网络安装那么就需要我们的安装程序能够远程地通过网络传送给客户端。因此在搭建远程Linux安装服务器时候首先要值得注意以下几个问题:
1. 远程客户端属于裸机。
这里所定义的裸机是除了标准硬件之外没有任何的操作系统与软件程序。当然也可以拥有操作系统或者是软件,之所以告诉大家是裸机是主要说明最简单的一种思维方式。
2. 远程客户端必须能够支持网络启动。
远程客户端为了能够发送安装请求必须能够通过网络的方式,将安装请求发送给服务器端。因此客户端必须存在网卡,并且网卡上拥有PXE ROM(预引导执行环境)芯片而且BIOS能够支持网络启动。
3. 利用DHCP服务为客户端分发IP地址
在远程计算机启动后将会出现初始化设置,此时因客户端没有进入操作系统或处于在裸机状态下,不可能绑定我们所熟悉TCP/IP地址或者其他网络协议地址。因此他们之间的沟通必须通过IP地址自动分配服务----DHCP来为客户端进行分发IP地址,从而实现Client-Server端之间的链接与沟通。
4. 利用UDP方式传送引导程序
在远程安装客户端得到IP地址之后,将请求远程安装服务器给客户端一个Linux引导程序以便于引导Linux并在客户端上实现安装界面。但是在TCP/IP协议栈中如果采用TCP协议进行传送服务,那么将会出现TCP三次握手过程,从而导致远程客户端等待超时而无法完成引导过程。因此就需要采用UDP协议进行快速传递,确保远程客户端的引导。因此笔者在这里所采用的程序为TFTP[琐碎文件传输协议]服务作为远程传输服务器传送Linux引导程序的服务器。
5. 利用TCP方式传送安装程序
虽然UDP速度非常快速,但是其属于不可靠协议,不具备纠错、确保数据到达目的地等保障机制,因此在传输大量文件或者是大文件时候还是需要采用TCP方式,这样将不会出现因UDP协议传输丢包而导致安装无法进行。
在这里有多种方式供大家选择:
1)NFS[网络文件系统]
2)HTTP
3)FTP等
笔者在这里选择采用NFS方式。
因此准备建立远程安装服务器至少需要三个服务:DHCP、TFTP、NFS,三个服务可以在三台不同的计算机上,也可以在同一台计算机上进行实现。
原理归纳:
远程客户端计算机启动,由于BIOS设置了网卡启动,所以网卡PXE ROM(自启动芯片)中的程序被调入内存执行。以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
同时DHCP服务器联系到TFTP服务器为此客户端发送一个bootstrap(引导程序)。客户端收到bootstrap(文件pxelinux.0)后执行,bootstrap会请求TFTP传送bootstrap的配置文件(pxelinux.cfg)。收到后读取配置文件。根据配置文件内容和客户情况,客户端请求TFTP传送内核映象文件(vmlinuz)和根文件系统文件(initrd.img)。最后启动内核。
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
这就是一个完整的pxe构建过程。然而要使网卡启动后再继续网络安装系统,则最后还需要FTP服务将系统所需安装文件放置FTP相应目录中进行传输安装。
下面用图形来表述原理:
Linux安装实现步骤
2、 配置DHCP服务器
配置DHCP服务器主要用途是为了能够给客户端分配IP地址,从而让客户端与TFTP及FTP进行联系
一、安装:Redhat 5 系统中dhcp默认需要自己安装 (关于如何找到对应的安装包,如何挂载iso文件,如何安装程序包,参考:http://blog.csdn.net/changyanmanman/article/details/7322616 http://download.csdn.net/download/changyanmanman/4206732)
安装文件为:
dhcp-3.0.5-21.el5.i386.rpm ——DHCP软件包(必装)
dhcp-devel-3.0.5-21.el5.i386.rpm ——DHCP头文件,这里用不到
[root@linux-a ~]# rpm -ivh /media/Server/dhcp-3.0.5-3.el5.i386.rpm
warning: /media/Server/dhcp-3.0.5-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:dhcp ########################################### [100%]
[root@linux-a ~]#
二、配置:
1、其配置文件是/etc/dhcpd.conf,租约数据库文件是/var/lib/dhcpd/dhcpd.leases。
在第一次打开该文件时,只告知一个例子文件的路径(如下图),可将该例子覆盖该配置文件再进行修改。
----------------------------------------------------
注:这里若找不到该模板文件,可以使用locate命令查询位置
[root@server1 ~]# locate dhcpd.conf
/usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample ----就是它了
/usr/share/logwatch/default.conf/services/dhcpd.conf
/usr/share/man/man5/dhcpd.conf.5.gz
----------------------------------------------------
2、 DHCP的配置文件
dhcpd.conf文件有二大部分,分别是全局配置和局部配置(如下图)。当全局配置与局部配置发生冲突时,局部配置优先级更高。
常用参数:
●ddns-update-style (none|interim|ad-hoc):定义所支持的DNS动态更新类型,该参数必选且必须放在第一行且只能在全局配置中使用。
none:不支持。 interim:DNS互动更新模式。 ad-hoc:特殊DNS更新模式。
●ignore-client-updates:忽略客户端更新,该参数只能在全局配配置中使用。
●default-lease-time:默认IP租约时间,单位秒,该参数可以在全局配置、局部配置均可使用。
●max-lesase-time:客户端IP租约时间的最大值,单位秒,该参数可以在全局配置、局部配置均可使用。
● hardware :指定网卡接口类型和MAC地址。
●server-name 通知DHCP客户服务器名称。
get-lease-hostnames flag 检查客户端使用的IP地址。
fixed-address ip 分配给客户端一个固定的地址。
authritative 拒绝不正确的IP地址的要求。
常用声明:
●subnet 网络号 netmask 子网掩码 {…..}:定义作用域。
●range 起始IP 结束IP:动态IP地址范围。
shared-network 用来告知是否一些子网络分享相同网络。
subnet 描述一个IP地址是否属于该子网。
range 起始IP 终止IP 提供动态分配IP 的范围。
host 主机名称 参考特别的主机。
group 为一组参数提供声明。
allow unknown-clients;deny unknown-client 是否动态分配IP给未知的使用者。
allow bootp;deny bootp 是否响应激活查询。
allow booting;deny booting 是否响应使用者查询。
filename 开始启动文件的名称. 应用于无盘工作站。
next-server 设置服务器从引导文件中装如主机名,应用于无盘工作站。
常用选项:
●option routes IP地址:为客户端设定默认网关,该选项可以在全局配置、局部配置均可使用。
●option subnet-mask 子网掩码:默认子网掩码,该选项可以在全局配置、局部配置均可使用。
●option domain-name-servers:为客户端指明DNS服务器地址,该选项可以在全局配置、局部配置均可使用。
●option domain-name:DNS后缀,该选项可以在全局配置、局部配置均可使用。
●option time-offset:为客户端指定格林威治时间领衔时间,单位秒,该选项可以在全局配置、局部配置均可使用。
domain-name 为客户端指明DNS名字。
host-name 为客户端指定主机名称。
broadcast-address 为客户端设定广播地址。
ntp-server 为客户端设定网络时间服务器IP地址。
time-offset 为客户端设定和格林威治时间的偏移时间,单位是秒。
我们看一个标准配置:
ddns-update-style interim; ----------配置使用DHCP-DNS互动更新模式。这里不要修改,而且必须有
ignore client-updates; ----------不允许客户端更新,也不要改,而且必须存在
subnet 169.254.215.0 netmask 255.255.255.0 { ---------子网声明,就是你要进行dhcp的网段,本实验是169.254.215.0
# --- default gateway
option routers 169.254.215.76; -------------默认网关,根据实际情况修改,下同
option subnet-mask 255.255.255.0; -------------客户端的子网掩码
option nis-domain "nisdomain.com"; -------------客户端的NIS域名,有NIS服务器的话才要设置
option domain-name "ccg.com"; -------------客户端的域名,本实验是ccg.com
option domain-name-servers 169.254.215.76; -------------客户端设置域名服务器
option time-offset -18000; # Eastern Standard Time -------偏移时间,不用改
# option ntp-servers 169.254.215.76; -------NTP服务器地址,就是时间服务器
# option netbios-name-servers 169.254.215.76; --------wins服务器地址
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2; ---------netbios节点类型,不用改
range dynamic-bootp 169.254.215.125 169.254.215.200; ----------地址池,你要进行分配的地址规划,本实验是主机位125-200进行分配
default-lease-time 21600; ------默认租约时间,单位为秒
max-lease-time 43200; ---------最长租约时间,单位秒
# we want the nameserver to appear at a fixed address ---------下面是设置主机绑定的,并不是必须有的
host ns { ---------这5行是模板,不起作用
next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
host ns1 { ---------这个名称可以随便起,但是最好不要重复
next-server marvin.redhat.com; ---------无盘工作站用得着,这里可有可无
hardware ethernet 00:0C:29:6C:79:8F; ---------要绑定的客户端的MAC地址
fixed-address 169.254.215.130; ---------要绑定MAC地址的主机对应的IP
}
}
接下来我们需要配置相关信息。为了满足我们的安装需求,假设PXE服务器、DHCP服务器、TFTP服务器全部安装在一台为192.168.0.7的计算机上。我们需要进行如下操作:
(1)修改/etc/dhcpd.conf 文件,指定 IP 地址等信息。
(2)在'''/etc/dhcpd.conf''' 中增加 tftp-server 需要推送给客户端的启动文件(bootstrap):filename"pxelinux.0";因为 tftp 的默认目录是 /tftpboot,所以文件的绝对路径就是:/tftpboot/pxelinux.0";当然也可以指定为其它的路径。
另外需要指定 next-server 参数,告诉客户端在获取到pxelinux.0 文件之后去哪里获取其余的启动文件: next-server 192.168.0.7;
最终的配置文件结果如下所示:
[root@qiuriServer]# vi /etc/dhcpd.conf ddns-update-styleinterim; ignoreclient-updates; allow booting; #定义能够PXE启动 allow bootp; #定义支持bootp subne t192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.80; option routers 192.168.0.1; option subnet-mask 255.255.255.0; default-lease-time 21600; max-lease-time 43200; next-server 192.168.0.7; #TFTP Server的IP地址 filename "pxelinux.0"; #pxelinux启动文件位置 }
三、启动服务:
#service dhcpd start关闭DHCP服务器:
#service dhcpd stop
重启DHCP服务器:
#service dhcpd restart
使用ps命令检查dhcpd进程:
#ps -ef | grep dhcpd
root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd
root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd
使用检查dhcpd运行的端口:
# netstat -nutap | grep dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd
配置完成后,重启DHCP服务,并将它设为开机自启动: [root@qiuriServer]# /etc/init.d/dhcpd start 启动 dhcpd: [确定] [root@qiuriServer]# chkconfig --level 35 dhcpd on
四、关于客户端的配置
可以通过图形化界面进行修改:
system-config-network-tui
也可以通过修改文件的方式
[root@server1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改这条:
BOOTPROTO=dhcp
若想重新获得分配的IP,直接重启网卡就行了
service network restart
使用下面这条命令也可以
ipconfig /renew
附加:(与本次安装无关,仅作延伸阅读)
●下面我们来看一个配置实例,实例中的网络拓扑如下图
ddns-update-style interim; ignore client-updates; option domain-name“demo.zqin”; subnet 192.168.159.0 netmask 255.255.255.0 { option routers 192.168.159.18; option subnet-mask255.255.255.0; option domain-name-servers192.168.159.1; option domain-name“example.zqin”; option time-offset-18000; range dynamic-bootp 192.168.159.20 192.168.100.250; default-lease-time 21600; max-lease-time 43200; } |
上述配置实际上只需在rhel中所提供的例子文件中改几处即可,在编写配置文件时需注意以下几个问题:
●每行必须以分号结尾(如不用分号结尾,在启动dhcpd时是不会报错的,只能通过查看日志文件/var/log/message得知)。
●局部配置必须包含在一对中括号之间。
●上面的例子中全局部分定义了参数option domain-name,在局部也定义了,这个在实际工作是没有必要的,这里只是为了说明局部参数的优先级高于全局部分。
如希望实现保留功能(在保留中也可使用参数,当然保留中参数的优先级最高),首先需要知道指定客户端网卡的MAC地址,然后在配置文件中加入如下内容即可。
ddns-update-style interim; ignore client-updates; option domain-name“demo.zqin”; subnet 192.168.159.0 netmask 255.255.255.0 { option routers 192.168.159.18; option subnet-mask255.255.255.0; option domain-name-servers192.168.159.1; option domain-name“example.zqin”; option time-offset-18000; range dynamic-bootp 192.168.159.20 192.168.100.250; default-lease-time 21600; max-lease-time 43200; host lyon { hardware Ethernet 00:50:56:c0:00:01; |
在整个DHCP客户端与服务器通讯的过程全部使用的是广播的方式,这样会带来一个问题,如果在DHCP客户端与服务器之间必须通过路由器时是无法完成IP地址的申请过程的,这里就需要使用DHCP中继代理了。DHCP中继代理位于DHCP客户端一边的网络中,帮助DHCP客户端与DHCP服务器进行通讯。不过在实际工作中,本人觉得直接在路由器或三层交换机上配置DHCP中继代理更合理。不过我们还是来看下通过rhel如何实现中继代理功能,下面的配置实例中,网络拓扑如下图:
●将dhcp的网关指向192.168.159.18
●编辑/etc/syconfig/dhcpd文件
DHCPDARGS=eth0 |
●在dhcp上建立超级作用域,并为192.168.100.0/24建立作用域
ddns-update-style interim; ignore client-updates; shared-network test { #建立超级作用域 option domain-name"example.zqin"; option domain-name-servers192.168.159.1; subnet 192.168.100.0 netmask 255.255.255.0 { option routers 192.168.100.18; option subnet-mask255.255.255.0; option time-offset-18000; range dynamic-bootp 192.168.100.20 192.168.100.200; default-lease-time 21600; max-lease-time 43200; } subnet 192.168.159.0 netmask 255.255.255.0 { option routers192.168.159.18; option subnet-mask255.255.255.0; option time-offset-18000; range dynamic-bootp 192.168.159.20 192.168.159.200; default-lease-time 21600; max-lease-time 43200; } } |
●在中继代理上安装dhcp、dhcp-devel包。
●在中继代理上运行,并将其加入/etc/rc.local中。
echo “1” > /proc/sys/net/ipv4/ip_forward |
●编辑/etc/sysconfig/dhcrelay文件
INTERFACES="eth1" DHCPSERVERS="192.168.159.19" |
●启用中继代理
service dhcrelay restart chkconfig dhcrelay on |