大量源码包,希望提供统一的软件管理机制
本案例使用nginx-1.22.1版本的源码软件,生成对应的RPM包软件,具体要求如下:
软件名称为nginx
软件版本为1.22.1
RPM软件包可以查询描述信息
RPM软件包可以安装及卸载
安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。
实现此案例需要按照如下步骤进行。
步骤一:安装rpm-build软件
- 1)安装rpm-build软件包
-
- [root@web1 ~]# yum -y install rpm-build
- 2)生成rpmbuild目录结构
-
- [root@web1 ~]# rpmbuild -ba nginx.spec #会报错,没有文件或目录
- [root@web1 ~]# ls /root/rpmbuild #自动生成的目录结构
- BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
- 3)准备工作,将源码软件复制到SOURCES目录
-
- [root@web1 ~]# cp nginx-1.22.1.tar.gz /root/rpmbuild/SOURCES/
- 4)创建并修改SPEC配置文件
-
- [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
- Name:nginx #源码包软件名称
- Version:1.22.1 #源码包软件的版本号
- Release: 10 #制作的RPM包版本号
- Summary: nginx is a web server software. #RPM软件的概述
- License:GPL #软件的协议
- URL: www.test.com #网址
- Source0:nginx-1.22.1.tar.gz #源码包文件的全称
- #BuildRequires: #制作RPM时的依赖关系
- Requires: pcre-devel openssl-devel #安装RPM时的依赖关系
- %description
- nginx is an HTTP and reverse proxy server. #软件的详细描述
- %post
- useradd nginx #非必需操作:安装后脚本(创建账户)
- %prep
- %setup -q #自动解压源码包,并cd进入目录
- %build
- ./configure
- make %{?_smp_mflags}
- %install
- make install DESTDIR=%{buildroot}
- %files
- %doc
- /usr/local/nginx/* #对哪些文件与目录打包
- %changelog
步骤二:使用配置文件创建RPM包
- 1)安装依赖软件包
-
- [root@web1 ~]# yum -y install gcc pcre-devel openssl-devel
- 2)rpmbuild创建RPM软件包
-
- [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
- [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-10.x86_64.rpm
步骤三:安装软件
- [root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-10.x86_64.rpm
- [root@web1 ~]# rpm -qa |grep nginx
- [root@web1 ~]# ls /usr/local/nginx/
Virtual Private Network (虚拟专用网络)
在公用网络上建立专用私有网络,进行加密通讯。多用于为集团公司的各地子公司建立连接,连接完成后,各个地区的子公司可以像局域网一样通讯在企业网络中有广泛应用
偶尔可以用于翻墙,目前主流的VPN技术(GRE,PPTP,L2TP+IPSec,SSL)

| lsmod | grep ip_gre | 显示模块列表 |
| modprobe ip_gre | 加载模板 |
| modinfo ip_gre | 查看模块信息 |
本案例要求搭建一个GRE VPN环境,并测试该VPN网络是否能够正常通讯,要求如下:
使用lsmod查看当前计算机已经加载的模块,使用modprobe加载Linux内核模块,使用modinfo可以查看内核模块的信息。
实现此案例需要按照如下步骤进行。
步骤一:启用GRE模块
- 1)查看计算机当前加载的模块
-
- [root@web1 ~]# lsmod # 显示模块列表
- [root@web1 ~]# lsmod | grep ip_gre # 确定是否加载了gre模块
- 2)加载模块ip_gre
-
- [root@web1 ~]# modprobe ip_gre
- [root@web1 ~]# lsmod | grep ip_gre
步骤二:web1主机创建VPN隧道
- 1)创建隧道
-
- [root@web1 ~]# ip tunnel add tun0 mode gre \
- > remote 192.168.99.200 local 192.168.99.100
- #ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
- #mode设置隧道使用gre模式
- #local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址
- 2)启用该隧道(类似与设置网卡up)
-
- [root@web1 ~]# ip add show tun0
- [root@web1 ~]# ip link set tun0 up #设置UP
- 3)为VPN配置隧道IP地址
-
- [root@web1 ~]# ip addr add 10.10.10.100/8 peer 10.10.10.200/8 dev tun0
- #为隧道tun0设置本地IP地址10.10.10.100/24
- #隧道对面的主机IP为10.10.10.200/24
- [root@web1 ~]# ip add show tun0 #查看IP地址
步骤三:web2主机创建VPN隧道
- 1)加载模块ip_gre
-
- [root@web2 ~]# modprobe ip_gre
- [root@web2 ~]# lsmod | grep ip_gre
- 2)创建隧道
-
- [root@web2 ~]# ip tunnel add tun0 mode gre \
- > remote 192.168.99.100 local 192.168.99.200
- 3)启用该隧道
-
- [root@web2 ~]# ip add show tun0
- [root@web2 ~]# ip link set tun0 up #设置UP
- 4)为VPN配置隧道IP地址
-
- [root@web2 ~]# ip addr add 10.10.10.200/8 peer 10.10.10.100/8 dev tun0
- [root@web2 ~]# ip add show tun0 #查看IP地址
- 5)测试连通性
-
- [root@web1 ~]# ping 10.10.10.200
- [root@web2 ~]# ping 10.10.10.100

本案例要求搭建一个L2TP+IPSec VPN环境,并测试该VPN网络是否能够正常通讯,具体要求如下:
使用web1作为服务端,windows10虚拟机作为客户端,首先要修改window10的ip为99网段,然后加入99网段的虚拟网络
实现此案例需要按照如下步骤进行。
步骤一:部署IPSec服务
- 1)安装
-
- [root@web1 vpn]# yum -y install libreswan # 安装加密工具
- [root@web1 vpn]# cp myipsec.conf /etc/ipsec.d/ # 复制配置IPSec密钥验证配置文件
- 到ipsec.d目录
- 2)配置
-
- [root@web1 vpn]# vim /etc/ipsec.d/myipsec.conf # 修改配置第16行
- left=192.168.99.100 # 设置为本机ip(此处在真实环境为公网ip)
- [root@web1 vpn]# vim /etc/ipsec.secrets # 修改配置,添加加密信息
- 192.168.99.100 %any: PSK "randpass" # 另起一行,添加99.100是本机ip,%any:是允许任何客户机连接本服务器,PSK(pre share key)是预共享密钥,randpass是密码,等windows客户连接vpn服务器时需要该密码
步骤二:安装vpn工具
- 1)安装
-
- [root@web1 vpn]#yum -y install ./xl2tpd-1.3.8-2.el7.x86_64.rpm
- [root@web1 vpn]#vim /etc/xl2tpd/xl2tpd.conf # 打开配置文件,32、33行
- ip range = 10.10.10.10-10.10.10.18 # 给客户分配的ip
- local ip = 192.168.99.100 # 本机ip
- 2)配置
-
- [root@web1 vpn]#vim /etc/ppp/options.xl2tpd # 修改配置文件,将第10、16行注释掉,删除掉21行的#以及空格,就可以启用加密
- #crtscts # 注释该行
- #lock # 注释该行
- 3)创建账户
-
- [root@web1 vpn]#vim /etc/ppp/chap-secrets # 定义windows客户机的用户名和密码
- tom * 123456 * # 另起一行创建用户tom,配置密码123456
- 4)开启服务
-
- systemctl start ipsec # 开启加密服务
- ss -ntulp |grep :500 # 检查加密服务
- /usr/sbin/xl2tpd # 开启vpn服务
- ss -ntulp |grep xl2tpd # 检查加vpn服务
- 5)翻墙设置(非必需操作)
-
- [root@client ~]# echo "1" > /proc/sys/net/ipv4/ip_forward # 开启路由转发
- [root@client ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 \
- > -j SNAT --to-source 201.1.2.10
步骤三:客户端设置
1,启动一台Windows虚拟机,将虚拟机网卡桥接到99网段的虚拟网络,ip配置为99网段的即可
2. 设置Windows注册表,具体操作如下:
连接VPN并测试网络连通性,效果如图-1所示。
最下面输入用户名tom 密码 123456。

systemd管理服务时会读取对应的配置文件也就是unit文件
读取Unit文件的目录(优先级由高到低)


本案例要求熟练掌握systemd进程如何管理其他服务器,具体要求如下:
实现此案例需要按照如下步骤进行。
步骤一:使用systemd管理shell脚本
- 1)编写shell脚本
-
- [root@web1 ~]# vim /root/test.sh
- #!/bin/bash
- while :
- do
- echo NB
- echo DACHUI
- sleep 1
- done
- [root@web1 ~]# chmod +x /root/test.sh
- 2)编写Unit文件
-
- [root@web1 ~]# cp /usr/lib/systemd/system/{crond.service,test.service}
- [root@web1 ~]# vim /usr/lib/systemd/system/test.service
- [Unit]
- Description=my test script
- After=time-sync.target
- [Service]
- ExecStart=/root/test.sh
- ExecReload=/bin/kill -HUP $MAINPID
- KillMode=process
- [Install]
- WantedBy=multi-user.target
步骤二:使用systemd管理Nginx服务
- 编写Unit文件
-
- [root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
- [Unit]
- Description=The Nginx HTTP Server #描述信息
- After=network.target remote-fs.target nss-lookup.target
- [Service]
- Type=forking
- #仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
- ExecStart=/usr/local/nginx/sbin/nginx
- ExecReload=/usr/local/nginx/sbin/nginx -s reload
- ExecStop=/bin/kill -s QUIT $MAINPID
- [Install]
- WantedBy=multi-user.target