存档十二月 2019

PXE 安装系统

PXE 安装系统  网络安装系统


DHCP                                            \\ 主要为网卡启动提供 dhcp服务
     # yum install dhcp                           \\ dnsmasq包也可以提供dhcp服务 用在小环境中
     # rpm -ql dhcp
         /usr/lib/systemd/system/dhcpd.service               \\ dhcp 启动脚本
         /usr/lib/systemd/system/dhcpd6.service
         /usr/lib/systemd/system/dhcrelay.service              \\ 中继器 启动脚本
         /etc/dhcp/dhcpd.conf                         \\ 为ipv4分配 配置文件 
     # cd /etc/dhcp                                    \\ 会看到配置文件
     # cat dhcpd.conf                                   \\ 空配置文件 提示 有例子路径
     # cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf   \\ 复制配置文件 覆盖即可
     # vim /etc/dhcp/dhcpd.conf
         option domain-name "teo.org";                    \\ 搜索域 如ping www 会自动补充后面的域名 用处不大 了解就可以
         option domain-name-servers 8.8.8.8,8.8.4.4;       \\ 域名服务器 
         default-lease-time 3600;                           \\ 默认租约期限 单位秒
         max-lease-time 3600;                                \\ 以上位置属于 全局位置
         log-facility local7;                                 \\ 日志
         subnet 192.168.100.0 netmask 255.255.0.0 {            \\ 为 此网段 分配地址 一定是要当前主机所在的网络
             range 192.168.100.81 192.168.100.85;               \\ 地址池 起始地址 结束地址
             option routers 192.168.100.254;                     \\ 网关
             filename "pxelinux.0";                        \\ PXE启动用的两个选项
             next-server 192.168.100.80;                    \\ 外网地址 指定此ip为PXE服务器,从这里找PXE启动文件
         }
         subnet 192.168.17.0 netmask 255.255.255.0 {         \\ 为17段ip分配地址
                 range 192.168.17.81 192.168.17.90;
                 option routers 192.168.17.254;
                 filename "pxelinux.0";
                 next-server 192.168.100.80;
                 :.,$s/^/#/g                          \\ 从当前行到最后一行所有行首加#注释掉
      # systemctl enable dhcpd
      # systemctl restart dhcpd                 \\ 确保防火墙与selinux不会成为阻碍
      # netstat -unlp                            \\ udp 的67号端口
      # cat /var/lib/dhcpd/dhcpd.leases           \\ 地址分配记录 可以查看已分配的地址 及mac地址


tfpt                                      \\ 主要为启动完成后 提供启动文件
         # yum install tftp-server
         # rpm -ql tftp-server
             /var/lib/tftpboot/              \\ 共享文件的根目录
         # vim /etc/xinetd.d/tftp             \\ 主配置文件
             disable = no                      \\ 把disable =yes改为no
         # systemctl enable tftp
         # systemctl restart tftp
         # ss -unl                             \\ udp 69号端口被监听 防火墙需放行
             # touch /var/lib/tftpboot/a.txt    \\ 仅测试使用
             客户端
                 # yum install tftp
                 # tftp 192.168.10.13
                     tftp > help
                     get a.txt       \\ 下载文件


samba                                 \\ 主要用于共享tfptboot目录可以使Winpe可以共享文件
     # yum install samba samba-common samba-winbind
     # mv /etc/samba/smb.conf /etc/samba/smb.conf.backup
     # vi /etc/samba/smb.conf
     [global]
         workgroup = pxe-os.org
         server string = Samba Server Version %v
         log file = /var/log/samba/log.%m
         max log size = 50
         idmap config * : backend = tdb
         cups options = raw
         netbios name = pxe-os
         map to guest = bad user
         dns proxy = no
         public = yes
         ## For multiple installations the same time - not lock kernel
         kernel oplocks = no
         nt acl support = no
         security = user
         guest account = nobody
         [tftpboot]
         comment = Windows 7 Image
         path = /var/lib/tftpboot
         read only = no
         browseable = yes
         public = yes
         printable = no
         guest ok = yes
         oplocks = no
         level2 oplocks = no
         locking = no
     # systemctl enable smb
     # systemctl restart smb    \\ samba服务器要用4.9以上的版本 4.6版本PE下看不到共享的文件
     # ss -tnl                   \\ 445端口被监听 同时要放行udp137和udp138和tcp139三个端口


PXE                                                \\ 引导程序
     # yum install syslinux
     # rpm -ql syslinux
         /usr/share/syslinux/pxelinux.0                                         \\ 主引导文件
     # cp /usr/share/syslinux/{pxelinux.0,memdisk,menu.c32} /var/lib/tftpboot/   \\ 复制三个文件到tftp共享目录
     # mkdir /var/lib/tftpboot/{pxelinux.cfg,winpe,windows,centos,kali}           \\ 建立五个文件夹
     # chmod 757 /var/lib/tftpboot/{winpe,windows,centos}
     # vim /var/lib/tftpboot/pxelinux.cfg/default                \\ 新建启动文件 可参考isolinux.cfg配置
         default menu.c32
         timeout 50
         menu title
         label 1
         menu label ^1) Install windows
         kernel memdisk
         INITRD winpe/winpe.iso
         append iso raw
         label 2
         menu label ^2) Install CentOS
         kernel centos/images/pxeboot/vmlinuz
         append initrd=centos/images/pxeboot/initrd.img method=http://192.168.17.4/tftpboot/centos devfs=nomount
         label 3
         menu label ^3) Install CentOS
         kernel kali/images/pxeboot/vmlinuz
         append initrd=kali/images/pxeboot/initrd.img method=http://192.168.17.4/tftpboot/kali devfs=nomount
     # cp Win10_16299_PE_x86&x64_10.31.iso /var/lib/tftpboot/winpe/winpe.iso   \\ 准备wpe镜像 把iso文件拷贝到共享的winpe目录下
     # mount /data/soft/CentOS-7-x86_64-DVD-1708.iso /media/centos              \\ 挂载 需创建/media/centos/目录
     # cp -R -p /media/centos/* /var/lib/tftpboot/centos/                        \\ 把linux整个系统目录复制到目录下 -p 保留权限
     # cp -R -p /media/kali/* /var/lib/tftpboot/kali/


