本文原地址: http://dns1.feitianzhi.com/boke/index.php/archives/59/

转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376


概述

      从windows8开始,微软以安全为由使用uefi替换了传统的bios引导系统,并从2021年启新生产的硬件不再支持传统bios,导致基于传统bios制作的小雉系统无法启动运行:
      uefi的安全启动原理是主板使用内置的微软公钥校验grub2等引导程序(未经过微软签名的grub2无法启动),然后grub2再校验内核的签名是否合法(不合法的内核签名无法启动),最后内核再校验驱动签名是否合法(不合法的驱动不会被加载);


解决方案

      redhat,ubuntu,rocky等linux厂家都是通过购买微软的签名让自己的系统可以支持uefi安全启动,小雉系统因成本原因(微软签名成本,内核及驱动签名等维护成本),先是考虑使用rocky linux等发行版本,但无法满足需要加载自定义驱动的ai项目(网上有让nvidia显卡驱动支持uefi安全启动的教程,但方法需要手动操作,不满足小雉自动化的要求),后考虑使用docker容器方式实现小雉的应用,但docker不能操作内核,也无法跨版本升级(如基于3做的应用无法一键升级为基于5.的应用,同时也不允许升级过程中断电,查分升级等),不满足小雉系统的全自动化要求(要求内核,驱动,glibc库,应用程序都能支持一键升级与回滚,允许升级过程中掉电);
      经尝试,小雉系统还是只能编译自已的linux,首版于2023年底完成uefi安全启动认证,满足小雉系统的全自动化要求(内核,驱动,glibc库,应用程序都能支持一键升级与回滚,也允许升级过程中掉电)


支持uefi安全启动的小雉系统

      从5.203.6912版本开始支持uefi安全启动,开启uefi安全启动的主机不能使用5.203.6912版本前的升级包;(附:升级包下载地址)
      小雉系统uefi-vmware镜像


小雉系统软件安装问题

      小雉系统不是面向用户使用的系统,是为服务商提供的可安全升级内核,驱动,系统库,及应用的升级系统,系统内软件的增加删除使用升级包的方式完成,以此保证测试环境与生产环境的一致性;关于升级相关可以参考"为什么无法跨centos、ubuntu、rocky linux 发行版本进行系统升级?"

猜您可能喜欢
小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html

本文原地址: http://www.feitianzhi.com/boke/index.php/archives/58/

转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376


概述

      视频储存分为ipc前端储存和后端集中储存,随着网络技术的发展,在具备网络条件的应用场景中应当使用集中储存,主要理由如下:

  1. 硬盘属于消耗品,在视频储存应用中长期读写,寿命短,集中储存可以节约去现场的人工成本;
  2. 已有网络的应用环境并不能因前端储存就不用部署网路或不用维护网路,前端储存只会增加运维成本;
  3. 集中储存一台服务器接多路相机,需要挂载多硬盘,集中储存服务器可以使用raid5,而前端储存冗余只能使用raid1,raid5比raid1更省磁盘空间;

      集中储存虽具备节约运维成本的优势,但因储存集中化,储存设备故障、服务器故障、软件bug等问题导致数据丢失的问题相较前端ipc储存更加严重,小雉视频系统针对这一缺陷提出了一份低成本的冗余方案--小雉视频共享储存;


小雉视频共享储存

      为避免单点故障,采用冗余方案是行业的通用做法,但视频属于大数据,提供多份磁盘储存冗余将显著增加项目建设成本,降低企业利润,小雉视频共享储存方案是在仅有一份磁盘储存的条件下实现服务器故障(硬件故障、软件bug)、磁盘储存故障(短暂掉电、重启、短暂断网、软件bug升级)视频数据不丢失,持续安全储存的低成本方案,其拓扑图如下:
小雉视频共享储存

  • 相机同时接入“小雉视频系统1”、“小雉视频系统2”、“小雉视频系统N”;
  • 每台小雉视频系统配一块专用储存,一块固态可达1000M读写性能,即一台服务器配一块固态硬盘即可;

固态硬盘价格

  • 系统启动后均使用专用储存进行储存;
  • “小雉视频系统1”、“小雉视频系统2”、“小雉视频系统N”使用“比特币”去中心化原理进行选举,获得选举权的主机挂载“共享磁盘阵列”,挂载成功后(如“小雉视频系统1”获得选举权)切换相机使用“共享磁盘阵列”进行视频储存,并合并“本机专用储存数据”到“共享磁盘阵列”;
  • 未获得选举权的主机(“小雉视频系统2”、“小雉视频系统N”)在收到客户端的视频请求时应自动重定向到获得选举权的主机(如“小雉视频系统1”);
  • 未获得选举权的主机(“小雉视频系统2”、“小雉视频系统N”)需要监控获得选举权的主机(如“小雉视频系统1”)的运行情况,如获得选举权的主机出现异常(包括软件bug、硬件故障、与共享磁盘阵列间连接故障、共享磁盘阵列故障),未获得选举权的主机(“小雉视频系统2”、“小雉视频系统N”)再次进行选举,获得选举权的主机(如“小雉视频系统2”)挂载“共享磁盘阵列”,挂载成功后切换相机使用“共享磁盘阵列”进行视频储存;
    -之前出现异常的主机(如“小雉视频系统1”)恢复后使用本地专用磁盘进行录像储存,加入未获得选举权的主机阵营,监控当前获得选举权的主机(如“小雉视频系统2”)的运行情况;

小雉视频共享储存性能指标

  1. 发现故障切换耗时--30S至120S,即出现故障后的120S时间内无法访问完整的录像视频,此段时间访问的视频是本地专用磁盘上的数据;
  2. 帧对齐--完美对齐,不多一帧也不少一帧,在发生切换时需要把“本地专用储存”上的视频合并到“共享磁盘阵列上”使用AI检测,即对图像内容进行检测,计算出精确的边界,不受时间精度的影响(通用的补录方案是使用时间戳比对),保证视频拼接完美;

方案对比

特性小雉视频共享储存ipc补录方案磁盘冗余方案主从同步方案(定时器)
运维成本低(无需前端运维)高(需要前端运维)低(无需前端运维)低(无需前端运维)
磁盘成本低(一份磁盘+每机专用储存)较低(一份磁盘+每IPC SD卡)高(多份磁盘)低(一份磁盘+每机专用储存)
响应时间低(30-120S)较低(数分钟)非常低(无须切换合并)高(数小时)
合并成本低(仅在切换时发生)较低(合并数据比较多)非常低(无须合并)高(需要在大范围内检索)
合并效果完美(AI合并,完美帧对齐)存在缺失(一般采用时间戳对比,不多数据就少数据,因h264、h265需要关键帧解码问题,大部分时间会丢2S左右数据)完美(无须合并)存在缺失(一般采用时间戳对比,不多数据就少数据,因h264、h265需要关键帧解码问题,大部分时间会丢2S左右数据)

      综上,“小雉视频共享储存”是一种成本低效果好的均衡方案。

猜您可能喜欢
小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html

本文原地址: http://www.feitianzhi.com/boke/index.php/archives/58/

转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376


概述

      小雉系统可从线上系统制作安装包到U盘,制作的安装包可用于新系统的安装;
      小雉系统只提供升级包,对应的安装包均是客户在应用升级包后按本文或http://www.feitianzhi.com/boke/index.php/archives/50/自行制作;


步骤

  1. http://www.feitianzhi.com/boke/index.php/archives/14/ 把系统升级到期望的版本;
  2. 准备一个剩余空间4G的u盘,需要格式化为fat32;
  3. 在U盘根目录创建一个名为"getimg"的空文件;
  4. 把U盘插入线上系统;
  5. 等待系统发出"嘟"的声音后拔出U盘,u盘的内容如下图所示

小雉系统U盘安装包制作

  1. http://www.feitianzhi.com/boke/index.php/archives/11/云服务器安装章节安装系统;

猜您可能喜欢
小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
小雉系统U盘安装包制作: http://www.feitianzhi.com/boke/index.php/archives/57/
小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html

本文原地址: http://feitianzhi.com/boke/index.php/archives/56/

转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376


背景

      linux分为很多发行版本,发行版本的内核可以升级,比如centos7可以使用kernel 4.,5.的内核(官方默认为3.*),但发行版本间确无法升级,比如centos7不能升级为ubuntu16.04,切换发行版本只能重装系统,甚至在同一发行版本间也不能升级,比如centos 8无法升级为rocky linux 9;


原因分析

      linux发行版本虽都使用同一内核,但应用层的构架没有统一标准,内存的配置文件也是千差万别,本处以ssh连接为例,在centos 8中的ssh_keys用户组号为982,而rocky linux 9中的ssh_keys用户组号为994,即使其他数据完全一样,仅这一区别,升级后直接导致ssh服务不可用;
centos 8无法升级为rocky linux 9


