制作 Nginx的RPM包
- 应用场景
- 官方未提供RPM
- 官方RPM无法自定义
- 大量源码包 , 希望提供统一的软件管理机制
- 软件打包流程
- 准备源码软件
- 安装rpm-bulid
- 编写编译配置文件
- 编译RPM包
安装rpm-build
1) 安装rpm-build软件包
yum -y install rpm-build
2) 生成rpm-build目录结构
rpmbuild -ba nginx.spec #会报错,没有文件或目录
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) 安装依赖软件包
yum -y install gcc pcre-devel openssl-devel
2) rpm-build 创建RPM软件包
rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
ls /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-10.x86_64.rpm
安装软件
yum install /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-10.x86_64.rpm
rpm -qa |grep nginx
ls /usr/local/nginx/
VPN
-
VPN 虚拟专用网络
-
在 公用网络上 建立 专用私有网络 , 进行加密通讯
-
多用于为及图啊公司的各地子公司建立连接
-
连接完成后 , 各个地区的子公司可以像局域网一样通讯
-
在企业网络中有广泛应用
-
偶尔可以用于翻墙
-
目前主流的VPN技术 ( GRE , PPTP , L2TP+IPSec , SSL )
-
配置 GRE VPN
GRE 模块
-
Linux内核模块
- ip_gre
-
加载模块
- lsmod | grep ip_gre
-
modprobe ip_gre
- modinfo ip_gre
-
缺点 : 缺少加密机制
-
GRE VPN 环境
- 启用内核模块 ip_gre
- 创建一个VPN隧道
- 实现两台主机点到点的隧道通讯
-
方案
-
使用 lsmod 查看当前计算机已经加载的模块
-
使用 modprode 加载 Linux内核模块
-
使用 modinfo 可以查看内核模块的信息
-
1. 启用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
2. 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地址
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
ip add show tun0 #查看IP地址
3. web2 主机创建VPN
1) 加载模块ip_gre
2) 创建隧道
3) 启用隧道
4) 为VPN配置隧道IP地址
ip addr add 10.10.10.200/8 peer 10.10.10.100/8 dev tun0
ip add show tun0 #查看IP地址
5) 测试连通性
[root@web1 ~]# ping 10.10.10.200
[root@web2 ~]# ping 10.10.10.100
PPTP VPN
- 支持密码身份验证
- 支持MPPE加密
创建 L2TP+IPSec VPN
- L2TP建立主机之间的VPN隧道 , 压缩 , 验证
- IPSec提供数据加密 , 数据校验 , 访问控制的功能
- 搭建L2TP+IPSec VPN环境 , 并测试该VPN网络是否能够正常通信
- 使用 L2TP 协议创建一个支持身份验证与加密的隧道连接
- 使用 IPSec 对数据进行加密
- 为客户端连接的用户分配 10.10.10.10 的地址池
- 客户端连接的用户名为 : tom 密码为 : 123456
- 预共享密钥为 : randpass
- 方案
- 使用Web1作为服务端
- Windows10 作为客户端 , ip为 99 网段
- 加入99网段的虚拟网络
1. 部署 IPSec 服务
1) 安装
yum -y install libreswan #安装加密工具
cp myipsec.conf /etc/ipsec.d/
#复制配置IPSec密钥验证配置文件到ipsec.d目录
2) 配置
vim /etc/ipsec.d/myipsec.conf #修改配置第16行
left=192.168.99.100 #设置为本机ip(此处在真实环境为公网ip)
vim /etc/ipsec.secrets #修改配置,添加加密信息
192.168.99.100 %any: PSK "randpass"
#另起一行,添加99.100是本机ip,%any:是允许任何客户机连接本服务器,PSK(pre share key)是预共享密钥,randpass是密码,等windows客户连接vpn服务器时需要该密码
2. 安装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) 配置
vim /etc/ppp/options.xl2tpd #修改配置文件,将第10、16行注释掉,删除掉21行的#以及空格,就可以启用加密
#crtscts #注释该行
#lock #注释该行
3) 创建账户
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) 翻墙设置 ( 非必要操作 )
echo "1" > /proc/sys/net/ipv4/ip_forward #开启路由转发
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 \
> -j SNAT --to-source 201.1.2.10
编写 systemd Unit 文件
-
systemd 是 Linux 系统的一组基本构建块
-
提供一个系统和服务器管理
-
作为 PID1 运行并启动系统的其余部分进程
-
控制 systemd 的主要命令是 systemctl
-
Unit文件
- systemd 管理服务时会读取对应的配置文件 , 也就是 Unit 文件
- 读取 Unit 文件的目录 ( 优先级由高到低 )
- /etc/systemd/system ( 设置了开机自启的 Unit 文件 )
- /usr/lib/systemd/system ( 所有已经安装软件的 Unit 文件 )
-
Unit文件语法
- Description 描述信息
- After 在哪个服务之后启动
- Before 在哪个服务之前启动
- type 服务类型 , 默认为 simple
- EnvironmentFile 定义变量文件
- ExecStart 执行 systemctl start 需要启动的进程名称
- ExecStop 执行 systemctl stop 需要停止的进程名称
- ExecReload systemctl reload 需要执行的命令
- WantedBy 依赖当前服务的 tatget
1. 使用 systemd 管理 shell 文件
- 有Shell文件存在于 /root/test.sh , 权限给予 chmod +x 可执行权限
1) 编写 Unit文件
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 # kill 是发送信号
KillMode=process
[Install]
WantedBy=multi-user.target
2) 重新加载 Unit 文件
systemctl daemon-reload
2. 使用 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
[root@web1 ~]#systemctl start nginx #可以控制nginx开启了,这里如果无效可以尝试重启服务器