Top

NSD OPERATION DAY06

  1. 案例1:制作nginx的RPM包
  2. 案例2:配置GRE VPN
  3. 案例3:创建PPTP VPN
  4. 案例4:创建L2TP+IPSec VPN
  5. 案例5:编写systemd Unit文件

1 案例1:制作nginx的RPM包

1.1 问题

本案例使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体要求如下:

软件名称为nginx

软件版本为1.12.2

RPM软件包可以查询描述信息

RPM软件包可以安装及卸载

1.2 方案

安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。

配置文件中的描述信息如表-1:

表-1 SPEC描述信息

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装rpm-build软件

1)安装rpm-build软件包

  1. [root@web1 ~]# yum -y install rpm-build

2)生成rpmbuild目录结构

  1. [root@web1 ~]# rpmbuild -ba nginx.spec                //会报错,没有文件或目录
  2. [root@web1 ~]# ls /root/rpmbuild                    //自动生成的目录结构
  3. BUILD BUILDROOT RPMS SOURCES SPECS SRPMS

3)准备工作,将源码软件复制到SOURCES目录

  1. [root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/

4)创建并修改SPEC配置文件

  1. [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
  2. Name:nginx                                        #源码包软件名称
  3. Version:1.12.2                                    #源码包软件的版本号
  4. Release:    10                                        #制作的RPM包版本号
  5. Summary: Nginx is a web server software.            #RPM软件的概述    
  6. License:GPL                                        #软件的协议
  7. URL:    www.test.com                                    #网址
  8. Source0:nginx-1.12.2.tar.gz                        #源码包文件的全称
  9.  
  10. #BuildRequires:                                    #制作RPM时的依赖关系
  11. #Requires:                                        #安装RPM时的依赖关系
  12. %description
  13. nginx [engine x] is an HTTP and reverse proxy server.    #软件的详细描述
  14.  
  15. %post
  16. useradd nginx          #非必需操作:安装后脚本(创建账户)
  17.  
  18. %prep
  19. %setup -q                                #自动解压源码包,并cd进入目录
  20.  
  21. %build
  22. configure
  23. make %{?_smp_mflags}
  24.  
  25. %install
  26. make install DESTDIR=%{buildroot}
  27.  
  28. %files
  29. %doc
  30. /usr/local/nginx/*                    #对哪些文件与目录打包
  31.  
  32. %changelog

步骤二:使用配置文件创建RPM包

1)安装依赖软件包

  1. [root@web1 ~]# yum -y install gcc pcre-devel openssl-devel

2)rpmbuild创建RPM软件包

  1. [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
  2. [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm

步骤三:安装软件

  1. [root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
  2. [root@web1 ~]# rpm -qa |grep nginx
  3. [root@web1 ~]# ls /usr/local/nginx/

2 案例2:配置GRE VPN

2.1 问题

本案例要求搭建一个GRE VPN环境,并测试该VPN网络是否能够正常通讯,要求如下:

2.2 方案

使用lsmod查看当前计算机已经加载的模块,使用modprobe加载Linux内核模块,使用modinfo可以查看内核模块的信息。

准备实验所需的虚拟机环境,实验环境所需要的主机及对应的IP设置列表如表-1所示,正确配置IP地址、主机名称,并且为每台主机配置YUM源。

表-1 主机列表

实验拓扑如图-1所示。

图-1

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:启用GRE模块(client和proxy都需要操作)

1)查看计算机当前加载的模块

  1. [root@client ~]# lsmod                        //显示模块列表
  2. [root@client ~]# lsmod | grep ip_gre            //确定是否加载了gre模块

2)加载模块ip_gre

  1. [root@client ~]# modprobe ip_gre

3)查看模块信息

  1. [root@client ~]# modinfo ip_gre
  2. filename: /lib/modules/3.10.0-693.el7.x86_64/kernel/net/ipv4/ip_gre.ko.xz
  3. … …

步骤二:Client主机创建VPN隧道

1)创建隧道

  1. [root@client ~]# ip tunnel add tun0 mode gre \
  2. > remote 201.1.2.5 local 201.1.2.10
  3. //ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
  4. //mode设置隧道使用gre模式
  5. //local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址

2)启用该隧道(类似与设置网卡up)

  1. [root@client ~]# ip link show
  2. [root@client ~]# ip link set tun0 up         //设置UP
  3. [root@client ~]# ip link show

3)为VPN配置隧道IP地址

  1. [root@client ~]# ip addr add 10.10.10.10/24 peer 10.10.10.5/24 \
  2. > dev tun0
  3. //为隧道tun0设置本地IP地址(10.10.10.10.10/24)
  4. //隧道对面的主机IP的隧道IP为10.10.10.5/24
  5. [root@client ~]# ip a s //查看IP地址

步骤三:Proxy主机创建VPN隧道

1)查看计算机当前加载的模块

  1. [root@client ~]# lsmod                        //显示模块列表
  2. [root@client ~]# lsmod | grep ip_gre            //确定是否加载了gre模块

2)加载模块ip_gre

  1. [root@client ~]# modprobe ip_gre

3)创建隧道

  1. [root@proxy ~]# ~]# ip tunnel add tun0 mode gre \
  2. > remote 201.1.2.10 local 201.1.2.5
  3. //ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
  4. //mode设置隧道使用gre模式
  5. //local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址

4)启用该隧道(类似与设置网卡up)

  1. [root@proxy ~]# ip a s
  2. [root@proxy ~]# ip link set tun0 up         //设置UP
  3. [root@proxy ~]# ip a s

5)为VPN配置隧道IP地址

  1. [root@proxy ~]# ip addr add 10.10.10.5/24 peer 10.10.10.10/24 \
  2. > dev tun0
  3. //为隧道tun0设置本地IP地址(10.10.10.10.5/24)
  4. //隧道对面的主机IP的隧道IP为10.10.10.10/24
  5. [root@proxy ~]# ip a s //查看IP地址

6)测试连通性

  1. [root@client ~]# ping 10.10.10.5
  2. [root@proxy ~]# ping 10.10.10.10

3 案例3:创建PPTP VPN

3.1 问题

本案例要求搭建一个PPTP VPN环境,并测试该VPN网络是否能够正常通讯,要求如下:

3.2 方案

准备实验所需的虚拟机环境,实验环境所需要的主机及对应的IP设置列表如表-2所示,正确配置IP地址、主机名称,并且为每台主机配置YUM源。

表-2 主机列表

实验拓扑如图-2所示。

图-2

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:部署VPN服务器

1)安装软件包(软件包参考lnmp_soft/vpn/)

  1. [root@proxy ~]# yum install pptpd-1.4.0-2.el7.x86_64.rpm
  2. [root@proxy ~]# rpm -qc pptpd
  3. /etc/ppp/options.pptpd
  4. /etc/pptpd.conf
  5. /etc/sysconfig/pptpd

2)修改配置文件

  1. [root@proxy ~]# vim /etc/pptpd.conf
  2. .. ..
  3. localip 201.1.2.5                                    //服务器本地IP
  4. remoteip 192.168.3.1-50                            //分配给客户端的IP池
  5.  
  6. [root@proxy ~]# vim /etc/ppp/options.pptpd
  7. require-mppe-128                                    //使用MPPE加密数据
  8. ms-dns 8.8.8.8                                    //DNS服务器
  9.  
  10. [root@proxy ~]# vim /etc/ppp/chap-secrets            //修改账户配置文件
  11. jacob         *          123456     *
  12. //用户名     服务器名称    密码     客户端IP

3)启动服务

  1. [root@proxy ~]# systemctl start pptpd
  2. [root@proxy ~]# systemctl enable pptpd

4)翻墙设置(非必需操作)

  1. [root@proxy ~]# echo "1" > /proc/sys/net/ipv4/ip_forward    //开启路由转发
  2.  
  3. [root@proxy ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 \
  4. > -j SNAT --to-source 201.1.2.5

步骤二:客户端设置

启动一台Windows虚拟机,将虚拟机网卡桥接到public2,配置IP地址为201.1.2.20。

新建网络连接(具体操作如图-3所示),输入VPN服务器账户与密码(具体操作如图-4所示),连接VPN并测试网络连通性(如图-5所示)。

图-3

图-4

图-5

4 案例4:创建L2TP+IPSec VPN

4.1 问题

本案例要求搭建一个L2TP+IPSec VPN环境,并测试该VPN网络是否能够正常通讯,具体要求如下:

4.2 方案

准备实验所需的虚拟机环境,实验环境所需要的主机及对应的IP设置列表如表-3所示,正确配置IP地址、主机名称,并且为每台主机配置YUM源。

表-3 主机列表

实验拓扑如图-6所示。

图-6

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:部署IPSec服务

1)安装软件包

  1. [root@client ~]# yum -y install libreswan

2)新建IPSec密钥验证配置文件

  1. [root@client ~]# cat /etc/ipsec.conf                //仅查看一下该主配置文件
  2. .. ..
  3. include /etc/ipsec.d/*.conf                    //加载该目录下的所有配置文件
  4.  
  5. [root@client ~]# vim /etc/ipsec.d/myipsec.conf            
  6. //新建该文件,参考lnmp_soft/vpn/myipsec.conf    
  7. conn IDC-PSK-NAT
  8. rightsubnet=vhost:%priv                        
  9. also=IDC-PSK-noNAT
  10.  
  11. conn IDC-PSK-noNAT
  12. authby=secret                                    //加密认证
  13. ike=3des-sha1;modp1024                        //加密算法
  14. phase2alg=aes256-sha1;modp2048                //加密算法
  15. pfs=no
  16. auto=add
  17. keyingtries=3
  18. rekey=no
  19. ikelifetime=8h
  20. keylife=3h
  21. type=transport
  22. left=201.1.2.10                                //重要,服务器本机的外网IP
  23. leftprotoport=17/1701
  24. right=%any                                    //允许任何客户端连接
  25. rightprotoport=17/%any

3)创建IPSec预定义共享密钥

  1. [root@client ~]# vim /etc/ipsec.secrets                 //修改该文件
  2. include /etc/ipsec.d/*.secrets
  3. 201.1.2.10 %any: PSK "randpass"              //randpass为预共享密钥
  4.  
  5. //201.1.2.10是VPN服务器的IP
  6. //%any:任何客户端都可以连接服务器
  7. //PSK(pre share key)中文预共享密钥

4)启动IPSec服务

  1. [root@client ~]# systemctl start ipsec        
  2. [root@client ~]# netstat -ntulp |grep 500
  3. udp 0 0 127.0.0.1:4500 0.0.0.0:* 3148/pluto
  4. udp 0 0 192.168.4.10:4500 0.0.0.0:* 3148/pluto
  5. udp 0 0 201.1.2.10:4500 0.0.0.0:* 3148/pluto
  6. udp 0 0 127.0.0.1:500 0.0.0.0:* 3148/pluto
  7. udp 0 0 192.168.4.10:500 0.0.0.0:* 3148/pluto
  8. udp 0 0 201.1.2.10:500 0.0.0.0:* 3148/pluto
  9. udp6 0 0 ::1:500 :::* 3148/pluto

步骤二:部署XL2TP服务

1)安装软件包(软件包参考lnmp_soft/vpn/)

  1. [root@client ~]# yum install xl2tpd-1.3.8-2.el7.x86_64.rpm

2) 修改xl2tp配置文件(修改3个配置文件的内容)

  1. [root@client ~]# vim /etc/xl2tpd/xl2tpd.conf                //修改主配置文件
  2. [global]
  3. .. ..    
  4. [lns default]
  5. .. ..
  6. ip range = 192.168.3.128-192.168.3.254                    //分配给客户端的IP池
  7. local ip = 201.1.2.10                                 //VPN服务器的IP地址
  8.  
  9. [root@client ~]# vim /etc/ppp/options.xl2tpd            //认证配置
  10. require-mschap-v2                                         //添加一行,强制要求认证
  11. #crtscts                                                //注释或删除该行
  12. #lock                                                //注释或删除该行
  13.  
  14. root@client ~]# vim /etc/ppp/chap-secrets                    //修改密码文件
  15. jacob * 123456 *                //账户名称 服务器名称 密码 客户端IP

3)启动服务

  1. [root@client ~]# systemctl start xl2tpd
  2. [root@client ~]# ss -ntulp |grep xl2tpd        
  3. udp 0 0 0.0.0.0:1701 0.0.0.0:* 3580/xl2tpd

4)翻墙设置(非必需操作)

  1. [root@client ~]# echo "1" > /proc/sys/net/ipv4/ip_forward #开启路由转发
  2. [root@client ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 \
  3. > -j SNAT --to-source 201.1.2.10

步骤三:客户端设置

启动一台Windows虚拟机,将虚拟机网卡桥接到public2,配置IP地址为201.1.2.20。

1. 新建网络连接(参考案例2),输入VPN服务器账户与密码(参考案例2)。

设置VPN连接的属性,预共享密钥是IPSec配置文件中填写的randpass,具体操作如图-7所示。

图-7

2. 设置Windows注册表(不修改注册表,连接VPN默认会报789错误),具体操作如下:

连接VPN并测试网络连通性(参考案例2)。

5 案例5:编写systemd Unit文件

5.1 问题

本案例要求熟练掌握systemd进程如何管理其他服务器,具体要求如下:

5.2 方案

表-4 Unit文件语法描述

5.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:熟悉systemctl常用命令

1)命令列表

  1. [root@web1 ~]# systemctl                             #列出所有启动的服务
  2. [root@web1 ~]# systemctl status <服务名称>            #查看服务状态
  3. [root@web1 ~]# systemctl start <服务名称>        #启动服务状态
  4. [root@web1 ~]# systemctl stop <服务名称>        #关闭服务状态
  5. [root@web1 ~]# systemctl restart <服务名称>        #重启服务状态
  6. [root@web1 ~]# systemctl enable <服务名称>            #设置开机自启
  7. [root@web1 ~]# systemctl enable --now <服务名称>    #设置开机自启并启动
  8. [root@web1 ~]# systemctl disable <服务名称>        #禁止开机自启
  9. [root@web1 ~]# systemctl enable <服务名称>            #设置开机自启
  10. [root@web1 ~]# systemctl is-active <服务名称>        #查看是否激活
  11. [root@web1 ~]# systemctl is-enabled <服务名称>        #查看是否开启自启
  12. [root@web1 ~]# systemctl reboot                    #重启计算机
  13. [root@web1 ~]# systemctl poweroff                     #关闭计算机

步骤二:使用systemd管理shell脚本

1)编写shell脚本

  1. [root@web1 ~]# vim /root/test.sh
  2. #!/bin/bash
  3. while :
  4. do
  5. echo NB
  6. echo DACHUI
  7. done
  8. [root@web1 ~]# chmod +x /root/test.sh

2)编写Unit文件

  1. [root@web1 ~]# cp /usr/lib/systemd/system/{crond.service,test.service}
  2. [root@web1 ~]# vim /usr/lib/systemd/system/test.service
  3. [Unit]
  4. Description=my test script
  5. After=time-sync.target
  6. [Service]
  7. ExecStart=/root/test.sh
  8. ExecReload=/bin/kill -HUP $MAINPID
  9. KillMode=process
  10. [Install]
  11. WantedBy=multi-user.target

步骤二:使用systemd管理Nginx服务

1)编写Unit文件

  1. [root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
  2. [Unit]
  3. Description=The Nginx HTTP Server        #描述信息
  4. After=network.target remote-fs.target nss-lookup.target
  5. [Service]
  6. Type=forking
  7. #仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
  8. ExecStart=/usr/local/nginx/sbin/nginx
  9. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  10. ExecStop=/bin/kill -s QUIT ${MAINPID}
  11. [Install]
  12. WantedBy=multi-user.target