版本不能升级的影响

  1. 驱动问题,新硬件的驱动不能支持老版本,如intel的千兆wifi芯片,ax200、ax201、ax210、ax211只能支持5.2以上的内核,centos7(3.内核),centos8(4.内核)无法使用,虽然可以升级内核解决,但非官方原版,其稳定性与兼容性无法保证,使用官方原版可以共享他人成果,bug修正;
  2. 生态问题,linux发行版本有其支持维护生命周期,比如centos8于2021年12月停止维护,停止维护后dnf(yum)安装软件包受限,运维成本增加,新版本的应用软件也不会再针对centos8进行测试;
  3. 软件臃肿,最新的软件基于rocky linux9适配,但因项目存在centos7、centos8、ubuntu16.04等历史系统,软件不得不进行适配,增加工作量,同时需要大量的测试(开发人员需要熟悉多种发行版本,并针对调整);
  4. 持续消耗的运维成本,历史遗留的老系统需要持续维护(除非解约)或重新装机(每3年一次系统更替,远程机票出差等运维成本高昂);

如何实现跨linux发行版本升级

方案一:差异升级 方案二:镜像升级
描述 找出原系统A与目标系统B之间的差异,写脚本进行修改;
如ssh_keys用户组号变动需要修改group数据,并把与之相关的文件用户组号进行修改(有哪些相关文件?头疼);
典型商业案例:Redhat服务,redhat公司可为付费用户提供此升级方案
原系统A为A镜像,目标系统B为B镜像,系统升级即为镜像切换,只需继承网路配置和root密码(属于配置数据),其余部分之间替换
能否安全升级 因glibc等核心库的依赖(如只替换部分断电,将导致系统无法启动),难以安全升级 可采用双镜像设计,切换时先经行校验,实现安全升级
能否回滚 脚本依赖A与B之间的差异,升级与回滚逻辑不一致,难以实现 回滚也是镜像切换,与升级逻辑一致,可升级即可回滚
结论 适合redhat等原创linux的公司 适合做应用的公司,继承开源版本系统的所有功能,定制自己需要的应用部分

期望的方案

  1. 软件开发只需要考虑特定版本进行适配,如原来基于centos8开发的应用,现在换rocky linux9系统后,软件仅需要考虑rocky linux9系统,删除与centos8相关的代码,无须兼容centos8;
  2. 系统可以跨发行版本直接升级,包含引导、内核、驱动、虚根、应用软件;比如原来是centos8系统(源系统为centos8集成好所有应用的一个镜像),一键升级为rocky linux9(新系统是rocky linux9集成好所有应用的一个镜像);
  3. 系统可以跨发行版本进行降级;比如系统已升级为最新版本的系统rocky linux9,但发现某应用A工作不正常(可能A未适配好rocky linux9),此时可以一键降级为centos8系统(应用A也降级为centos8适配过的版本),测试A的工作效果(让应用A立即恢复正常或测试A的工作效果以便在rocky linux9调整应用A,让应用A在rocky linux9中工作正常);
  4. 系统升级保证安全,允许升级过程断电,升级过程中网络故障自动校正(比如某软件包,驱动传输过程中被篡改,系统能自动识别,并拒绝升级);
  5. 故障恢复机制,应用运行过程中会产生临时文件,也可能因bug修改系统中关键文件,如不适当修改/etc中文件、修改驱动导致系统运行故障;故障恢复机制让系统具备系统故障时重启后自动恢复自初始状态(除应用指定的数据目录、网络配置、系统密码外的所有目录与文件恢复自初始状态),保证系统重启肯定可以正常运行;

小雉系统解决方案

      “小雉系统”是按以上需求的设计的一个镜像升级解决方案,适合ubuntu、centos、rocky linux、debian等linux发行版本;“小雉系统”仅是提供一个打包方案,无须重新编译原版系统的任何代码,稳定性、驱动、使用方法均与原发行版本完全一致(因“小雉系统”只提供打包方案,并不定义任何启动逻辑);
      “小雉系统”解决方案开源,项目地址:
            github https://github.com/feitianzhi/xiaozhios
            gitee https://gitee.com/feitianzhi/xiaozhios
猜您可能喜欢
小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html

本文原地址: http://www.feitianzhi.com/boke/index.php/archives/55/

转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376


背景

      之前一直使用腾讯企业邮箱,最近腾讯强制绑定微信、手机验证让人不爽;


方案

      本方案是基于centos8.1进行定制,增加邮件相关的组件(大概18M),实现基础的邮件收发功能;
小雉系统邮件服务器
      本文演示以vultr的vps为例搭建邮件服务器;


步骤

  1. 系统安装,配置网络,配置硬盘,参考http://www.feitianzhi.com/boke/index.php/archives/11/ 进行安装;
  2. 升级,在http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html 选择 4.181.1507 以后的版本参考http://www.feitianzhi.com/boke/index.php/archives/14/ 进行升级;
  3. 使用ftp把https://download.csdn.net/download/zhangrui_fslib_org/87637156的mysql初始数据库上传到ftp://admin:12345@ip的根目录,如果存在权限问题,可以ssh登录(root/12345)后chmod 777 /fs/project/data(ftp的根目录);
  4. ssh登录(root/12345)主机,执行

    cd /fs/project/data;
    gzip -cd mysql-mail.cpio.gz|cpio -idvm;
    sync;
    reboot;

  5. 使用浏览器访问http://ip/mailadmin/index.php 管理域名服务器(admin/admin123),包括添加域名,添加邮箱;
  6. 使用浏览器访问http://ip/maila/index.php 登录邮箱,进行邮件收发(账户密码为第5步添加的用户名密码);

猜您可能喜欢
小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html




序号类别 模块名称 依赖模块 简要说明 备注
1基础模块 FsObject系列
  • 提供线程内的内存池及引用计数实现
  • 提供多线程的内存池及引用计数实现
  • 提供数组链表和排序方法
  • 提供字符串,二进制,结构体链表排序
  • 必须
    2 可变栈
  • 提供一个在栈上动态申请空间的方法
  • 申请的空间内存无须释放
  • 空间自动调整到实际需要的大小
  • 可使用malloc和free替换
    3 通用加解密模块 md5、sha、crc、base64、摘要认证、3Bit、4Bit等加密解密功能 必须
    4 EBML
  • 提供储二进制、整数、小数、字符串的嵌套数据结构
  • 提供ebml序列化与反序列化
  • 提供加密与解密功能
  • 必须
    5 xml EBML
  • 提供xml序列化与反序列化
  • 提供xml同ebml互转的功能
  • 可选
    6 json EBML
  • 提供json序列化与反序列化
  • 提供xml同ebml互转的功能
  • 可选
    7 DNS
  • 提供异步的DNS请求功能(解决先系统请求dns卡顿的问题)
  • 可选
    8 Config
  • EBML
  • xml
  • json
  • 提供储二进制、整数、小数、字符串自描述实现
  • 提供模板自描述实现
  • 提供二进制、整数、小数、字符串的读取功能
  • 提供模板的读取功能
  • 提供从ebml、xml、json中导入数据功能
  • 提供导出ebml、xml、json数据功能
  • 兼容性配置需要
    9异常处理 监控模块 xml
  • 提供线程创建顺序跟踪
  • 提供线程资源占用统计
  • 提供线程死锁诊断
  • 提供实时报表功能
  • 提供循环标记功能(不打印,在出问题后显示)
  • 可选
    10 崩溃反编译模块 监控模块
  • 崩溃自动进入调试模式
  • 提供调用堆栈、源代码的行号
  • 显示崩溃时的线程信息
  • 重要的异常内存或结构落盘
  • 可选
    11 模块化日志
  • 为每个模块提供单独的日志级别控制
  • 运行时可修改任意模块的日志级别
  • 提供异常关注点设置
  • 可选
    12 日志捕捉模块
  • 捕捉程序的标准输出或错误发送给日志服务器
  • 记录日志并管理日志大小
  • 可选
    13 日志服务器
  • 收取与缓存日志数据
  • 为监控模块提供一个交互接口
  • 过滤模块化日志产生的关注点并写入硬盘
  • 检测程序的状态,把崩溃时的日志信息写入硬盘
  • 日志实时信息查看
  • 日志历史信息查看
  • 可选
    14 硬件看门狗
  • 判断系统是否正常
  • 在系统正常时通过驱动重置硬件计时器
  • 处理父进程变动异常
  • 可选
    15框架相关 多端口汇聚
  • 对收到的数据进行预判断(遍历7层协议库)把连接交响应的应用处理(如80端口上收到http数据让nginx处理,收到php数据让php-fpm数据,收到sip指令交gb28181模块处理)
  • 可同时绑定多个端口,数据由哪个模块处理与端口号无关,只与内容相关
  • 必须
    16 配置服务中心
  • Config
  • 多端口汇聚
  • 提供配置注册接口(每个模块只声明自己需要的参数)
  • 汇聚所有模块的需求生成配置
  • 从硬盘上读取历史配置,导入新配置中并处理兼容性问题
  • 响应网络请求,导出xml,json配置发送给客户端或接受客户端的配置数据并写入硬盘
  • 在配置发生变化(客户端发送新配置,或模块申请新参数)时,自动处理历史配置与新配置结构的差异,并把处理结果通知所有应用模块(有调用注册接口的模块),让模块同步配置
  • 提供别名设置,无论逻辑上数据需要中转多少次,执行始终直接操作最终对象
  • 必须
    17 接口管理中心 配置服务中心
  • 提供本地接口注册(模块间函数通信的一个实现,允许模块乱续启动)
  • 提供本地联接接口,调用后直接连接到具体功能的函数指针
  • 提供网络接口注册(多模块共享一个端口的实现)
  • 自动判断xml和json,转ebml后提交给各模块处理(注册接口的模块)
  • 收集模块的ebml处理结果自动转xml或json回执给客户端
  • 帮助模块完成需要等待的事项,比如视频合成后把合成地址回执给客户端
  • 必须
    18 掩码通信服务
  • 本服务为一个多对多的开关量实现
  • 允许多个模块同时注册同一个掩码也允许多个模块同时联接同一个掩码,在掩码发生改变时(注册的任何一个模块都可能设置掩码值),本模块计算其是否发生0与非0转换,转换时通知所有联接此掩码的对象
  • 本模块的典型应用为按需拉流
  • 必须
    19 开方分组
  • 因本框架面向算法设计,需要对对象进行遍历,而在大型流媒体应用中,如16万个相机只有1个在拉流,也需要遍历16万相机,开方分组是把16万个相机分为400组,每组400个相机,把遍历数由16万降为800
  • 可选
    20视频相关 h264 FsObject系列
  • 解析h264解构,实现FsObject系列的派生
  • 解码h264
  • 可选
    21 h264编码 FsObject系列
  • 编码h264
  • 可选
    22 h265 FsObject系列
  • 解析h265解构,实现FsObject系列的派生
  • 解码h265
  • 可选
    23 h265编码 FsObject系列
  • 编码h265
  • 可选
    24 mkv
  • H264
  • h265
  • 把h264封装为mkv
  • 把h265封装为mkv
  • 从mkv读取h264
  • 从mkv读取h265
  • 可选
    25 rtsp拉流模块
  • FsObject系列
  • DNS
  • 使用rtsp协议拉取摄像头的视频流 可选
    26 rtsp推流接收模块 rtsp拉流模块 使用rtsp协议接收其他平台的rtsp推流,输出与rtsp拉流模块相同 可选
    27 rtsp流分发模块 FsObject系列 使用rtsp协议分发rtsp直播流 可选
    28 rtsp推流模块
  • rtsp流分发模块
  • DNS
  • 使用rtsp协议推送视频流到支持推流的rtsp服务器 可选
    29 rtsp回放模块
  • rtsp流分发模块
  • MKV
  • 根据rtsp协议异步读取mkv中指定部分
  • 响应rtsp的跳转
  • 自动适配rtsp的网络速率
  • 可选
    30 rtsp kcp模块
  • 实现抢占他人网速收发数据(开启时在网络带宽有限时,会导致他人严重卡顿)
  • 可降低网络延时40%
  • 可选
    31 hls流分发模块 FsObject系列
  • 使用hls协议分发hls直播流
  • 可选
    32 hls回放模块
  • hls流分发模块
  • MKV
  • 根据hls协议异步读取mkv中指定部分
  • 响应hls的跳转
  • 自动适配hls的网络速率
  • 可选
    33 rtmp拉流模块
  • FsObject系列
  • DNS
  • 使用rtmp协议拉取摄像头的视频流 可选
    34 rtmp推流接收模块 rtmp拉流模块 使用rtmp协议接收其他平台的rtmp推流,输出与rtmp拉流模块相同 可选
    35 rtmp流分发模块 FsObject系列 使用rtmp协议分发rtmp直播流 可选
    36 rtmp推流模块
  • rtmp流分发模块
  • DNS
  • 使用rtmp协议推送视频流到支持推流的rtmp服务器 可选
    37 sip服务器 FsObject系列
  • 先外注册
  • 接受其他服务器注册
  • 处理sip指令
  • 可选
    38 gb28181拉流模块 sip服务器
  • 获取其他服务器的流信息
  • 使用tcp或udp拉取其他gb28181平台的直播视频流
  • 自适应rtcp协议
  • 可选
    39 gb28181流分发模块 sip服务器
  • 响应其他平台的取流请求,按要求使用tcp拉、tcp推、udp推方式分发直播流
  • 自动判断对端对rtcp的支持情况
  • 对端支持rtcp时应发送rtcp指令
  • 可选
    40 gb28181回放模块 gb28181流分发模块
  • 根据gb28181协议异步读取mkv中指定部分
  • 响应gb28181的跳转
  • 自动适配gb28181的网络速率
  • 提供储存查询
  • 可选
    41 Inflray拉流模块 FsObject系列 拉取Inflray视频流 可选
    42 文件点播模块 mkv
  • 实现rtsp的文件点播请求
  • 实现hls的文件点播请求
  • 可选
    43 相机控制级联 FsObject系列
  • 实现相机控制的抽象
  • 提供所有控制接口的网络控制
  • 提供所有控制接口的本地联接控制
  • 提供所有控制接口的多机级联控制
  • 提供外挂控制接口
  • 控制协议转换的桥梁(如onvif转gb28181)
  • 可选
    44 onvif控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机预置位
  • 实现相机图像参数控制
  • 实现相机ptz的获取与调取
  • 可选
    45 宇视控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机预置位
  • 实现相机图像参数控制
  • 实现相机ptz的获取与调取
  • 可选
    46 gb28181控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机转动输出(如onvif进gb28181出)
  • 实现相机缩放输出(如onvif进gb28181出)
  • 可选
    47 gb28181控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机转动输出(如onvif进gb28181出)
  • 实现相机缩放输出(如onvif进gb28181出)
  • 可选
    48 Inflray控制模块 相机控制级联 Inflray全景相机控制 可选
    49 dib模块 FsObject系列
  • 实现FsObject系列的派生
  • 图像颜色的变换
  • 图像缩放
  • 图像旋转
  • 图像画线
  • 输出bmp图片
  • 加载bmp图片
  • 可选
    50 jpg模块 dib模块
  • 实现FsObject系列的派生
  • 解码为dib
  • 压缩dib为jpg
  • jpg扩展ebml信息
  • 从jpg中读取ebml信息
  • 可选
    51 点阵写字模块 dib模块
  • 从矢量字库中生成点阵字
  • 缓存点阵字
  • 使用and,or,xor等方式把点阵字叠加到dib上
  • 可选
    52 本地拉取模块
  • dib模块
  • 接口管理中心
  • 可拉取本地一路流,实现图像拷贝、旋转拉伸、插帧、虚拟通道等业务
  • 可同时拉取多路视频,进行拼接、旋转拉伸、插帧等业务
  • 可选
    53 本地推送模块
  • dib模块
  • 接口管理中心
  • 同时推送一路或多路流到此虚拟通道
  • 虚拟通道内可进行全景帧拼接业务
  • 虚拟通道内可实现基站切换时虚拟通道动态关联业务
  • 可选
    54 相机状态检测模块
  • jpg模块
  • 接口管理中心
  • 轮巡所有相继
  • 以能否取到关键帧为标准判定是否在线
  • 缓存关键帧
  • 提供网络接口,按需解码为jpg或bmp
  • 可选
    55 视频转码模块
  • jpg模块
  • h264
  • h265
  • 自动选择合适的图像变换路线(如同时有h265和h264时转yuv420P,程序自动调用h264解码实现–因为h264解码开销更低)
  • 自动评估cpu性能,在串行与并行间自动切换(比如h264转yuv420P需求中,在cpu性能好时应使用单线程解码,在cpu吃力时应对h264自动进行分组后使用多核处理)
  • 在相机多,cpu核心少时每个核心应自动轮换处理各相机需要变换的业务,即允许单核处理多相机的业务
  • 可选
    56 视频水印模块
  • dib模块
  • 点阵写字模块
  • 自动选择合适的图像,按配置写响应的信息,如有ycc而没有yuv420P,应直接在ycc上写字,而不强求yuv420P
  • 可选
    57 视频记录模块
  • mkv
  • FsObject系列
  • 把h264或h265写入mkv
  • 缓存最近10 min写入硬盘数据的帧地址
  • 提供截取短视频业务
  • 维护录像记录信息
  • 提供录像信息查询功能
  • 自动评估硬盘性能,尽量尽早写入硬盘,在性能不足时自动合并写入数据,用大块写入代替碎片写入
  • 监听回放业务需求,在有回放读取时,自动暂停写入业务,在读到足够数据后再写入(优化读取)
  • 可选
    58 磁盘管理程序 FsObject系列
  • 一个基于预测的磁盘管理程序–不需要纪录所有文件名及文件的大小实现删除最早数据的实现(因如有1000万条数据,每条100字节,仅记录就需要1G,同时还有数据记录与硬盘数据是否一致的问题(机器掉电会导致其不一致))
  • 统计与学习文件系统的变化规律,找到变化快的和变化慢的目录
  • 在变化快的目录中发现新文件,目录大小变大
  • 在空间不足时删除变化目录慢目录中的数据
  • 可选
    59 代理回放管理模块
  • mkv
  • FsObject系列
  • 一个第三方储存映射到本地的方案实现
  • 定义第三方储存的需要实现的接口
  • 处理具体的回放类请求,创建回放任务与管理回放任务
  • 实现cdn加速回放
  • 可为不支持倒放的第三方储存实现倒放功能
  • 可选
    60 代理回放任务模块 代理回放管理模块
  • 响应具体的回放任务
  • 查找硬盘缓存,有缓存直接使用缓存
  • 播放位置无缓存或缓存不足时,调用“代理回放管理模块”的抽象接口获取数据补充缓存
  • 支持对齐算法,把缓存同线上获取数据边界对齐,自动拼接视频
  • 可选
    61 大华SDK代理回放 代理回放管理模块
  • 实现“代理回放管理模块”的抽象接口
  • 实现大华sdk回放转rtsp回放
  • 实现大华sdk回放转hls回放
  • 实现大华sdk回放转gb28181回放
  • 可选
    62 gb28181代理回放 代理回放管理模块
  • 实现“代理回放管理模块”的抽象接口
  • 实现gb28181回放转rtsp回放
  • 实现gb28181回放转hls回放
  • 实现gb28181回放进gb28181回放出
  • 可选
    63DDNS服务器 DDNS服务器 FsObject系列
  • 同时支持tcp和udp
  • 支持动态dns设置
  • 支持多线检测以最新的为准,如域名y通过A线先报告a,后通过报告ip为b,则查询域名y的ip恒为b
  • 可选
    64网络代理 KVPN服务器 FsObject系列 一个可以使用websocket,http,传输任意数据的代理功能,可在受限网络中打通网络中传输数据(如网络只能使用http,那海康sdk的8000端口的数据则无法传输,使用kvpn后海康sdk的8000端口的数据会以http的方式传输) 可选
    65 KVPN客户端 FsObject系列 可选
    66操作系统 定制系统
  • 基于centos裁剪的一个100M左右的基础系统
  • 集成ftp、ssh、git、nginx、opencv及视频应用后约230M
  • 系统采用双系统设计,重启后除数据盘外的所有操作都会丢失,保证出现异常时重启肯定可以正常启动
  • 可定制启动logo
  • 可选
    67 打包工具
  • 把引导、内核、虚根、驱动、库及应用程序打包为一个升级包
  • 升级包采用jpg封装,可定制企业专署封面
  • 制作升级包时可输入密码,同时会根据密码生成一个系统标识(操作系统应集成此标识),升级包的标识与系统标识必须一致才能升级
  • 系统标识通过hash计算,无法通过hash反推密码,制作升级包时使用的密码应严格保密
  • 定制系统的组件
    68 系统升级服务端
  • 实现双系统,提供不怕掉电的免维护系统
  • 校验系统,选择完整系统启动,在有新版本(校验是完整的)时,切换新版本系统启动
  • 与客户端升级工具交付,差分升级系统(只上传有差异部分,把有差异部分写入备份系统后重启校验完成升级)
  • 69 授权管理系统
  • 读取硬件信息生成SN
  • 使用激活码校验,判断激活码有效后写响应信息授权系统
  • 可选
    70客户端 升级工具
  • 打开升级包,读取升级包信息
  • 提取升级包的系统标识与服务端校验,一致后执行差分升级
  • 支持多服务器同时升级
  • 多服务器同时升级只占用一份内存,如升级包为200M,同时升级1000台主机,也只占用200M内存
  • 支持批量导入主机
  • demo,仅提供合作客户
    71 配置工具 Config Config数据结构实现的一个图形demo
    72 调试工具 接口管理中心
  • 图形渲染注册到“接口管理中心”的所有接口
  • 展示所有接口的参数解释、取值范围
  • 测试所有接口的效果
  • 动态生成所有接口的c语言调用demo源码
  • 73 激活工具
  • 获取系统的SN
  • 传送激码激活系统
  • 74 播放库
  • 视频转码模块
  • MKV
  • rtsp直播
  • rtsp回放
  • 视频拖动
  • 视频快放
  • 视频慢放
  • 视频单帧
  • 视频倒放
  • 视频快速倒放
  • 视频单帧倒放
  • 可选


    本文目的是为服务器配置可供多种操作系统访问的 IKEv1/IKEv2 接入,需要支持 Radius 认证;按照本文配置,没有进行流量统计的功能,如果有相关需求,请自行配置 Radius 和 StrongSwan 的 eap-radius 组件。
    本文实现的 Radius 认证方式有:
    EAP-MSCHAPv2(用户名+密码)、EAP-TLS(证书)、EAP-TTLS(证书)、PEAP(用户名+密码)

    已知的问题
    PEAP本可以支持两种认证方式:PEAP-EAP-MSCHAPv2(用户名+密码)与PEAP-EAP-TLS(证书)

    但 FreeRadius 在PEAP中仅支持PEAP-EAP-MSCHAPv2与PEAP-EAP-TLS必须二选一而不能同时启用。

    FreeRadius 推荐且默认为PEAP-EAP-MSCHAPv2,鉴于用户使用PEAP-EAP-MSCHAPv2是主流,且后者替代品丰富,所以放弃对PEAP-EAP-TLS的支持。但出于测试的目的,笔者尝试配置PEAP-EAP-TLS却未能成功。

    系统环境
    公有云上的 CentOS 7 x86_64(非 OpenVZ),双核,2 GB 内存,SELinux 不开启

    配置StrongSwan
    说明:不使用 yum 直接安装的原因是在库中的二进制 StrongSwan 的参数配置导致无法通过 OS X 与 iOS 连接

    配置环境 & 编译
    编译安装默认的配置文件路径为 /usr/local/etc,通过 yum 安装的默认为 /etc/strongswan

    yum -y install pam-devel openssl-devel make gcc curl wget
    wget --no-check-certificate https://download.strongswan.org/strongswan-5.3.5.tar.gz
    tar zxvf strongswan-5.3.5.tar.gz
    cd strongswan-5.3.5
    ./configure --enable-eap-identity --enable-eap-md5 \
    --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \
    --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \
    --enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock --enable-unity \
    --enable-certexpire --enable-radattr --enable-swanctl --enable-openssl --disable-gmp
    make && make install
    配置证书
    需要生成的证书包括根证书(CA)、服务器证书(Server)和客户端证书(Client),客户端证书可用于通过证书认证。

    生成根证书
    ipsec pki --gen --outform pem > ca.key.pem
    ipsec pki --self --in ca.key.pem --dn "C=CN, O=VisionSrv, CN=VisionSrv CA" --ca --lifetime 3650 --outform pem > ca.cert.pem
    生成服务器证书
    ipsec pki --gen --outform pem > server.key.pem
    ipsec pki --pub --in server.key.pem --outform pem > server.pub.pem
    ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in server.pub.pem --dn "C=CN, O=VisionSrv, CN=dev.panic.ml" --san="dev.panic.ml" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
    生成客户端证书
    ipsec pki --gen --outform pem > client.key.pem
    ipsec pki --pub --in client.key.pem --outform pem > client.pub.pem
    ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem --cakey ca.key.pem --in client.pub.pem --dn "C=CN, O=VisionSrv, CN=dev.panic.ml" --outform pem > client.cert.pem
    生成 p12 证书可以设置密码,请注意:OS X 无法导入密码为空的 p12 证书
    openssl pkcs12 -export -inkey client.key.pem -in client.cert.pem -name "VisionSrv Client Cert" -certfile ca.cert.pem -caname "VisionSrv CA" -out client.cert.p12
    复制证书
    说明:

    (1)如果你希望用户通过用户名 + 密码连接 IKEv2,请将 ca.cert.pem 发送给客户并要求客户安装证书
    (2)如果你希望用户直接通过证书登陆,请将 client.cert.p12 发送给客户并要求客户安装证书
    (3)如果是 iOS,用户还需要安装 ca.cert.pem
    (4)如果是 OS X,用户需要设置 CA 根证书为可信
    cp -r ca.key.pem /usr/local/etc/ipsec.d/private/
    cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/
    cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
    cp -r server.key.pem /usr/local/etc/ipsec.d/private/
    cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
    cp -r client.key.pem /usr/local/etc/ipsec.d/private/
    配置 ipsec.conf
    通过编译安装,ipsec.conf 路径为 /usr/local/etc/ipsec.conf,通过 yum 安装路径为 /etc/strongswan/ipsec.conf

    config setup

    uniqueids=never 
    

    conn cisco_cert

    keyexchange=ikev1
    fragmentation=yes
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=pubkey
    rightauth2=xauth-radius
    rightsourceip=10.31.2.0/24
    auto=add
    

    conn cisco_xauth_psk

    keyexchange=ikev1
    left=%defaultroute
    leftauth=psk
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=psk
    rightauth2=xauth-radius
    rightsourceip=10.31.2.0/24
    auto=add
    

    conn standard_ikev2

    keyexchange=ikev2
    ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!
    esp=aes256-sha256,3des-sha1,aes256-sha1!
    rekey=no
    left=%defaultroute
    leftid=@dev.panic.ml
    leftsendcert=always
    leftfirewall=yes
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=eap-radius
    rightsourceip=10.31.2.0/24
    eap_identity=%any
    dpdaction=clear
    fragmentation=yes
    auto=add

    配置 strongswan.conf
    通过编译安装,ipsec.conf 路径为 /usr/local/etc/strongswan.conf,通过 yum 安装路径为 /etc/strongswan/strongswan.conf

    charon {

    load_modular = yes
    duplicheck.enable = no #是为了你能同时连接多个设备,所以要把冗余检查关闭
    compress = yes
    plugins {
        include strongswan.d/charon/*.conf
        eap-radius {
            servers {
                server-a {
                    address = YourRadiusServer
                    secret = YourRadiusSecret
                    # nas_identifier = ipsec-gateway
                }
            }
        }
    }
    dns1 = 114.114.114.114
    dns2 = 8.8.8.8
    # for Windows WINS Server
    nbns1 = 114.114.114.114
    nbns2 = 8.8.8.8

    }

    include strongswan.d/*.conf
    配置 ipsec.secrets
    通过编译安装,ipsec.conf 路径为 /usr/local/etc/ipsec.secrets,通过 yum 安装路径为 /etc/strongswan/ipsec.secrets

    : RSA server.key.pem
    : PSK "visionsrv"
    : XAUTH "visionsrv"
    test : EAP "123456"
    我们在这里增加了一个测试账号,但在 Radius 认证中并不生效,如果需要使用此认证用于测试或不需要使用 Radius 进行认证,请将 ipsec.conf 中的 rightauth(或 rightauth2) 值改为 eap-mschapv2(eap-radius) 或 xauth(xauth-radius)

    注意: 在停用 Radius 认证后,使用本文配置将无法通过客户端证书直接连接 VPN 服务器。如有需要,请自行研究配置方式。 下面是一些直接使用证书认证的参考资料: StrongSwan Android、Windows 身份验证(使用计算机证书)-> IKEv2 Certificate -> rightauth=pubkey StrongSwan Android、OS X、iOS -> EAP-TLS -> rightauth=eap-tls Linux 通过 NetworkManager-strongswan 支持上述所有方式

    配置防火墙
    本文使用的是 CentOS 7 默认的防火墙 firewalld,如需要 iptables 请查看官方文档或参阅 Google

    firewall-cmd --add-port=500/tcp --permanent
    firewall-cmd --add-port=500/udp --permanent
    firewall-cmd --add-port=4500/tcp --permanent
    firewall-cmd --add-port=4500/udp --permanent
    firewall-cmd --add-masquerade --permanent
    firewall-cmd --reload
    启动服务
    systemctl start strongswan
    systemctl enable strongswan
    配置 Radius
    安装并配置 FreeRadius

    yum install -y freeradius*
    echo 'test ClearText-Password := "123456"' >> /etc/raddb/users

    配置 Radius 客户端,0.0.0.0 替换为 VPN 服务器地址,123456 替换为您想设置的 Radius 连接密钥

    cat >> /etc/raddb/clients.conf < <-EOF
    client 0.0.0.0 {

        secret = 123456
        shortname = 0.0.0.0
        nas_type = other

    }
    EOF
    请将 CA 根证书ca.cert.pem放置在/etc/raddb/certs/ca.pem(本项如果不需要通过客户端证书连接可以不配置)

    请将服务器证书server.cert.pem放置在/etc/raddb/certs/server.pem

    服务器私钥server.key.pem放置在/etc/raddb/certs/server.key

    完成后,请执行命令cat /etc/raddb/certs/server.key >> /etc/raddb/certs/server.pem

    2016-5-8 更新: 新版 OS X 对用户名+密码不再要求强制校验服务器身份,所以不使用证书登陆可以不配置 RADIUS 证书。

    注意
    不配置 Radius 服务器证书时 Windows PEAP 连接将弹出提示(提示信息为“信息不足,无法验证服务器”),OS X 将拒绝连接。

    需要说明的是,这并不是一般的 Radius 服务器证书配置方法,但出于简单、实用且易于描述的考虑我们这样做以免您产生混淆。

    正常的做法是通过通用的 CA 根证书、 CA 私钥、 CSR 文件以及 FreeRadius 内置的私钥为 Radius 服务器生成一个证书。

    这样生成的服务器证书可以被 VPN 客户端的 PEAP 判断为合法的服务器并进行连接。

    OS X 使用 PEAP-EAP-MSCHAPv2(用户名)和 EAP-TLS(证书)并强制要求校验服务器合法性。

    Windows 可以选择使用 PEAP-EAP-MSCHAPv2(用户名)和 EAP-TLS(证书),但配置更自由,更具灵活性。

    在本文所述的方法中,因 server.pem 中的私钥是未加密的,所以 eap 配置文件中的私钥密码是不产生作用的。

    配置防火墙

    Radius 认证端口

    firewall-cmd --add-port=1812/udp --permanent

    Radius 计费端口(本文不会使用)

    firewall-cmd --add-port=1813/udp --permanent
    firewall-cmd --reload
    客户端配置
    说明:

    (1)如果你希望用户通过用户名 + 密码连接 IKEv2,请将 ca.cert.pem 发送给客户并要求客户安装证书
    (2)如果你希望用户直接通过证书登陆,请将 client.cert.p12 发送给客户并要求客户安装证书
    (3)如果是 iOS,用户还需要安装 ca.cert.pem
    (4)如果是 OS X,用户需要设置 CA 根证书为可信
    OS X
    OS X 采用了严格的安全校验措施,IKEv2 连接采用 PEAP(用户名+密码)/EAP-TLS(证书) 模式并必须验证服务器身份,
    对服务器校验分两步:(1)校验该服务器证书是否是合法 CA 签发的,(2)校验被连接服务器的被连接域名是否是证书允许的
    OS X 要求这两部分必须均校验且通过,Windows 可以选择是否校验以及校验至哪一步。
    这意味着为了保证 OS X 正常使用 IKEv2,您必须为 Radius 服务器配置证书。
    iOS 与 OS X 的要求相似,本文以 OS X 为例进行说明。
    IKEv1
    配置位置:系统偏好设置 -> 网络 -> 新建 -> VPN -> Cisco IPsec
    服务器地址:在这里输入您的服务器地址
    账户名称:在这里输入用户名
    密码:在这里输入密码
    在鉴定设置 -> 共享的密钥中输入在 ipsec.secrets 中设置的 PSK 预共享密码
    IKEv2
    配置位置:系统偏好设置 -> 网络 -> 新建 -> VPN -> IKEv2
    服务器地址:在这里输入您的服务器地址
    远程地址:在这里输入您的服务器地址
    在鉴定设置 -> 用户名中输入在 ipsec.secrets 中设置的用户名和密码(通过用户名密码登陆)
    在鉴定设置 -> 证书中选择安装的客户端证书(通过客户端证书登陆)
    Android
    由于 Andorid 的版本众多,配置方法可能不同但大同小异。

    IKEv1
    说明:您也可以使用 IPSec Xauth RSA 进行连接,但需要安装证书,连接时选择客户端证书,CA 和服务器证书留空

    配置位置:设置 -> 其它连接方式 -> VPN -> 添加 VPN
    名称:在这里填写任意名称
    类型:IPSec Xauth PSK
    IPsec 标识符:不更改此项内容
    预共享密钥:在这里输入在 ipsec.secrets 中设置的 PSK 预共享密码
    此后,在连接时输入您的用户名和密码。

    IKEv2
    您需要安装 StrongSwan Andorid 版本,具体配置方法详见不同版本的配置方法。

    由于该 APP 为官方出品,支持认证方法众多,配置简单,推荐使用。

    Windows
    说明:鉴于 Windows 支持认证方式较为广泛,本文仅示例最简单的通过 EAP(MSCHAPv2) 与通过本地证书(EAP-TLS)进行认证

    Windows 7 以下版本不支持 IKEv2 连接,所有版本均不支持 IKEv1 连接,如有需要请下载第三方组件。
    本文配置对于 Windows 7 以上版本的 IKEv2 连接,支持通过 EAP-MSCHAPv2、EAP-TLS、PEAP(部分支持)、EAP-TTLS 认证
    本文采用 Windows 10 作为操作示例,其它受支持的 Windows 版本配置与本文类似,请自行研究。
    如前文所述,本文对于 PEAP 仅支持 PEAP-EAP-MSCHAPv2(用户名+密码),不支持 PEAP-EAP-TLS(证书)。
    有消息称,不同连接方式之间的性能可能存在差异,但笔者并未进行详细的性能测试。
    注意:笔者测试 StrongSwan 官方的 Windows 7 配置,但 Windows 7 仍不可连接。 错误提示为 IKE 身份验证凭证不可接受,该问题通常是由于 CA 根证书未安装导致,但 CA 根实际上已经安装。 因此,错误原因不明,该问题仅在 Windows 7 (Windows Server 2008)上被发现,其他未见影响。

    IKEv2
    配置位置:网络与共享中心 -> 设置新的连接或网络 -> 连接到工作区 -> 使用我的 Internet 连接
    Internet 地址:在这里填写服务器地址
    确认后,在网络与共享中心 -> 更改适配器设置 -> 选择刚刚添加的 VPN -> 右键选择属性 -> “安全”中“VPN 类型”选择 IKEv2
    在这里,我们展示两种方式:

    方法一:通过 EAP-TLS 使用证书连接

    (1)安装客户端证书 client.cert.p12,设置为可信
    (2)在“安全”中选择“Microsoft: 智能卡或其他证书(启用加密)”,在“属性”中选择“在此计算机上使用证书”
    (3)完成上述步骤后,可以勾选“通过验证证书来验证服务器身份”,在文本框中输入 VPN 服务器地址
    (4)勾选“连接到这些服务器”,在证书列表中选择 CA 根证书(一般在最后一个)后确定
    (5)尝试连接到 VPN 服务器即可
    说明:用户可以关闭“通过验证证书来验证服务器身份”,但这将降低用户安全性。

    方法二:通过 EAP-MSCHAPv2 使用用户名与密码连接

    (1)安装 CA 根证书,设置为可信
    (2)在“安全”中选择“Microsoft: 安全密码(EAP-MSCHAP v2)(启用加密)
    (3)尝试输入账号密码进行 VPN 连接即可。

    一、软件说明

        IPsec是虚拟私密网络(*)的一种,用于在服务器和客户端之间建立加密隧道并传输敏感数据之用。它由两个阶段组成,第一阶段(Phrase 1, ph1),交换密钥建立连接,使用互联网密钥交换(ike)协议; 第二阶段(Phrase 2, ph2),连接建立后对数据进行加密传输,使用封装安全载荷(esp)协议。

        其中,第一阶段和第二阶段可以使用不同的加密方法(cipher suites)。甚至,第一阶段ike协议的第一版(ikev1)有两种模式,主力模式(main mode)和积极模式(aggressive mode),主力模式进行六次加密握手,而积极模式并不加密,以实现快速建立连接的目的。

        第一阶段的 ike 协议有两个版本(ikev1/ikev2),不同的开源/闭源软件实现的版本均不同,不同的设备实现的版本也不同。再联系到第一阶段/第二阶段使用的各种不同加密方法,使得 IPsec 的配置有点黑魔法的性质,要么完全懂,通吃; 要么完全不懂,照抄。

    二、设备操作系统规格

    这里主要介绍了设备/操作系统使用的 ike 版本及其特殊要求。

    Linux

        命令行客户端就是 strongswan 本身,因此完美兼容,支持 ikev1/ikev2 和所有加密方法的连接。因此如果用户只使用 Linux 命令行客户端,不使用各种移动设备也不使用 Windows,那么完全没有那么多事。

        但 Linux 的图形界面客户端 NetworkManager-strongswan 目前只支持 ikev2 连接,必须使用证书或 EAP (各种加密方法都支持,包括微软的 MSCHAPv2)进行认证,不支持纯密码(PSK)认证。这并不是 strongswan 的错误,或者技术不行(开源总是走在技术最前沿的,毕竟命令行是支持的),而仅仅是体现一种选择:ikev1 被 strongswan 项目认为是该淘汰的协议,而 PSK 加密被认为是非常不安全的。参考 strongswan 维基 NetworkManager 词条。

    Android

        Android 和 Linux 不一样,只支持 ikev1。其它方面和 Linux 一样,甚至有好多种 IPsec * 配置模式可供选择。

    IOS/Mac OS X

        它们声明使用的 IPsec 客户端为 Cisco,实际为自己修改的 racoon。它只支持 ike 协议的第一版即 ikev1,可以使用证书或纯密码(PSK)认证,但必须辅之 xauth 用户名/密码认证。

    该修改版的 racoon 会优先使用不加密的积极模式,而积极模式是 strongSwan 所不支持的。所以要使用主力模式。

        IOS 6 还有一个「衔尾」故障:它在第一阶段握手时会把数据包拆分成小块(fragmentation),然后「加密」发送。然而这种加密仅仅是声明的,其实并未加密,这就导致 strongSwan 及其它标准服务器端/Cisco 设备无法解密。另外 ikev1 的 fragmentation 插件是闭源的。开源服务器端无法对这些小块进行重组。参考:Cisco * stop working after upgrading to IOS 6

    所以产生了一种权宜之计,就是使用小证书(小于 1024,默认一般为 2048),来达到不拆包的目的。但是 Mac OS X 10.7 的更新却对这种方式进行了封杀,学习微软加入了证书验证,小证书直接拒绝。

    所幸 strongswan 5.0.2 已经完成了 fragmentation 的开源实现和对 iOS 那个声明加密其实未加密故障的处理:IKE message fragmentation (cisco) + IOS 6.0 Hack for encrypted flaged ike fragmentation packets,该链接中也能找到 strongswan 4 的补丁。

    Windows

        微软的差劲只比 iOS 好一点。好处在于它支持了 ikev2,但是只在 Windows 7 以后支持,Vista 之前依然使用 ikev1,坏处在于它的 ikev2 支持非常诡异,指定了 Diffie Hellman group(DH,迪菲-赫尔曼密钥交换组)必须是 modp1024。这是非常少见理论上不应该由系统管理员操心的加密选项:

        在 strongswan 中,定义第一阶段(ike)和第二阶段(esp)加密方法的语法是:

    ike/esp=encryption-integrity-dhgroup
    第一阶段/第二阶段=加密方法-健壮性认证方法 (后面两项可选)[-DH 组] [-扩展序列号支持模式(RFC4304)]

    参考:IKEv2CipherSuites

        Windows 定义了一个可选的选项,导致了我们必须去定义整个第一阶段的加密方法。这样被破解的可能性就提高了。

        其次在于它的 rekey(重连)。IPsec 的认证是有时效的,超过时间会重新认证。这种 CHILD_SA 认证可由服务器发出,也可由客户端发出,一般是由服务器发出。但是 Windows 7 的 ikev2 的表现是,如果你在路由器(NAT)后,收到这种请求会把微软内部的通知代码发出去,代码为 12345, 经过 strongswan 项目侦错后发现这个代码的意思是 ERROR_IPSEC_IKE_INVALID_SITUATION。但是处理不了,它不是 IPsec 标准协议定义过的错误。

    于是有两种权宜之计:

        一种是让 Windows 7 来主动 rekey。Windows 7 rekey 的时间大约是 58 分 46 秒,所以要配置服务器 rekey 时间比它长。但是效果非常不好。因为 rekey 是由三个变量控制的,key 的生命周期,key 的边际时间(生命周期前多久进行 rekey),和边际时间误差(rekeyfuzz),误差是不可控的。参考:ExpiryRekey。

        即使能控制 strongswan 这边,Windows 依然是「大约」; 即使两边都能控制,假设服务器延后一秒 rekey,理论上如果连接持续时间足够长,依然能够撞车:58x60+46 次 rekey 后即 146 天后撞车,连一年都没有,在 Linux 服务器对 Windows 服务器这种使用实例中就明显不符合要求。

    所以目前只能使用后一种方法即完全禁用服务器端 rekey。

        最后,它的 EAP 认证也非常糟糕。MSCHAPv2 的 eap 身份不是 ikev2 身份(ikev2 身份一般是 EAP 用户名),所以必须在服务器端显式定义 eap_identity 来使用 Windows 7 的 eap 身份。

    三、软件的安装

    软件的安装很方便,这里我们使用epel仓库里面的yum安装

    yum install strongswan 

    一条命令就安装好了,下面来查看安装了哪些文件

    rpm -ql strongswan

    这里我就不展示有哪些内容,下面来看看我们主要使用的配置文件

    rpm -qc strongswan

    其中/etc/strongswan/ipsec.conf是主要的配置文件,我们也主要对他进行配置

    开启转发

    echo 1 > /proc/sys/net/ipv4/ip_forward

    关闭防火墙

    service iptables stop

    iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE

    四、软件的配置

    1、证书的创建,我这里不再进行演示,大家可以下面的文章

       http://wangzan18.blog.51cto.com/8021085/1676529

        假设证书都已经创建好了,我们把证书放到下面的目录,如果使用PSK认证,不需要证书可以跳过这一步。

    cp -r cacert.pem /etc/strongswan/ipsec.d/cacerts/
    cp -r server.crt /etc/strongswan/ipsec.d/certs/
    cp -r server.key /etc/strongswan/ipsec.d/private/
    cp -r client.crt /etc/strongswan/ipsec.d/certs/
    cp -r client.key /etc/strongswan/ipsec.d/private/
    1.
    2.
    3.
    4.
    5.
    2、编辑ipsec.conf

        我主要使用的是第二个链接的与共享密钥,比较简单,文章最后有介绍各参数的意义。

    vim /etc/strongswan/ipsec.conf

    config setup

    uniqueids=never 

    conn IOS_cert #使用证书认证

    keyexchange=ikev1
    fragmentation=yes
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.crt
    right=%any
    rightauth=pubkey
    rightauth2=xauth
    rightsourceip=10.31.2.0/24
    rightcert=client.crt
    auto=add

    conn android_xauth_psk #使用与共享密钥认证,不需要证书,安卓IOS都可以连接

    keyexchange=ikev1
    left=%defaultroute
    leftauth=psk
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=psk
    rightauth2=xauth
    rightsourceip=10.31.2.0/24
    auto=add

    conn networkmanager-strongswan

    keyexchange=ikev2
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=pubkey
    rightsourceip=10.31.2.0/24
    rightcert=client.crt
    auto=add

    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.
    25.
    26.
    27.
    28.
    29.
    30.
    31.
    32.
    33.
    34.
    35.
    36.
    3、ipsec.secrets配置

    这个文件默认是没有的,我自己来进行创建

    vim /etc/strongswan/ipsec.secrets 

    : RSA server.pem
    : PSK "myPSKkey"
    : XAUTH "myXAUTHPass"
    [用户名] %any : EAP "[密码]"
    1.
    2.
    3.
    4.
    将上面的myPSKkey单词更改为你需要的PSK认证方式的密钥;

    将上面的myXAUTHPass单词更改为你需要的XAUTH认证方式的密码,该认证方式的用户名是随意的;

    将上面的[用户名]改为自己想要的登录名,[密码]改为自己想要的密码([]符号去掉),可以添加多行,得到多个用户,这即是使用IKEv2的用户名+密码认证方式的登录凭据。

    : PSK "PSK password" 相当于:%any %any : PSK "PSK password"
    1.
        遵循:“主机 对等点 : 方法 <本机证书/协议密码> <本机证书密码>”的格式。以 :为分界,分别从左到右填充,除了各类密码缺失以 null 补位,其它都用 %any 补位(密码怎么可能是 %any)。

    比如我的配置就是如下这样:

    : RSA server.key
    : PSK "123456a"
    test %any : XAUTH "123456"
    test %any : EAP "123456"
    1.
    2.
    3.
    4.
    4、strongswan.conf配置

        dns可以改为你想使用的dns,可以添加两个dns1  dns2。

     vim /etc/strongswan/strongswan.conf

    charon {

        load_modular = yes
        duplicheck.enable = no
        compress = yes
        plugins {
                include strongswan.d/charon/*.conf
        }
        dns1 = 114.114.114.114
        nbns1 = 114.114.114.114

    }
    include strongswan.d/*.conf
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.

    五、服务的启动

    service strongswan start

    然后我们就可以使用手机进行连接了,IOS手机我也试过,也是可以连接的。

        注意这里使用的是Xauth认真的IPSec *

        点击进行登录,输入我们在文件ipsec.secrets设定的账号密码。

        如下显示连接成功,可以打开浏览器查看我们的地址。

        连接上去之后,我们可以在服务器上面查看*的连接状态等等,可以使用strongswan命令查看,如下:

    六、ipsec.conf配置文件的详解

       其中config setup只能出现一次,而conn <连接名称> 可以有很多个。这里的名称不是预定义的,可以随意写,只要你能识别就行,主要用来定义一种连接,就是为了让你在日志里好找。

    1、新版strongswan里config setup的内容不如旧版的多,许多旧版必须有的选项都被作废了。比如:

    plutostart新版所有的ike协议都由原来ikev2的daemon:charon接管。根本就没有pluto了。

    nat_traversal新版所有的ike协议都是可以穿越路由器(NAT)的。

    virtual_private定义服务器的局域网IP地址。现在被魔术字0.0.0.0/0取代了。

    pfs完美向前保密,用于rekey时。意思是你现在的密钥互换过程如果被攻破了,会不会对已经互换过的密钥产生影响。以前一般设置成no来适用于IOS这种客户端会以积极模式发出非加密的rekey请求的情况。现在这个选项完全没作用了。第一阶段永远是完美向前保密的,第二阶段(esp)如果指定了DH组那么也是完美向前保密的,但是默认加密方法就已经指定了DH组。所以该选项永远为yes。

    2、而另外旧版和新版都有的选项也都定义了默认值,比如:

    strictpolicy是否一定需要证书吊销列表(CRL)的URL。默认就是no。

    charonstart是否启动ikev2的daemon。这是旧版加入的,因为那个时候的主力是pluto。现在默认就是yes,你改成no那你连原先pluto的连接都无法连接,因为ike协议的实现全被charon 接管了。

        所以config setup基本上占位就行了。这里我们修改了uniqueids的值来实现多设备同时在线。

    3、而conn最主要要理解左右的概念。其实左右是可以不分的,它们只是用来表示一个连接的两端。只是在如果你定义的不够全面时,左侧会默认被认为是本机(你的VPS),右侧默认为他机(你的笔记本),即以左为尊。

    left/right是左右id。它们用来识别服务器/客户端,可以是证书的判别名(DN),比如 "C=CN, O=strongSwan, CN=strongSwan CA",也可以是 IP 地址,也可以是 EAP 的用户名,还可以是魔术字 %any,表示什么都行。只是在 5.0.0 之前,为本机这边定义 %any 的话,ikev1 连接即 keyexchange=ikev1 的连接是识别不了,所以要改成 %defaultroute 表示自己从 ifconfig 里取 IP。为了和 right 的 %any 区分开,我们使用这种方法。所以说到最后这两个选项似乎没有什么用。但它们是必须的。

    leftauth/rightauth这是最重要的改动。新版主要是作废了之前的authby和 xauth=server/client选项而都改用这种方法。因此使得ikev1也能够出现混血认证(左右两边认证的方法不同)了。参数主要有pubkey表示用证书,psk表示用密码,eap表示用扩展验证协议。

    leftauth2/rightauth2是为了应对旧版很常见的authby=xauthpsk/xauthrsasig 的。现在xauth 只能写在这里。而psk对应leftauth/rightauth里的 PSK 方法,rsasig则对应pubkey方法。

    leftsubnet最重要的,引入了魔术字 0.0.0.0/0。如果你在右侧为客户端分配虚拟 IP 地址的话,那表示你之后要做iptables转发,那么左边就必须是用魔术字。

    leftcert/rightcert就是指定证书名字。

    rightsourceip为客户端分配的虚拟IP段。

    auto定义strongswan启动时该连接的行为。start是启动; route是添加路由表,有数据通过就启动; add是添加连接类型但不启动; ignore是当它不存在。默认是ignore。看起来似乎是route比较好,但问题是我们服务器端不能预分配虚拟IP,所以服务器端一般用的都是add。而客户端文本配置可以选择start。

        另外说下旧版的 xauth=server/client 的问题。它表示在服务器端还是在客户端执行 xauth 认证。而在新版中主要通过左右方向来体现。比如你在服务器端执行认证,那认证请求是由客户端发出的,所以要写 rightauth2=xauth。如果在客户端执行认证,那认证请求是服务器发出的,所以要写 leftauth2=xauth。

        另外网上很常见的一个配置选项是 leftfirewall=yes。这是完全错误的。看上去它的唯一作用是定义你的服务器是不是在防火墙后面,但实际上它是作为 ipsec_updown 脚本的参数被开发出来,是表明你的本机 subnet 是不是用 iptables 转发/伪装出来的。如果是的话,就调用 left/rightupdown 定义的路径下的脚本,脚本的作用是对通过 ipsec 连接的数据包进行 iptables 豁免。

        之所以说它是错到离谱的(虽然没有产生影响),因为这些人完全就不懂,有公网 IP 的服务器的 subnet 很少是伪装的。另外必须写了脚本该选项才有意义,没看过一个定义了这个选项的人写过脚本。还有,leftsubnet=0.0.0.0/0 通过魔术字把 subnet 定义为了 any,你根本没法写脚本啊。所以我们这里完全就不用。

    至于某类型连接,主要是根据设备规格定义的,一些特殊选项的解释如下:

    fragmentation=yes 开启对 iOS 拆包的重组支持。

    ike=aes256-sha1-modp1024! Windows 指定的第一阶段加密方法。

    rekey=no 服务器对 Windows 发出 rekey 请求会断开连接。

    rightsendcert=never 因为这是一个混血连接。服务器对自己的身份进行认证时使用的是证书,而服务器对客户端的认证使用的只是 eap-mschapv2。如果不设置的话默认是 ifasked,意思是如果服务器向客户端请求证书,客户端就会给它,但客户端给不出,连接就会断。这里设置为客户端永远不给,实际上的意思其实是服务器不要向客户端请求证书。

    eap_identity=%any 使用 Windows 的 eap 身份。不然会出现”no eap key found for host “错误。

    六、客户端的设置

    IOS

        把CA证书和之前做好的pkcs12(.p12)发邮件给自己。在IOS上收邮件,导入两者。然后新建 IPSec *

    服务器,都是IP或都是URL

    账户和密码写ipsec.secrets 里XAUTH前后的那两个

    如果要使用证书,证书选刚才的那个。否则可以不使用证书,输入ipsec.secrets 里设置的PSK密码。

    Android

    1、IPSec Xauth PSK

    主要还是:

    服务器,都是IP或都是URL

    IPSec预共享密钥:写ipsec.secrets里PSK后面的那个密码。

    然后登入时还是用XAUTH前后的那两个做用户名密码。

    2、"strongSwan * Client" for Android 4.0 (ICS)+

        这是官方自己出的客户端,Google Play 里就有。

        把之前做好的 pkcs12 发邮件给自己。实际上 pkcs12 里就包含了CA证书,iOS是有bug才必须明确要求导入CA证书(鄙视之)。Android不用。直接在GMail里点击就会提示你导入。

        然后打开官方客户端,新建方案:

    Gateway就是服务器,同上

    Type 选 IKEv2 Certificate

    User certificate 选你刚才导入的

    取消自动选择CA证书,然后在用户证书里选你刚才从pk12导入的

    Windows的客户端我还是建议使用pptp或者l2tp open*

    七、问题调试

    如果没有特殊需要,服务器端的日志就足够检测出绝大多数问题的来源。

    日志阅读技巧

        strongswan 的 charon daemon 启动后,会初始化并加载之前你定义好的 conn,这部分 log 是没有必要去读的。当然在你配置有问题时可能就有必要了,但当配置有问题的时候,service strongswan start会失败,strongswan status就会指出你配置问题所在的行号(=。=)...

    服务器端调试

    /var/log/strongswan-charon.log 文件

    需要在/etc/strongswan/strongswan.d/charon-logging.conf里面开启调试日志功能

    IOS调试

        越狱安装iFile。编辑/etc/racoon/racoon.conf文件,找到 #log debug; 字段,改成:

    log debug;
    path logfile "/var/log/racoon.log";
    1.
    2.
    Android 调试

    strongSwan 官方客户端提供了日志查看功能。

    android 自带的 * 调试方法如下:

    打开「终端模拟器」,输入 su,会弹出超级用户,允许。

    cd /storage/sdcard0
    logcat -f ./log.txt
    1.
    2.
    然后用 Airdroid 等工具把 SD 卡中的 log.txt 传到电脑上,打开搜索 * 即可。

    八、总结

       经过我测试得出的结论,我目前只测试了IOS 8还有安卓手机小米Note,都是使用的xauth认证,没有使用证书,我的小米Note是可以连接的上,但是页面加载有问题,查看日志他是使用的android_xauth_psk这个连接,也没有找到问题的原因,同样的配置用IOS连接,因为我们使用的是IOS自带的IPSec *连接,也没有使用证书,参数和安卓的连接一样,因为没有使用证书,识别的也是android_xauth_psk这个连接,但是访问都是一切正常的。

        如果有什么问题欢迎大家和我一起探讨。

    附:快速安装文档

    环境准备

    service iptables stop
    setenforce 0
    echo 1 > /proc/sys/net/ipv4/ip_forward
    yum install strongswan -y
    1.
    2.
    3.
    4.

    设置主配置文件

    vim /etc/strongswan/ipsec.conf

    config setup

    uniqueids=never

    conn mobile_xauth_psk

    keyexchange=ikev1
    left=%defaultroute
    leftauth=psk
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=psk
    rightauth2=xauth
    rightsourceip=10.31.2.0/24
    auto=add

    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.

    添加数据包伪装转发

    iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE
    1.

    添加账号密码等信息

    vim /etc/strongswan/ipsec.secrets

    : PSK "123456a"
    test %any : XAUTH "123456"
    test %any : EAP "123456
    1.
    2.
    3.

    配置strongswan文件

    vim /etc/strongswan/strongswan.conf

    charon {

        load_modular = yes
        plugins {
                include strongswan.d/charon/*.conf
        }
        dns1 = 8.8.8.8
        nbns1 = 8.8.4.4

    }

    include strongswan.d/*.conf
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.

    启动*服务连接

    登录后复制
    service strongswan start
    chkconfig strongswan on
    1.
    2.

    按照上面要求,账号密码如下,手机连接即可。

    账号:test
    密码:123456

    预共享密钥:123456a

    ©著作权归作者所有:来自51CTO博客作者wzlinux的原创作品,请联系作者获取转载授权,否则将追究法律责任
    CentOS 用Strongswan搭建IPSec *
    https://blog.51cto.com/wzlinux/1683915

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/50/

    转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376


    概述

          小雉系统的安装包可从线上系统中直接制作,制作的安装包包含线上系统的更新;
          小雉系统只提供升级包,对应的安装包均是客户在应用升级包后按本文自行制作;


    步骤

    1. root登录ssh系统;
    2. 运行“cd /fs/project/data”;
    3. 运行“/fs/bin/ddimg”;
    4. 使用gzip压缩;
    5. 使用ftp下载安装包;

    小雉系统安装包制作

    猜您可能喜欢
    小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
    小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
    小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
    小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
    小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
    使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
    小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
    资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/49/

    转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376


    参考文章:https://blog.csdn.net/yaotengjian/article/details/121803257

    1、LVM简介:Logical Volume Manager

       Linux环境下对磁盘分区进行管理的一种机制。LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
    
      LVM可以将这些底层的物理磁盘或分区整合起来,抽象成容量资源池,以划分成逻辑卷的方式供上层使用,其最主要的功能即是可以在无需关机无需重新格式化(准确地说,原来的部分无需格式化,只格式化新增的部分)的情况下弹性调整逻辑卷的大小。
    

    优缺点:

    文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。可以在系统运行的状态下动态的扩展文件系统的大小。可以增加新的磁盘到LVM的存储池中。可以以镜像的方式冗余重要的数据到多个物理磁盘。可以方便的导出整个卷组到另外一台机器。
    在从卷组中移除一个磁盘的时候必须使用reducevg命令(该命令要求root权限,且不允许在快照卷组中使用)。当卷组中的一个磁盘损坏时,整个卷组都会受到影响。因为加入了额外的操作,存贮性能受到影响。
    2、LVM的工作流程:

    PV:物理卷在逻辑卷管理系统最底层,可为整个物理磁盘或实际物理硬盘上的分区。

    VG:卷组建立在物理卷上,一卷组中至少要包括一物理卷。

    LV:逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。

    PE:物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改且大小需一致。

    LE:逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。

    3、LVM的写入模式:

    线性模式:写完一个设备再写入另外一个设备。

    条带模式:数据是被分散写入到LVM各成员设备上的。

    4、LVM基本使用:

    LVM挂载过程大致是,创建物理卷PV -> 创建卷组 VG -> 创建逻辑卷LV -> 格式化 -> 挂载。

    1、查看主机现有磁盘情况:fdisk -l

    2、对磁盘进行分区:fdisk /dev/vda

    新建分区,选择类型,设置分区号,查看磁盘现有分区情况:

    3、更改分区类型:Linux LVM

    4、创建PV:pvcreate /dev/vdb1 pvdisplay ,同理创建vdc1,vdd1,

    创建VG卷组:vgcreate volume-group1 /dev/vdb1 /dev/vdb2 /dev/vdb3

    5、创建逻辑卷LV: lvcreate -Zn -n lvdata -l +100%FREE vgdata

    注:本机环境采用的是单机挂载,groups方式参考第四第五点:

    以上,LVM方式挂载磁盘完成,磁盘挂载前记得将原路径下的数据备份,挂载完成后在移动至当前路径下面。