httpd                                              \\ 主要为 安装linux提供http环境 只有pe可以不用安装此服务
     # yum install httpd
     # cp /etc/httpd/conf/httpd.conf{,.bak}
     # vim /etc/httpd/conf/httpd.conf
         DirectoryIndex index.html index.cgi index.php  #增加主页文件名
         ServerTokens Prod    #在文件末尾增加这两行
         KeepAlive ON
     # vim /etc/httpd/conf.d/pxeboot.conf
         Alias /tftpboot /var/lib/tftpboot/
         
             AllowOverride ALL
             Options Indexes FollowSymLinks
             # IP address you allow to access
             Require ip 127.0.0.1 192.168.0.0/16
         

     # systemctl enable httpd
     # systemctl restart httpd


nginx                                        \\ 与httpd 选择其一就好 只有配置文件主要部分
     # vim /usr/local/nginx/conf/nginx.conf
         server {
             listen       80;
             server_name  localhost;
             location / {
                 root  /data/www/;
                 index  index.html index.htm;
             }
             location /tftpboot {
                 charset utf-8;
                 alias /var/lib/tftpboot/;
                 sendfile on;
                 autoindex on;
                 autoindex_exact_size off;
                 autoindex_localtime on;
         }


注:
     1 为gho文件执行iso马甲可以在winpe里挂载 使用UltraISO添加gho文件另存即可 pe运行\\192.168.100.80可以查看到共享镜像文件后挂载
     2 可能用到的命令  # dhclient -d                \\ 强制使用dhcp 获取ip 测试时使用
     3 确保防火墙及selinux不受阻碍
     4 防火墙需要用到的命令
         # iptables -I INPUT 4 -m state --state NEW -p udp --dport 69 -j ACCEPT
         # iptables -I INPUT 4 -m state --state NEW -p tcp --dport 445 -j ACCEPT
         # iptables -I INPUT 4 -m state --state NEW -p tcp --dport 139 -j ACCEPT
         # iptables -I INPUT 4 -m state --state NEW -p udp --dport 137 -j ACCEPT
         # iptables -I INPUT 4 -m state --state NEW -p udp --dport 138 -j ACCEPT
     5 在交换机中作为dhcp中继器用的命令
         [CORESWITCH-00]dhcp enable
         [CORESWITCH-00]interface Vlanif 17
         [CORESWITCH-00-Vlanif17]dis this
         [CORESWITCH-00-Vlanif17]dhcp select relay                        \\ dhcp 中继器
         [CORESWITCH-00-Vlanif17]dhcp relay server-ip 192.168.100.80       \\ dhcp服务器ip

Keppalived 高可用

keepalived
     1 要先对时间进行同步
         时间服务器:
             # yum install ntp ntpdate
             # vim /etc/ntp.conf
                 restrict 192.168.10.10 nomodify notrrap nopeer noquery   \\ 加上
                 restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap  \\ 允许192.168.10.0 网段访问
                 server 127.127.1.0                                         \\ 其他的server注释掉
                 Fudge 127.127.1.0 stratum 10         \\ 想配置本地时间服务器server 127.127.1.0 必须这样写
             # systemctl restart ntpd                  \\ 已经运行ntpd,就不能用ntpdate来更新时间了
             # ss -unl                                  \\ udp123 端口被监听
             # systemctl enable ntpd
             # ntpdate 192.168.10.10                     \\ 可在另一台机器上 同步此时间服务器的时间
         网络时间同步
             # ntpdate 0.asia.pool.ntp.org
             # hwclock                      \\ 查看硬件时间
             # hwclock -w                    \\ 将软件时间写入到硬件时间
             # hwclock -r                     \\ 读取硬件时间
             # ssh 192.168.10.11 'date'; date          \\ 对比查看两个服务器时间 是否相同
     2 各节点要能互相解析主机名: 一般建议通过hosts文件进行解析
         修改主机名:
             # hostname                        \\ 查看主机名
             # hostname teo10.10                \\ 设置主机名 临时
             # hostnamectl set-hostname Teo10.10 \\ 永久设置主机名 直接就有效
                 # vim /etc/hostname              \\ 配置文件 永久设置主机名 重启才有效  
                     teo10.10                      \\ CentOS 6 /etc/sysconfig/network
             # vim /etc/hosts                       \\ hosts文件
                 176.16.10.10  teo10.10              \\ 对方机器ip及主机名
             # systemctl restart network.service      \\ 使之生效
     3 确保iptables及selinux不会成为服务的阻碍


 keepalived 两台httpd机器做高可用 实例        \\ 首先分别安装httpd
     # yum install keepalived                \\ 两台机器都需要安装
     # vim /etc/keepalived/keepalived.conf    \\ 可直接替换使用  详细配置文件看最后详解
         :.,$s/^/#/g                           \\ 从当前行到最后一行所有行首加#注释掉 virtual_server 可以注释掉
         global_defs {                          \\ 全局定义 
             notification_email {                \\ 警告信息 发送邮件
                 root@localhost                   \\ 收件人的邮箱  定义邮件服务使用
             }
             notification_email_from teo@localhost  \\ 发件人 的邮箱
             smtp_server 127.0.0.1                   \\ 指明邮件服务器  linux默认邮件服务器
             smtp_connect_timeout 30                  \\ 链接邮件服务器超时时长
             router_id teo10.10                        \\ 定义当前物理设备的唯一标示 可以使用主机名
             vrrp_mcast_group4 224.18.0.100             \\ 组播地址 多实例时候的 每个vrrp_instance 需要专用的组播地址
         }
         vrrp_instance VI_1 {                   \\ 虚拟路由实例  VI_1 名字 第一个实例
             state MASTER                        \\ 定义自己的初始状态 MASTER 主  BACKUP 从
             interface ens33                      \\ ip配置哪块物理网卡
             virtual_router_id 51                  \\ 虚拟路由器id 同一个keepalived要一样 不同keepalived要不一样 
             priority 100                           \\ 优先级 0-255 数字越大 优先级越高    第二台可以改成99
             advert_int 1                            \\ 通告广播 每隔多少秒发送一次 默认1s
             authentication {                         \\ 认证
                 auth_type PASS                        \\ 简单认证 简单字符串
                 auth_pass 123456                       \\ 字符串为 123456
             }
             virtual_ipaddress {             \\ 虚拟ip地址 自定义就可以
                 192.168.10.80/24             \\ 可以是多个 可以是一个 会配置在ens33接口别名上 要和ip一个网段
             }
         }
     # scp keepalived.conf 192.168.10.10:/etc/keepalived/    \\ 复制配置文件到另一台主机
         router_id teo10.10       \\ 拷贝到第二台机器的 需要修改的三项
         state BACKUP              \\ 要配置抢占模式 都要配置成MASTER 根据priority判断级别
         priority 95                \\ 以上配置为抢占模式 要配置非抢占模式 state都需要设置成BACKUP并关闭VIP抢占
         nopreempt                   \\ 关闭VIP的抢占,state都为BACKUP时生效
     # vim /etc/sysconfig/keepalived          \\ keepalived 开启日志功能 两台机器都需要执行以下命令
         KEEPALIVED_OPTIONS="-D -S 3"          \\ 3 为日志级别
     # vim /etc/rsyslog.conf                    \\ 系统里为keepalived 开启日志
         local3.*     /var/log/keepalived.log    \\ 添加到最后
     # systemctl restart rsyslog.service          \\ 重启rsyslog服务
     # tail  /var/log/keepalived.log               \\ 查看 日志文件
     # systemctl restart keepalived            \\ 启动
     # ps aux | grep keepalived                 \\ 会有keepalived进程
     # ip addr list                              \\ 192.168.10.80会被配置到网卡上
     # systemctl list-unit-files | grep keep      \\ 查看是否开机启动
     # systemctl enable keepalived                 \\ 开机启动
     以上为vip和dip在同一网段 如果配置不同网段
         # cd /etc/sysconfig/network-scripts/
         # cp ifcfg-ens33 ifcfg-ens33:0
         # vim ifcfg-ens33
             BOOTPROTO="static"
             NETMASK=255.255.255.0
             GATEWAY=192.168.10.254
             DNS1=192.168.10.254
             DNS2=8.8.8.8
         # vim ifcfg-ens33:0               \\ 内网配置到此网卡
             BOOTPROTO="static"
             IPADDR=172.16.10.12            \\ 第二机器需要改
             NETMASK=255.255.255.0
             NAME=ens33:0
             DVICE=ens33:0                    \\ 删除 UUID
         # systemctl restart network.service


 注:
     1 state都为BACKUP时并开启nopreempt时 priority不生效 为非抢占模式
     2 抢夺是否成功根据priority大小判断 抢还是不抢根据nopreempt判断
     3 BACKUP时nopreempt才生效
     4 对于nginx检测 需要脚本 未做进一步验证
     5 以上已经做进一步验证 以下为lvs做高可用 为做进一步验证

keepalived 配置文件详解
     # vim /etc/keepalived/keepalived.conf
         ! Configuration File for keepalived
         global_defs {                             \\ 全局定义
            notification_email {                    \\ 警告信息 发送邮件      
              acassen@firewall.loc                   \\ 三个收件人的邮箱  定义邮件服务使用
              failover@firewall.loc
              sysadmin@firewall.loc
            }
            notification_email_from Alexandre.Cassen@firewall.loc  \\ 发件人 的邮箱
            smtp_server 192.168.200.1      \\ 指明邮件服务器  linux默认邮件服务器
            smtp_connect_timeout 30         \\ 链接邮件服务器超时时长
            router_id LVS_DEVEL              \\ 定义当前物理设备的唯一标示 可以使用主机名
            vrrp_mcast_group4 224.18.0.100    \\ 组播地址  ??? 多实例时候的 每个vrrp_instance 需要专用的组播地址
            vrrp_skip_check_adv_addr           \\ 以下四项 暂时没用 可加注释
            vrrp_strict
            vrrp_garp_interval 0
            vrrp_gna_interval 0
         }
         vrrp_script chk_mt {                      \\ 自定义脚本 在此目录下 touch down 文件 可使 权重-2 手动降低权限
             script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"   \\ 手动 调度 使地址到备用服务器上  未成功
             interval 1
             weight -2
         }
         vrrp_instance VI_1 {        \\ 虚拟路由实例  VI_1 名字 第一个实例
             state MASTER             \\ 定义自己的初始状态 MASTER 主  BACKUP 从
             interface eth0            \\ ip配置哪块物理网卡
             virtual_router_id 51       \\ 虚拟路由器id 同一个keepalived要一样 不同keepalived要不一样 
             priority 100                \\ 优先级 0-255 数字越大 优先级越高    第二台可以改成99
             advert_int 1                 \\ 通告广播 每隔多少秒发送一次 默认1s
             authentication {              \\ 认证
                 auth_type PASS             \\ 简单认证 简单字符串
                 auth_pass 1111              \\ 字符串为 1111
             }
             virtual_ipaddress {               \\ 虚拟ip地址 自定义就可以
                 192.168.200.16                 \\ 可以是多个 可以是一个
                 192.168.200.17
                 192.168.200.18
             }
             track_script {                         \\ 调用 自定义 脚本
                 chk_mt
             }
             notify_master "/etc/keepalived/notify.sh master"   \\ 调用自定义 邮件脚本 发邮件 notify.sh
             notify_backup "/etc/keepalived/notify.sh backup"
             notify_fault "/etc/keepalived/notify.sh fault"
         }
         virtual_server 192.168.200.100 443 {  \\ lvs服务器vip 地址
             delay_loop 6                       \\ 检查失败时 转几圈
             lb_algo rr                          \\ lvs 方式
             lb_kind NAT                          \\ lvs 模式 还可以为DR
             persistence_timeout 50                \\ 保持连接
             protocol TCP
             sorry_server 127.0.0.1 80           \\ 定义 sorry_server 当所有real_server都挂掉时 提示页面 
             real_server 192.168.201.100 443 {    \\ 对第一个real_server做健康状态检查                 
                 weight 1                          \\ 权重
                 SSL_GET {                          \\ 请求的方式 还有 SSL_GET TCP_CHECK 检查是否可以使用
                     url {                           \\ 请求的url
                       path /                         \\ 根 请求的是主页
                       status_code 200                 \\ 状态码为 200
                     }
                     url {
                       path /mrtg/
                       digest 9b3a0c85a887a256d6939da88aabd8cd
                     }
                     connect_timeout 3
                     nb_get_retry 3
                     delay_before_retry 3
                 }
             }
             real_server 192.168.10.100 80 {  \\ 第二个real_server
                 weight 2
                     TCP_CHECK {         \\ 如果使用TCP_CHECK 只需指明超时即可 其他不用 但是精度不如HTTP_GET
                         connect_timeout 3         
                     }
             }
         }

keepalived 为 lvs 做高可用            \\ 两个director为dr模式做keepalived   两个 real server 
     real server:                      \\ 未做进一步验证
         # yum install httpd
         # echo "RS1 11111111111111" > /var/www/html/index.html
         # systemctl restart httpd
         # systemctl enabled httpd
         # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore          \\ 临时有效 重启会失效
         # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
         # echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
         # echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
         # sysctl -p
         # vim /etc/sysctl.conf                                       \\ 写入内核 使之永久有效
             net.ipv4.conf.all.arp_ignore = 1
             net.ipv4.conf.all.arp_announce = 2
             net.ipv4.conf.ens33.arp_ignore = 1
             net.ipv4.conf.ens33.arp_announce = 2
         # ifconfig lo:0 192.168.10.100/32 broadcast 192.168.10.100    \\ 临时 改变网卡设置 重启会失效
         # cd /etc/sysconfig/network-scripts/                           \\ 修改 配置文件 使之永久有效
         # cp ifcfg-lo{,:0}
         # vim ifcfg-lo:0
             DEVICE=lo:0
             IPADDR=192.168.10.100
             NETMASK=255.255.255.255
             BROADCAST=192.168.10.100
             ONBOOT=yes
             NAME=loopback:0
         # systemctl restart network.service
         # ip addr list
         # route add -host 192.168.10.100 dev lo:0      \\ 添加主机路由 临时有效
         # vim /etc/sysconfig/static-routes              \\ 使路由永久有效  没有此文件的话 新建
             any host 192.168.10.100 dev lo:0             \\ 添加主机路由
         # route -n
     Director:
         # ip addr add 192.168.10.100/32 dev ens33           \\ 以下十条命令可不用写 仅做测试使用
         # ip addr list
         # route add -host 192.168.10.100 dev ens33
         # yum install ipvsadm
         # ipvsadm -A -t 192.168.10.100:80 -s rr
         # ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.14 -g
         # ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.15 -g
         # ipvsadm -L -n                                \\ 做测试 是否成功  其实用不上ipvsadm的  包卸载的都可以
         # ipvsadm -C                                    \\ 清空ipvs规则 以上做只为测试是否成功
         # ip addr del 192.168.10.100/32 dev ens33        \\ 删除地址
         # vim /etc/sysconfig/static-routes                \\ 使路由永久有效  没有此文件的话 新建
             any host 192.168.10.100 dev ens33              \\ 添加主机路由
         # yum install httpd                                 \\ 做 sorry server 使用
         # echo "Sorry, sorry server111111111111111111111" > /var/www/html/index.html
         # systemctl restart httpd
         # openssl rand -hex 6                    \\ 可生成随机数用于 auth_pass 
         # vim /etc/keepalived/keepalived.conf        \\ 修改以下选项
             root@localhost
             notification_email_from kaadmin@localhost
             smtp_server 127.0.0.1
             router_id teo10.10
             #   vrrp_skip_check_adv_addr                \\ 加注释 暂时没用
             #   vrrp_strict
             #   vrrp_garp_interval 0
             #   vrrp_gna_interval 0
             interface ens33
             192.168.10.100/32
             virtual_server 192.168.10.100 80 {
                 lb_algo rr                          \\ lvs 方式
                 lb_kind DR                           \\ lvs 模式
                 sorry_server 127.0.0.1 80             \\ 定义 sorry_server 当所有real_server都挂掉时 提示页面 
                 real_server 192.168.10.14 80 {         \\ 对第一个real_server做健康状态检查
                     HTTP_GET {                          \\ 请求的方式 还有 SSL_GET 
                         url {                            \\ 请求的url
                           path /                          \\ 根 请求的是主页
                           status_code 200                  \\ 状态码为 200
                         }
                     }
                 }
                 real_server 192.168.10.15 80 {         \\ 在配置第二个real_server
             }


 lvs nat 模式下 需要配 同步组  没有做实验


 手动 调度 使地址到备用服务器上           \\ 未能实现切换 需检查配置
     # vim /etc/sysconfig/keepalived       \\ 两台机器同时修改配置文件
         vrrp_script chk_teo {              \\ 自定义脚本  名字 
             script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"  \\ 检查是否有down文件  
             interval 2                      \\ 每隔2秒做检查 如果有 返回1 继续执行代码 如果没有返回0 退出
             weight -20                       \\ 权重 减去20
         vrrp_instance VI_1 {
             track_script {
             chk_teo
             }
         }