xenserver平台,centos7的vm,在更新完5.14内核后重启会提示如下错误:

[ OK ] Reached target Basic System.
dracut-initqueue[227]: Warning: Counld not boot.
dracut-initqueue[227]: Warning: /dev/mapper/centos-root does not exist
dracut-initqueue[227]: Warning: /dev/centos/root does not exist
dracut-initqueue[227]: Warning: /dev/centos/swap does not exist
             Starting Dracut Emergency Shell ...
Warning: /dev/mapper/centos-root does not exist
Warning: /dev/centos/root does not exist
Warning: /dev/centos/swap does not exist 

但是,在5.12之前的内核是没有问题的,这是因为在新的内核里xen平台的两个模块没有加入到启动镜像里,重新生成一下启动镜像即可。

cd /boot/
dracut -v -f -H -k /usr/lib/modules/5.15.11-1.el8.elrepo.x86_64/ --add-drivers "xen-blkfront xen-netfront dm-mod" initramfs-5.15.11-1.el8.elrepo.x86_64.img 5.15.11-1.el8.elrepo.x86_64

注意:更新内核后,网卡名称会变成espXX这样的名字,如果之前是用ethX这样命名网卡,那就需要添加net.ifnames=0 biosdevname=0参数,否则,这两个参数就不需要添加。在GRUB_CMDLINE_LINUX=后面添加 net.ifnames=0 biosdevname=0
修改后的应该如下

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"

一、安装FreeRadius
以CentOS7.9为例,用yum安装

yum install freeradius freeradius-utils -y
systemctl enable radiusd
systemctl start radiusd

需要放开防火墙的1812和1813的udp端口,这里有个坑,启动radiusd的时候可能会报错,可以用radius -X来启动调试模式看一下错误信息,如果提示:

Failed reading certificate file "/etc/raddb/certs/server.pem" 
Permission denied

这个是因为radius的编译脚本有点小bug,导致/etc/raddb/certs/目录下的一些文件权限600设的不够,改成644权限就可以了。
修改/etc/raddb/clents.conf,在client localhost上面添加

client all_client {
    ipaddr = 0.0.0.0/0
    secret = secret2021
    require_message_authenticator = no
}

secret是共享密钥。
二、安装daloRadius和配置FreeRadius
1.安装MariaDB不再赘述,创建radius数据库

mysql>create database radius;
mysql>grant all on radius.* to radius@localhost identified by "radpass"; 
mysql>exit;

2.导入radius表

mysql -u root radius < /etc/raddb/mods-config/sql/main/mysql/scheama.sql

共导入了7个表,分别是:
radcheck 用户检查信息表
radreply 用户回复信息表
radgroupcheck 用户组检查信息表
radgroupreply 用户组检查信息表
radusergroup 用户和组关系表
radacct 计费情况表
radpostauth 认证后处理信息,可以包括认证请求成功和拒绝的记录。
3.建立组信息:(在此新建组名称为H3C)

insert into `radgroupreply` (`id`, `groupname`, `attribute`, `op`, `value`) values('1','H3C','Huawei-Exec-Privilege',':=','3');
insert into `radgroupreply` (`id`, `groupname`, `attribute`, `op`, `value`) values('2','H3C','Service-Type',':=','Login');
insert into `radgroupreply` (`id`, `groupname`, `attribute`, `op`, `value`) values('3','H3C','Login-Service',':=','Telnet');

注意,老版本的H3C交换机的reply属性是Huawei-Exec-Privilege,新版本的已经变更为Exec_Privilege,参见https://www.h3c.com/cn/d_201708/1023166_30005_0.htm#_Ref224994526
4.建立用户信息:(在此新建用户名为test,密码为testpwd)

insert into radcheck (username,attribute,op,value) values ('test','Cleartext-Password',':=','testpwd');

5.将用户加入组中:

insert into radusergroup (username,groupname) values ('test','H3C'); 

6.修改 FreeRADIUS中的mysql 认证配置

cd /etc/raddb/mods-enabled
ln -s ../mods-available/sql

7.修改 FreeRADIUS中的mysql 配置文件
该配置文件位于/etc/raddb/mods-available目录,名称为sql
可以通过vi来修改,命令如下:

vi /etc/raddb/mods-available/sql

找到driver = “rlm_sql_null”这一行,修改为driver = “rlm_sql_mysql”,找到dialect = "sqlite"改成dialect = "mysql",在这行下面的Connection info修改radius的mysql登录信息,取消前面的行注释,然后保存并退出。
8.安装daloRADIUS和nginx、php不再赘述,注意:php需要gd库和php-pear(php74-php-pear)

