当前找到的是tlp,这个工具据说不错,在此试用一段时间看看效果。
分类: Linux
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intel x86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。
Ubuntu架设OpenVPN实现内网穿透
前言
家里的网络因为没有公网 IP,有时候想要连接到家里的树莓派或者电脑就无法实现。这个时候可以采用内网穿透的方法远程连接家中的机器,内网穿透的方案有很多,下面介绍一种采用 OpenVPN 实现内网穿透的方案。
配置
主机:腾讯云/阿里云
操作系统:Ubuntu 16.04/18.04/20.04
教程
安装 OpenVPN
首先,我们需要在服务器安装 OpenVPN。在 Ubuntu 系统中我们可以通过 apt 简单的进行安装。同时我们也需要安装 easy-rsa,它可以帮助我们生成 VPN 使用过程中所需的 CA 证书。
设置 CA 目录
OpenVPN 是使用 TLS/SSL 的 VPN。这意味着它利用证书来加密服务器和客户端之间的通信。为了发布受信任的证书,我们需要建立一个自己的简单的证书颁发机构(CA)。 使用 make-cadir
命令复制 easy-rsa 模板到 home 目录。
接着进入刚刚新建的目录准备配置 CA:
配置 CA 变量
进入 ~/openvpn/openvpn-ca
目录后,我们需要修改 vars
文件,以便于生成需要的 CA 值。
在文件底部找到以下配置:
将这些变量修改为任意你喜欢的值,但是不要为空:
然后,我们还要修改紧接着出现的 KEY_NAME
的值,为了简单起见,我们改为 server
(这个不要修改成其他名字,后续的配置文件中默认是这个名字), 默认是 EasyRSA
:
构建 CA 证书
针对 ubuntu 16.04 LTS/ubuntu 18.04 LTS 执行如下操作:
首先进入你的 CA 目录,然后执行 source vars
:
接着会有以下输出:
执行下列操作确保操作环境干净:
现在我们可以构建根 CA:
这将会启动创建根证书颁发密钥、证书的过程。由于我们刚才修改了 vars 文件,所有值应该都会自动填充。所以,一路回车就好了:
现在,我们就有了创建以下步骤需要的 CA 证书。
针对 ubuntu 20.04.6 LTS, 由于OpenVPN版本升级,已经没有上面的命令了,需要调整脚本为如下:
创建服务器端证书、密钥和加密文件
通过下列命令生成服务器端证书和秘钥:
注:server
就是刚才在 vars
文件中修改的 KEY_NAME
变量的值。请不要使用别的名字! 然后一直回车选择默认值即可,不要设置 challenge password
,直接回车即可。到最后,你需要输入两次 y 注册证书和提交。
然后还需要生成一些其他东西。我们可以在密钥交换过程中生成一个强大的 Diffie-Hellman 密钥:
这个操作大约会花费几分钟不等。 然后,我们可以生成 HMAC 签名加强服务器的 TLS 完整性验证功能:
配置 OpenVPN 服务
首先将刚刚生成的各类文件复制到 OpenVPN 目录下:
然后,解压并复制一个 OpenVPN 配置文件到 OpenVPN 目录:
接着更改配置,注释掉 udp
更改协议为 tcp
:
找到 tls-auth
位置,去掉注释,并在下面新增一行:
去掉 user
和 group
行前的注释:
去掉 client-to-client
行前的注释允许客户端之间互相访问:
开启客户端固定 IP 配置文件夹:
去掉注释后的完整配置如下:
去掉注释之后,精简的关键信息如下:
调整服务器网络配置
调整 UFW
规则
首先,确认UFW
防火墙状态,如果状态为开启,则调整。如果防火墙是关闭的,则不需要调整。
如果输出是Status: inactive
, 那么不需要进行下面的调整。
注意,下面的调整如果中间出现问题,可能导致防火墙拦截SSH
进而无法进行恢复操作。如果出现问题,可以使用阿里云或者腾讯云提供的远程控制台在网页端进行恢复操作。
注意,如果服务器是从早期版本的ubuntu 14.04
升级到ubunt 16.04
的,那么可能会出现如下警告信息:
原因为存在两个版本的防火墙配置文件 apache2-utils.ufw.profile
(ubunt 16.04
) , apache2.2-common
(ubuntu 14.04
) ,这两个配置文件。
我们需要删除早期的防火墙配置文件,如下:
如果服务器上UFW
首次启用, 需要手工许可若干常用服务,否则无法远程访问:
当然,也可以直接配置需要开放的端口,但是不推荐,如下:
如果需要删除特定的规则,那么参考如下命令:
打开 OpenVPN 端口并使变化生效
启动OpenVPN
执行:
设置开机自启:
创建客户端配置
生成客户端证书、密钥对
client-mobibrw
为密钥对名称,生成过程中回车选择默认选项即可。
注意,下面这一步一定要输入 y
否则会跳过最后一步,导致生成证书的时候会缺少部分信息。
注意,如果有多个客户端的话,建议为每个客户端生成一份配置文件。
创建客户端配置
执行下列命令,生成客户端配置的基础文件:
然后打开 ~/client-configs/base.conf
文件,修改 remote my-server-1 1194
为服务器公网IP或者域名。 然后更改客户端协议为 tcp
:
去掉 user
和 group
前的注释:
找到 ca/cert/key,注释掉:
在文件中新增一行:
保存退出文件。
去掉注释后的完整配置为:
创建配置生成脚本
新建 ~/client-configs/make_config.sh 文件,复制如下内容:
针对 ubuntu 20.04.6 LTS,由于OpenVPN版本升级,已经没有上面的命令了,需要调整脚本为如下:
保存并赋予执行权限:
生成客户端配置
执行:
使用此脚本生成一个配置文件方便客户端使用。 注:需要生成客户端密钥后才可使用脚本生成配置文件,client-mobibrw.ovpn
为刚刚生成的客户端密钥名称 生成后的脚本储存在 ~/client-configs/files
目录下,名称为 client-mobibrw.ovpn
。将文件下载到本地即可使用了。
为客户端设置固定IP
首先在 OpenVPN 所在的文件夹内创建ccd
文件夹:
然后进入该文件夹并创建与客户端密钥同名的文件:
文件内容如下(前面是客户端固定IP地址,后面是网关地址):
此内容意为固定client-mobibrw
客户端的OpenVPN
内网IP
为10.8.0.8
。
注意,上面的配置在客户端是Windows系统的时候,会报告如下错误:
或者如下:
导致这个错误的原因是 TAP-WIN32 使用默认子网掩码 255.255.255.252 因此一个网段之内只能有两个相邻IP,一个是网关,一个是子网设备。
这个问题在 Linux/macOS 系统上是不存在的,这个是 TAP-WIN32 驱动的限制。
因此,如果系统是 Windows 并且使用 TAP-WIN32 驱动,那么配置的地址只能是如下情况:
或者
或者
前面为设备地址,后面为网关IP。规律就是 设备地址是 网关地址 +1 。
继续阅读Ubuntu架设OpenVPN实现内网穿透
OpenmediaVault-4.1.3上编译Linux Kernel 4.14.118
也可以使用下面的方式正常编译 Linux Kernel 4.14.118
。
建议使用 VirtualBox
上建立虚拟机,保证磁盘空间不小于 32GB
,给 root
用户设置密码,远程通过 shell
登录到虚拟机。
查询虚拟机的 IP
地址的时候,使用
命令查询。虚拟机网卡设置的时候,设置为桥接模式,默认的 NAT
模式无法通过 SSH
登录。
然后执行如下命令:
完成后,在当前用户目录下生成 linux-image-4.14.118_4.14.118-10.00.Custom_amd64.deb
安装包,执行如下命令安装:
参考链接
解决Btrfs文件系统ext2_saved文件磁盘占用异常
最近在 OpenMediaVault 4.1.22-1(Arrakis)
进行磁盘文件占用分析的时候,发现磁盘空间异常占用问题,如下:
这个 1.3T ./ext2_saved
文件是不存在的,并且没办法通过常规命令删除。
这个文件产生的原因是,执行过 从 EXT3/4
转换转化分区到 Btrfs
:
完成转换需要删除备份的 ext2_saved
子卷,否则空间会不能释放。 请注意,如果没了它(备份子卷),你将没办法还原回 EXT3/4
文件系统。
可能会报错:
无视这个报错即可。
完成后再次查询文件占用空间:
可以看到空间已经被释放了。
参考链接
软件磁盘阵列(RAID)
RAID软件磁盘阵列
RAID 即廉价磁盘冗余阵列,其高可用性和可靠性适用于大规模环境中,相比正常使用,数据更需要被保护。RAID 是将多个磁盘整合的大磁盘,不仅具有存储功能,同时还有数据保护功能.
软件磁盘整列通过mdadm命令创建.
RAID等级
- RAID-0: 等量模式,stripe,性能较佳,磁盘利用率100%
- RAID-1: 镜像模式,mirror,安全性较佳,磁盘利用率50%
- RAID-0+1: 先组成RAID-0,再有RAID-0组成RAID-1 性能安全兼顾,磁盘利用率50%
- RAID-1+0:先组成RAID-1,再有RAID-1组成RAID-0 性能安全兼顾,磁盘利用率50%
- RAID-5: 等量模式与分布式奇偶校验,性能与安全份均衡,磁盘可用量等于n-1
- RAID-6: 等量模式与双分布式奇偶校验,性能与安全均衡,磁盘可用量等于n-2
解决undefined reference to pthread_atfork/pthread_detach/pthread_create/pthread_join
在编译陈硕github上面的代码时,遇到了链接错误:
在编译时已经加了-lpthread,还是有这个问题。
在这里找到了答案:http://stackoverflow.com/questions/2373109/what-library-to-be-to-be-used-to-avoid-undefined-reference-to-pthread-atfork
pthread_atfork是POSIX标准,在编译时要加上-pthread
-lpthread是老版本的gcc编译器用的,在新版本中应该用-pthread取代-lpthread
参考链接
解决undefined reference to pthread_atfork
/pthread_detach
/pthread_create
/pthread_join
利用rsync断点续传scp中断的文件传输
服务器经常需要备份,但是长时间的下载,难免会出现下载中断的情况。
一直使用scp
下载备份好的文件,以前数据量少的时候,直接重新下载就可以了。随着网站上数据越来越多,下载的时间越来越长,完全重新开始变得不现实了。有时候下载到90%
以上的时候,失败了,完全重传是没有必要的。
我们只需要下载缺失的部分就好了,幸运的是rsync
支持这种需求。
具体的做法是将如下的选项组合传递给rsync
,-checksum
(文件分块计算校验和,只传输校验和不一致的部分),-in-place
(将文件原地替换,因为rsync
通常会写一个临时文件,然后移动)和-no-whole-file
(告诉rsync
不要复制整个文件,而是使用deltas
(部分传输))。
例如:
下面是一个真实的例子:
整个过程非常的快,比完全重传快多了。
scp
命令拷贝文件非常好用,但在拷贝大文件时存在一个问题就是连接经常会断开,此时再使用scp
进行拷贝会重新拷贝文件,为了解决这个问题。我们可以使用rsync
命令来进行断点续传。命令如下:
为了使用方便可以设置alias
:
参考链接
Introducing Cache Pseudo-Locking to reduce memory access latency
Introducing Cache Pseudo-Locking to reduce memory access latency
继续阅读Introducing Cache Pseudo-Locking to reduce memory access latency
解决VirtualBox无法共享粘贴板的问题(Debian)
一直使用VirtualBox
安装的Debian
环境编译WD MyCloud
的代码。但是最近VirtualBox
升级后,升级增强功能,然后共享粘贴板就不能使用了。
如果执行
可看到错误信息:
继续阅读解决VirtualBox无法共享粘贴板的问题(Debian)
Linux SSH保持连接(解决Broken pipe)
在使用SSH客户端进行连接管理的时候如果长时间不输入命令, 服务器会自动断开连接, 尤其是有的人使用SSH作为代理连接这样的情况更是突出, 因此我在网上搜集了可以让 SSH 保持连接的方法与大家分享
在服务器端,可以让服务器发送“心跳”信号测试提醒客户端进行保持连接
通过修改 sshd 的配置文件,能够让 SSH Server 发送“心跳”信号来维持持续连接,下面是设置的内容
打开服务器 /etc/ssh/sshd_config,我在最后增加一行
这 样,SSH Server 每 60 秒就会自动发送一个信号给 Client,而等待 Client 回应,(注意:是服务器发心跳信号,不是客户端,这个有别于一些 FTP Client 发送的 KeepAlives 信号哦~~~),如果客户端没有回应,会记录下来直到记录数超过 ClientAliveCountMax 的值时,才会断开连接。
如果你没有服务器端管理权限,在客户端进行设置也可以实现
只要在/etc/ssh/ssh_config文件里加两个参数就行了
前一个参数是说要保持连接,后一个参数表示每过5分钟发一个数据包到服务器表示“我还活着”
如果你没有root权限,修改或者创建~/.ssh/ssh_config也是可以的
在这种方法中, 如果你只想针对某一个ssh连接进行持续, 你可以将上述配置文件复制一下进行修改然后在连接的时候使用 -F参数进行配置文件的指定。 当然因为只需要修改两个参数, 你也可以直接在连接命令中进行设定即: