因为博主最近使用PVE虚拟了一个软路由爱快系统，但是使用时爱快与光猫的网口速率不定时会掉到100M（事后检查发现是光猫太辣鸡了，换个光猫就好了），所以博主想通过每天定时重启来达到定时更新接口速率的效果，虽然爱快里面有定时重启功能，但是我想通过PVE重启虚拟机来达到重启的目的，下面就开始吧。第一步：首先创建一个定时任务执行记录文件：使用root用户登录shell，输入：touch /var/log/my-cron.log sudo chown root:root /var/log/my-cron.log sudo chmod 664 /var/log/my-cron.log这样我们就创建好了定时任务执行文件，文件目录：/var/log/my-cron.log第二步：在编辑前我们需要知道自己的节点名称和虚拟机编号，这个我们可以在PVE的首页查到：从上图可以得知，我们的节点名称叫ANNT，爱快虚拟机的编号就是机器前面的数字100。我们使用crontab -e命令进入定时任务编辑，移动到最下面，输入：#每天5点10分重启爱快 10 5 * * * pvesh create /nodes/节点名称/qemu/虚拟机编号/status/命令文本 >> /var/log/my-cron.log 2>&1我这个重启就是如下命令：#每天5点10分重启爱快 10 5 * * * pvesh create /nodes/ANNT/qemu/100/status/reboot >> /var/log/my-cron.log 2>&1然后使用Ctrl+O保存，Ctrl+X退出。还有的命令是：reboot 重启 stop 停止 start 开始第三步我们第二天可以查看执行记录看是否正常执行，输入nano /var/log/my-cron.log文件每一行就是一次的执行情况，如果报错的话会显示，如果正常执行的话会显示：UPID:ANNT:001C9242:04E773C2:65A59F2A:qmreboot:100:root@pam:好了，教程到此结束。参考资料：https://www.cnblogs.com/pdblogs/p/16485887.htmlhttps://www.python100.com/html/80470.html
本文主要介绍使用frp进行内网穿透，达到随时可以登录PVE管理界面的效果。1、准备工作1、首先你需要一台有固定公网的服务器，速度不能太差，可以自己买个VPS，美西、阿里云、腾讯云都可以，hostloc.com里面很多介绍。2、一个域名，免费的也可以。3、我们去frp的官网下载最新稳定版，https://github.com/fatedier/frp/releases，本文服务器端采用Centos7，所以下载frp_0.52.3_linux_amd64.tar.gz版本。4、frp本质是一个转发软件，配置简单性能优秀。服务端是转发用的，相当于中间人，客户端是你要转发出去的网站。2、服务器端的安装（以VPS为例）1、解压刚才下载的压缩包，将下面两个文件使用WinSCP上传到VPS服务器：frps frps.toml我在/usr/local下新建了frp文件夹，我准备把它安装在这里，所以上传到这个文件夹，注意文件夹拥有者及组，都要选root，因为后面SSH登录服务器执行命令的用户名就是root，如果后面程序无法启动，可以检查下是不是这里出错了。上传的文件注意修改权限：2、然后我们修改frps.toml，来配置连接端口。以文本打开，直接修改为：bindPort = 8500 vhostHTTPSPort = 8700 auth.token = "QWER654321"第一个是frp服务基本端口，第二个是HTTPS转发端口，因为PVE管理界面是基于HTTPS的，所以我们需要添加这个，端口号这个可以根据自身情况修改。最后一个相当于登录密码，防止瞎猫碰上死耗子，QWER654321请自行修改。改好后我们还要在防火墙中放行8500、8700端口，不然连不上。我为了方便起见，选用了宝塔BT服务器面板，在面板里面找到安全，在右边填上端口，点击放行，搞定。3、现在我们要临时运行下frp看有没有报错，执行：cd /usr/local/frp //你自己的安装位置 ./frps -c ./frps.toml返回[root@wiki-hk-web frp]# ./frps -c ./frps.toml 2023/11/26 22:19:07 [I] [root.go:102] frps uses config file: ./frps.toml 2023/11/26 22:19:08 [I] [service.go:200] frps tcp listen on 0.0.0.0:8500 2023/11/26 22:19:08 [I] [service.go:276] https service listen on 0.0.0.0:8700 2023/11/26 22:19:08 [I] [root.go:111] frps started successfullyOK，配置没有问题，Ctrl+C结束运行，那么设置下让他自启动吧。4、首先在VPS安装systemd、nano：# 使用 yum 安装 systemd nano（CentOS/RHEL） yum install systemd yum install nano # 使用 apt 安装 systemd nano（Debian/Ubuntu） apt install systemd apt install nano生成服务文件：sudo nano /etc/systemd/system/frps.service粘贴以下文件：[Unit] # 服务名称，可自定义 Description = frp server After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令，需修改为您的frps的安装路径 ExecStart = /usr/local/frp/frps -c /usr/local/frp/frps.toml [Install] WantedBy = multi-user.target然后使用Ctrl+O保存，Ctrl+X退出，设置开机启动：sudo systemctl enable frps后面可以通过以下命令管理frp：# 启动frp sudo systemctl start frps # 停止frp sudo systemctl stop frps # 重启frp sudo systemctl restart frps # 查看frp状态 sudo systemctl status frps3、PVE客户端安装FRP1、通过WinSCP登录PVE的服务器，我们还是在/usr/loca下新建frp文件夹，权限要求和上面一样。把frpc frpc.toml拷贝进去，这两个文件的权限和服务器端要求一样，编辑frpc.toml文件，写入如下：serverAddr = "VPS的IP" serverPort = 8500 auth.token = "QWER654321" vhostHTTPSPort = 8700 loginFailExit = false [[proxies]] name = "PVE WEB" type = "https" localPort = 8006 customDomains = ["你的域名"]serverPort和auth.token要和VPS内的配置一致，不然连不上。vhostHTTPSPort = 8700是指转发HTTPS流量到VPS的8700端口（PVE需要https登录），你的域名记得在宝塔面板左边的网站里添加站点绑定上，选纯静态就行。客户端是主动连接VPS，所以不需要修改客户端的防火墙。2、现在测试下frp转发如何cd /usr/local/frp //你自己的安装位置 ./frpc -c ./frpc.toml出现root@ANNT:/usr/local/frp# ./frpc -c ./frpc.toml 2023/11/26 22:53:44 [I] [root.go:139] start frpc service for config file [./frpc.toml] 2023/11/26 22:53:45 [I] [service.go:299] [325dd1b6e6d1b389] login to server success, get run id [325dd1b6e6d1b389] 2023/11/26 22:53:45 [I] [proxy_manager.go:156] [325dd1b6e6d1b389] proxy added: [PVE WEB] 2023/11/26 22:53:45 [I] [control.go:173] [325dd1b6e6d1b389] [PVE WEB] start proxy successOK，通过https://你的域名:8700访问下，看是不是已经转发成功了那。3、现在运行Ctrl+C结束，我们开始让frp在客户机上也开机运行。安装systemd、nano：# 使用 yum 安装 systemd nano（CentOS/RHEL） yum install systemd yum install nano # 使用 apt 安装 systemd nano（Debian/Ubuntu） apt install systemd apt install nano创建 frpc.service 文件：sudo nano /etc/systemd/system/frpc.service写入：[Unit] # 服务名称，可自定义 Description = frpc daemon After = network.target syslog.target Wants = network.target [Service] Type = simple # 启动frps的命令，需修改为您的frps的安装路径 ExecStart = /usr/local/frp/frpc -c /usr/local/frp/frpc.toml #Restart=on-success #RestartSec=180s [Install] WantedBy = multi-user.target这里我要单独说下上面代码中的Restart=on-success和RestartSec=180s。一般我们装PVE的主机都会在里面新建个虚拟机装个爱快，让爱快来负责拨号，这就导致一个问题：PVE实体机启动完成后还没有网络，要等虚拟机爱快启动拨号完成后才有网络，这会导致frp在实体机启动后无法连接服务端，导致其退出（退出时状态码为0），后面也不会重新连接，比较麻烦。frp一旦断开连接或没有网络都会自动退出，也不会重新连接，这没法达到我们无人值守的目的，所以我在代码里引入了Restart=on-success，它的作用是当检测到程序以正常模式终止时（退出时状态码为0），自动重新启动服务，所以frp启动后没有网络自动退出，后面就可以让它再启动，RestartSec=180s表示 Systemd 重启服务之前，需要等待的秒数，180秒足够爱快拨号了。但是这样也导致了一个问题，使用sudo systemctl stop命令也会在180秒后自动重启服务，因为他的状态码也是0，所以大家注意。如果你的PVE不用于拨号，那么可以删除这两个参数。现在我直接在frpc.toml中添加了loginFailExit = false参数，客户端在无法连接服务端时会一直尝试重新连接，上面的问题就全部解决了。然后使用Ctrl+O保存，Ctrl+X退出，然后运行：sudo systemctl enable frpc到此，客户端开机自启动就配置完成了，后面可以通过：# 启动frp sudo systemctl start frpc # 停止frp sudo systemctl stop frpc # 重启frp sudo systemctl restart frpc # 查看frp状态 sudo systemctl status frpc管理了。参考文献：https://gofrp.org/zh-cn/docs/overview/https://sspai.com/post/60852https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html