yum install php74-php-pear
php74-pear install db
php74-pear channel-update pear.php.net

9.导入daloRADIUS的数据库
注意:/home/daloradius/为假设你的daloradius的安装目录

cd /home/daloradius/contrib/db
mysql -uradius -pradpass radius < ./mysql-daloradius.sql
mysql -u root -p radius < fr2-mysql-daloradius-and-freeradius.sql

10.设置daloRADIUS的数据库连接
具体操作可以查看INSTALL文档。
11.nginx配置不再赘述
配置完成后,通过浏览器就可以访问daloRADIUS的管理界面,第一次登录的用户是administrator,密码是radius。如果生产环境使用的话一定要修改以下密码,这个用户的信息在表operators里面。
三、配置H3C交换机
1.首先通过console口登录交换机,执行以下命令

radius scheme yourname
primary authentication 172.20.68.225
primary accounting 172.20.68.225
key authentication cipher $c$3$kbh9Ex7mC6yftMzlDevC1EYKiOvNO7vxhWsN
key accounting cipher $c$3$HbzbEM/xUnYjN/IgTvmGYI5rfSzavhjf5nQj
user-name-format without-domain
quit

domain yourname
authentication default radius-scheme yourname
authorization default radius-scheme yourname
accounting default radius-scheme yourname
quit

domain default enable yourname

注意:key部分,是radius的共享密钥,在radius服务器的/etc/raddb/clients.conf里有配置。
2.开启ssh或telnet不赘述,但是,不需要再添加local-user了
以上完成后,就可以开始测试了,如果有问题,可以先关闭radius服务,在radius的调试模式下进行。

radiusd -X

在调试模式下,可以看到详细的连接情况和错误信息
注意:华为华三交换机一定要在radreply表添加以下信息才能登录并获取最高权限

id    username    attribute    op    value
1    test    Huawei-Exec-Privilege    :=    3
2    test    Service-Type    :=    Login
3    test    Login-Service    :=    Telnet

四、一些常见的错误
1.daloradius提示Unknown column ‘acctupdatetime’ in ‘field list’错误,并且无法连接vpn、无法查看在线用户
查看日志显示如下信息

rlm_sql_mysql: MySQL error ‘Unknown column ‘acctupdatetime’ in ‘field list”

解决方法如下:
删除radacct表 并重新建立

mysql -u radius -p

输入密码
在sql中执行如下语句

use radius;
DROP TABLE radacct;
CREATE TABLE radacct (
  radacctid bigint(21) NOT NULL auto_increment,
  acctsessionid varchar(64) NOT NULL default '',
  acctuniqueid varchar(32) NOT NULL default '',
  username varchar(64) NOT NULL default '',
  groupname varchar(64) NOT NULL default '',
  realm varchar(64) default '',
  nasipaddress varchar(15) NOT NULL default '',
  nasportid varchar(15) default NULL,
  nasporttype varchar(32) default NULL,
  acctstarttime datetime NULL default NULL,
  acctupdatetime datetime NULL default NULL,
  acctstoptime datetime NULL default NULL,
  acctinterval int(12) default NULL,
  acctsessiontime int(12) unsigned default NULL,
  acctauthentic varchar(32) default NULL,
  connectinfo_start varchar(50) default NULL,
  connectinfo_stop varchar(50) default NULL,
  acctinputoctets bigint(20) default NULL,
  acctoutputoctets bigint(20) default NULL,
  calledstationid varchar(50) NOT NULL default '',
  callingstationid varchar(50) NOT NULL default '',
  acctterminatecause varchar(32) NOT NULL default '',
  servicetype varchar(32) default NULL,
  framedprotocol varchar(32) default NULL,
  framedipaddress varchar(15) NOT NULL default '',
  PRIMARY KEY (radacctid),
  UNIQUE KEY acctuniqueid (acctuniqueid),
  KEY username (username),
  KEY framedipaddress (framedipaddress),
  KEY acctsessionid (acctsessionid),
  KEY acctsessiontime (acctsessiontime),
  KEY acctstarttime (acctstarttime),
  KEY acctinterval (acctinterval),
  KEY acctstoptime (acctstoptime),
  KEY nasipaddress (nasipaddress)
) ENGINE = INNODB;

systemctl restart radiusd

周晓枫

四月的夜晚
  夜晚的心情,如同被浣洗过了,清洁而带有微微的潮湿。白日奔波的尘埃,起伏不定的心事,都像手中这盏茶,静静沉淀下来。
  这是四月的夜晚,窗户紧闭了一个冬天,此时又开始和缓呼吸。人的感觉总是迟弱于那些纤敏的性灵。当麻雀在每次跳跃中都感到土地有种轻微的陷落,就知道春天已渗透土壤而当人们惊呼着春的来临,风早已丝绸样的柔软。春天,想到这个词我禁不住眯起眼睛——幼鸟的咳嗽忽然变成歌唱。羊背上生长出新鲜的草地。蓓芽从汁液凝为固体的那一瞬间,看到冬季零售的阳光变得批发,心也慷慨。对春天的感触永远不可能淡若烟水,那是我们四季奔行中的驿站。
  这是我在异乡度过的第4个春天。风景旧曾诸,只是观瞻的人已衣尘历历。新生的脸上是开花的表情,仿佛年轻的自己重视。没有什么不在时间的把握之内,逝水如斯,今天它已将我摆渡到彼岸。4年光阴是一组多米诺骨牌,一千多个日子像麦子就这样被我迅速收割。玄想明天的翅膀,转化为面对现实的眼眸。
  此时此地此人此事,终将成为彼境彼物的纪念,我看到人们因此而普降泪水。过往的人影面容模糊,过往的事端梗概不详,回忆只是对现实忽略细节的意念模仿,我听到人们的叹息此起彼伏。在时间的落差里患得患失,是不是我们最强大的弱点?
  挽留不住烟华旧景,或许能够挽留身处那境那时的近似心情——人不可能第二次踏入同一条河,但却可以同样愉悦地步进另一个青翠春天。月亮是一片薄荷叶,我在夜晚获得清凉的思维。回首似水流年,就仿佛看见灯火阑珊处身无长物的自己。
  明明灭灭的夜景,剪纸一样贴在窗外,我可以看到对岸漂泊的灯火。许多人和我一样安享着这个黛蓝色的夜晚。母亲的孩子枕靠在呵护里,妻子的守候经久不息,相爱相聚的人们饱含感激之泪。甘苦人生,浸在夜色里难以言表。人们在这一刻,怀念往事故人,遥想桃李明天。灯火如琥珀,沉香色的温情千年如斯。
  我不是上帝一个推陈出新的作品,和芸芸众生一样,活着、爱着,许多时候不能义正词严的正确,也不能恰如其分的错误,光阴的漏斗下,没有守住每一粒漏下的金沙。但是庆幸自己始终是个善良的人,没有比这点更为重要的了。只有善良,我们才能感知那些蹑手蹑脚的美感,如这春日的步履悄无声息。静和、美好、温情,我想着这些有着橙红色细微光芒的词汇,心被擦得一亮一亮的。
  这样的时分,灯光是夜晚的眼睛,我愿我是清亮的瞳仁。
  
盛夏的向日葵
  
  16岁那年,整个暑假我都和几个童年一起长大的玩伴在一起:简、弯弯、小琪和茜子。我们去郊游、野炊……在草坡上放声歌唱……青春鲜艳,且看阳光的金帛如何华丽衣我。夜晚是一棵很高很高的树,树上结满了星星的果子,我们坐在树荫下乘凉——那时候我相信这夜晚的边缘以外,世界一定无比明亮,树的影子才能这样这样的黑;就让结实的阳光叮叮当当敲打在夜晚之外,我们只要这样亲密地在一起,乘着内心轻轻快快的凉……
  真是精品的记忆,那是好久以前了。后来每个人都走着各自的路,口袋里装着友人的名字,而不能带走彼此的身影。简已为人妻人母,弯弯在公司里作秘书,茜子远走异国、而小琪,竟然在一次意外车祸中去了。那个夏天,从来不需要想起,永远也不会忘记。
  
  一顶金黄色的草帽,我戴着它步进夏天,像一棵游走的向日葵,结满又黑又小又紧密的思想。有时猜测衰弱而灰冷的日子正结队向我驶来,而我除了向前走别无他途。偶尔回回头,还可以望见一些精美的记忆——那时年纪小,还可以把昨天的主意轻易推举为理想。然而田地里那片真正的向日葵正灿烂着,辐射出爱、意志和真理,如同亲切友人留给我的启示。每当看到它们,我就想到了自己也许还没有权利沦陷在感伤之中。
  16岁那年我们在这片田地里第一次种植向日葵,挖出一个个不深不浅的坑,每个坑里都要放进几粒种籽——这是一个保险的措施,因为不是每粒种籽都能发芽。把土盖上,浇一点儿水。刚出芽的向日葵很嫩,像翠绿的小嘴。我们开始间苗了,除去那些孱弱的芽苞,保留下最茁壮的,并让每个幼芽与幼芽之间保持一定的距离。以后的事我们很少料理,那些向日葵尽情地延展自己,直至夏日,它们仰起金色的面宠。以后的每一年里,我都延续着去种植它们,仿佛纪念着遥远的友谊。
  我想一切都和向日葵一样。我们是一成长的种粒,享受着同样的土壤和水,未必就能长出同样健康的芽苞,有的甚至没有走出混沌土壤就远离了生命。最初的我们只是两片纯净的嘴唇,要食物、要呼吸、要表达。当我们成年,腰身直直地站在那里,一起长大的朋友已散居各地。我的孤独就是向日葵的孤独。然而必须如此,必须保持一定量的距离,我们才能巩固自己的独立,完善成熟,才能在共同的田园里开展自己,并摇动叶柄致意,把阳光的消息次第传达。
  寒来暑往,夏日度度辉煌,我无法拒绝这24K金的阳光。走在林荫道上让淅淅沥沥的阳光滴打在肩上。想做一个稻草人,穿着阳光的铠甲,护卫田野里正在长大的庄稼。阳光金属的力量,把世界建筑得日益坚强。
  盛夏的向日葵面向太阳,它虔诚地仰望着它的信仰;秋天的向日葵则因成熟而垂首,不再问周围的阴晴。想想真好,我还年轻,就如盛夏一棵独立的向日葵,还能跟着理想转头,始终坚持着光芒的方向。
  
秋意如禅
  
  多么清爽与美好的季节!蚊子瘦骨伶仃地离开了我们的生活。抬头看看蓝蓝的天花板,云有多高!在秋天,每个人都改善了居住环境。好心情的人们坐在橙色的十月里放声歌唱。
  阳光再也不那么足斤足两,树叶的皮肤彻底失去了弹性和水份;不再歌唱,夏虫们将面对它们短暂的老年。坏心情的人心灰意冷,感受着世界越来越冷的体温。
  笑泪秋天。在我们的眼前,秋天像一只金色的昆虫,一会儿飞起来,一会儿又落下去。
  秋天是一个最辩证的季节。它是热情与寒冷、繁茂与枯寂、暖调与冷色的背水一战,并且结局是那些可爱的概念终将败北。在这样的势态下,秋天却不激越,不动容,显出了雍和的气度和力量——看看那棵正在落叶的树,背靠在秋晴里,颜色是多么安详!
  这个秋天我原本有些消沉,我难以置信一份进行时态的友谊如荔枝,一日而色变,二日而味变,三日则色香味尽去矣。这让我联想起许多,就像我难以接受青春如礼花——光芒耀眼却迅速被夜晚消灭。我想我的力量是吹弹即破的,偶尔的坚持也是一枚小小的钉,时间对我削铁如泥。于是,农人握镰的时候我放下笔,叹着气走出去看看秋色。
  我讨厌不冷不热的礼貌和不阴不阳的脸色,却挚爱这样的天气。看看秋天是怎样面对大兵压境的寒冷,安之若素地结出满树饱满的果实;看看平凡的谷粒是怎样闪烁出黄金的品质。参悟秋天,参悟岁月里埋藏着的那些基础的哲学。
  秋如禅,禅如一个狡黠的圆——它的每一个边都不进取,也不退让。秋天,一张黄皮肤的脸,有一种东方人特有的睿智。
  想想自己是太“执意”了,紧紧抱住“永远”的遗体誓不放松。其实感情和所有的脸一样都会老的,必须接受这种不愿被人认领的真理,关键是保持一份承担的勇气。不要以为时光在恐吓我们,它只是进行着它们应有的速度,我们也应保持如一的步伐,不必瘫痪在温暖的回忆里,也不必行色匆匆地逃向未来。
  曾经,想说的话语焉不详,想做的事举棋不定,想念的人在水一方——放下吧,我对自己说,把你平静地交给生活。
  眼睛里的春水转秋。一颗平常心,如午后的阳光洒落在瓷的边缘。
  
冰点
  
  这个冬天我是在医院里度过的。病房里安静得像真空,输液还在继续,我躺在床上一动不动。
  后来能在病区内四处走走,看见各种各样的人把他们衰弱的身体晾晒在冬日中午稀薄的阳光里,有的人黯然神伤,有的笑容依旧在脸上活跃地走动。再后来,气温聚然降到零度以下,那些病人只有缩在暖气边,遥望那些裸裎的树。
  在所有的季节中,冬天最具有固体特性,你似乎可以触摸到它的边缘。春夏之间模糊暖昧,而秋冬有着锋利的交接面,让人清晰知道冬天始自何日。当然这次例外,恒温病室令我感觉迟钝。
  对于害虫,一场冰雪已是一个隆重的灾年——严寒灭绝了许多邪恶的存在,上帝假借冬天的手伸张正义。可是同时,那些花朵和树叶也受到株连,香消玉殒。如这病痛对人的打击,善良人也在所难免。很难解释病人那种微妙的委屈和受挫感。
  冬天一视同仁,无论对善还是对恶——我格外喜欢它干干净净的表情。每个人的一生中都有四季的轮回,疾病、别离、信仰的塌方——这些都是微服出访的冬天。病痛只是肉体对精神的不合作态度,这不过是拳击里的次轻量级,命运对精神的不合作态度常常沉重得多。人容易在寒冷时滑倒,从而耽误了生命的旅程。可是有什么资格来追究冬天呢?等你真正驾驭了苦难,你会明白滑冰竟比短跑速度快得多。
  受挫不过是一场轻微的后退,只要无损于智慧。受挫中我们懂得感激朋友,憎恨敌人,理解人性。只要勇敢和坚强,心灵就不会染恙。在冬天,水都可以变得结结实实,况乎有棱有角的人呢?让我享受透彻的打击,如企鹅事受凛然的冰雪。
  这样想着,第一场雪就降了下来。银亮的光芒,晶莹的品质,漫无边际的美。我无法去具体描绘那种美,即使它就颤动在我的唇角,栩栩如生。站在走廊的长窗边,我幸福而无声地落泪——知道自己还是如此脆弱,竟承受不住美如此轻盈的体重。安静的雪夜,我迟迟不忍睡去,感觉心像一枚杏仁,再冷再硬的壳里依然晶莹如玉。
  冬天的树深怀耐心,仿佛安静的纺锤,等待着纺出春天整匹的绿绸子。做一个明达的人吧,枯寒时候可以把雪花当作蒲公英,任希望云游四方。
  这是雪后,我沉静地望着窗外。窗外的冬天有如一枚白色的围棋子,精洁地摆在岁月棋盘的一角。

先到Nginx的官网去下载最新的源码到/usr/loacal/src/目录

wget http://nginx.org/download/nginx-1.23.1.tar.gz

解压后编译

tar -zxf nginx-1.23.1.tar.gz
cd nginx-1.23.1

注意:
这里需要修改openssl的编译配置,否则编译的时候会报错

vi auto/lib/openssl/conf

把这里

    CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"

修改成

    CORE_INCS="$CORE_INCS $OPENSSL/include"
    CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"
    CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"
    CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"

如果需要隐藏nginx的版本,需要修改两个文件

vi src/core/nginx.h
vi src/http/ngx_http_header_filter_module.c

然后开始编译

make

编译完成后,停止nginx服务,开始安装,安装完了再启动nginx服务

systemctl stop nginx
make install
systemctl start nginx

顺利的话,以上就完成了nginx的升级,然后修改nginx的配置文件,开启TLSv1.3

vi /etc/nginx/nginx.conf

在http段添加

ssl_protocols TLSv1.2 TLSv1.3;

同时,启用HSTS,继续添加

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options "DENY";

修改完配置后重启nginx服务

systemctl restart nginx

无法通过yum直接升级,只能下载源码编译升级,不过,好在编译比较容易。
下面简述一下步骤。
首先到openssl官网下载源码到/usr/local/src/

cd /usr/local/src/
wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz

解压后编译

tar -zxf openssl-1.1.1s.tar.gz
cd openssl-1.1.1s
./config --prefix=/usr/local/openssl
make && make install

编译完成后备份旧版

rm -f /usr/bin/openssl.old
rm -rf /usr/lib64/openssl.old
rm -f /usr/lib64/openssl.old
rm -f /usr/lib64/libssl.so.old
rm -f /usr/include/openssl
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v

完成了,检查一下版本

openssl version