I'm XuéChūn - 2024年12月
type: channel
link: https://www.xuechun.vip/2024/12/
description: 安卓客户端已发布
items: 小米路由器R3D刷机常用软件安装
items: Ubuntu常用命令
items: 突然发现R3D还能远程下载
items: PowerShell备份远程网站
items: Wordpress网站备份流程
items: 冷҈冷҈冷҈
items: 小米R3D上开启Webdav服务
items: lighttpd开启目录浏览
items: 开启HTTPS后WordPress显示不正常
items: 虚拟网络拓扑结构图

小米路由器R3D刷机常用软件安装
type: item
date: 2024-12-30T08:53:00+00:00
description: 刷机后常用软件：1) EntWare2) MixBox3) TailScale4) ZeroTier5) Nps Client6) Lighttpd7) Alist[...]

Ubuntu常用命令
type: item
date: 2024-12-26T08:49:00+00:00
description: 一些Ubuntu常用命令，pve建立容器后初始化系统。但现在所有程序都跑docker了，1panel 搭配 Portainer CE可以更好实现备份和恢复，再装一个飞牛，基本上够用了。更改时区为上海：sudo timedatectl set-timezone Asia/Shanghai查看当前时区设置： timedatectl查看正在监听的端口： sudo netstat -anlp | grep -w LISTEN服务自启动/启动，或者停止：sudo systemctl disable systemd-resolved sudo systemctl stop systemd-resolved sudo systemctl enable systemd-resolved sudo systemctl start systemd-resolved查看所有docker容器IP地址列表docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)公网服务器上DoT服务搭建继续失败，SmartDns也不能用了，周末继续折腾。

突然发现R3D还能远程下载
type: item
date: 2024-12-25T12:10:00+00:00
description: 今天发现小米路由器R3D(HD)还支持远程下载。❌ 2025年5月已不能用。下载页面网址：https://d.miwifi.com/d2r点击登录小米账号，就可以提交下载连接。打开手机APP，居然真的有下载进度：

PowerShell备份远程网站
type: item
date: 2024-12-23T15:23:00+00:00
description: 以下脚本保存成.ps1格式，按照实际修改里面变量。# 请修改这些变量的值 # 这里填写你网站服务器ip $IP="111.22.122.248" $PORT="22" # 站点名称，用于给网站目录打包后命名 $WEBNAME="www.test.com"; # 这里填写网站程序目录 $WEBDIR="/www/wwwroot/www.test.com" # 这里填写Mysql数据库的root密码，如果不需要密码请填123456等任意字符 $DBPASS="nm7KYiSPLsPZpjme" # 这里填写数据库的名称 $DBNAME="wordpress_db" # 这里填写本地备份目录，例如/root/backup $BACKUPDIR="D:\backups" # 保留14天的备份，可以改成30天，200天等 $EXPIRE_DAYS=14 #------------------------------------- # 以下应该不需要修改了 # 备份目录不存在则新建 if(-Not(Test-Path -Path $BACKUPDIR )){ New-Item -ItemType directory -Path $BACKUPDIR } # 准备备份目录 New-Item -ErrorAction Ignore -ItemType directory -Path $BACKUPDIR\db; New-Item -ErrorAction Ignore -ItemType directory -Path $BACKUPDIR\tar; New-Item -ErrorAction Ignore -ItemType directory -Path $BACKUPDIR\files; # 判断目录创建是否成功 if(!(Test-Path -Path $BACKUPDIR\db ) -or !(Test-Path -Path $BACKUPDIR\tar) -or !(Test-Path -Path $BACKUPDIR\files)){ echo "无法创建备份目录"; exit 1; } # 在服务器远程备份数据库 $DBFILE=$DBNAME+"-"+((Get-Date).ToString("yyyyMMdd_HHmmss"))+".sql.gz"; echo "数据库备份名："+$DBFILE; # 删除已有数据库备份 ssh -p $PORT root@$IP "rm -f ~/$DBNAME*.sql.gz" # MySql账号密码保存在服务器 /etc/mysql/conf.d/mysqldump.cnf文件中 ssh -p $PORT root@$IP "mysqldump -u root $DBNAME | gzip > ~/$DBFILE"; # 命令行使用明文密码方式会有警告 #ssh -p $PORT root@$IP "mysqldump -u root -p$DBPASS $DBNAME | gzip > ~/$DBFILE"; # 下载远程文件，注意端口-P要大写 scp -P $PORT root@${IP}:~/$DBFILE $BACKUPDIR\db\; # 删除数据库备份文件 ssh -p $PORT root@$IP "rm -f ~/$DBFILE"; #rm -rf root@${IP}:~/$DBFILE ;# 没搞定端口 # 将网站所在文件夹打包压缩 $ZIP_FILE=$WEBNAME+"-"+((Get-Date).ToString("yyyyMMdd_HHmmss"))+".tar.gz"; ssh -p $PORT root@$IP "tar -zcPvf ~/$ZIP_FILE $WEBDIR"; scp -P $PORT root@${IP}:~/$ZIP_FILE $BACKUPDIR\tar\; # 删除备份文件 ssh -p $PORT root@$IP "rm -f ~/$ZIP_FILE"; exit 0;这是从Linux脚本转过来的，有几个问题需要处理：1、SSH没法在命令行指定密码。要用公匙登录，在PowerShell下输入：ssh-keygen -t rsa -b 4096 #备份服务器上生成RSA公钥然后，突然发现PowerShell识别不了ssh-copy-id，网上搜到的教程，复制下面这段脚本，粘贴到Windows终端，按回车运行即可。function ssh-copy-id([string]$userAtMachine, $args){ $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub" i…

Wordpress网站备份流程
type: item
date: 2024-12-23T07:00:00+00:00
description: 以下脚本保存成.ps1格式，按照实际修改里面变量。# 请修改这些变量的值 # 这里填写你网站服务器ip $IP="111.22.122.248" $PORT="22" # 站点名称，用于给网站目录打包后命名 $WEBNAME="www.test.com"; # 这里填写网站程序目录 $WEBDIR="/www/wwwroot/www.test.com" # 这里填写Mysql数据库的root密码，如果不需要密码请填123456等任意字符 $DBPASS="nm7KYiSPLsPZpjme" # 这里填写数据库的名称 $DBNAME="wordpress_db" # 这里填写本地备份目录，例如/root/backup $BACKUPDIR="D:\backups" # 保留14天的备份，可以改成30天，200天等 $EXPIRE_DAYS=14 #------------------------------------- # 以下应该不需要修改了 # 备份目录不存在则新建 if(-Not(Test-Path -Path $BACKUPDIR )){ New-Item -ItemType directory -Path $BACKUPDIR } # 准备备份目录 New-Item -ErrorAction Ignore -ItemType directory -Path $BACKUPDIR\db; New-Item -ErrorAction Ignore -ItemType directory -Path $BACKUPDIR\tar; New-Item -ErrorAction Ignore -ItemType directory -Path $BACKUPDIR\files; # 判断目录创建是否成功 if(!(Test-Path -Path $BACKUPDIR\db ) -or !(Test-Path -Path $BACKUPDIR\tar) -or !(Test-Path -Path $BACKUPDIR\files)){ echo "无法创建备份目录"; exit 1; } # 在服务器远程备份数据库 $DBFILE=$DBNAME+"-"+((Get-Date).ToString("yyyyMMdd_HHmmss"))+".sql.gz"; echo "数据库备份名："+$DBFILE; # 删除已有数据库备份 ssh -p $PORT root@$IP "rm -f ~/$DBNAME*.sql.gz" # MySql账号密码保存在服务器 /etc/mysql/conf.d/mysqldump.cnf文件中 ssh -p $PORT root@$IP "mysqldump -u root $DBNAME | gzip > ~/$DBFILE"; # 命令行使用明文密码方式会有警告 #ssh -p $PORT root@$IP "mysqldump -u root -p$DBPASS $DBNAME | gzip > ~/$DBFILE"; # 下载远程文件，注意端口-P要大写 scp -P $PORT root@${IP}:~/$DBFILE $BACKUPDIR\db\; # 删除数据库备份文件 ssh -p $PORT root@$IP "rm -f ~/$DBFILE"; #rm -rf root@${IP}:~/$DBFILE ;# 没搞定端口 # 将网站所在文件夹打包压缩 $ZIP_FILE=$WEBNAME+"-"+((Get-Date).ToString("yyyyMMdd_HHmmss"))+".tar.gz"; ssh -p $PORT root@$IP "tar -zcPvf ~/$ZIP_FILE $WEBDIR"; scp -P $PORT root@${IP}:~/$ZIP_FILE $BACKUPDIR\tar\; # 删除备份文件 ssh -p $PORT root@$IP "rm -f ~/$ZIP_FILE"; exit 0;这是从Linux脚本转过来的，有几个问题需要处理：1、SSH没法在命令行指定密码。要用公匙登录，在PowerShell下输入：ssh-keygen -t rsa -b 4096 #备份服务器上生成RSA公钥然后，突然发现PowerShell识别不了ssh-copy-id，网上搜到的教程，复制下面这段脚本，粘贴到Windows终端，按回车运行即可。function ssh-copy-id([string]$userAtMachine, $args){ $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub" i…

冷҈冷҈冷҈
type: item
date: 2024-12-23T05:40:00+00:00
description: 冬天了啊

小米R3D上开启Webdav服务
type: item
date: 2024-12-22T19:33:00+00:00
description: 小米古董路由器R3D恢复出厂设置后，搭建webdav用于外网访问。其实用Alist更方便，虽然现在都在传Alist被收购了要凉了，但毕竟普通用户影响不大。参考 https://18kas.com/openwrt-webdav 安装以下三个模块。配置文件按照教程来就行。opkg update opkg install lighttpd-mod-webdav lighttpd-mod-auth lighttpd-mod-authn_fileEntware版本的，需要注意Sqlite3数据库目录，默认指向 /opt/var/lib/lighttpd/webdav.db，但是/opt/var/lib/lighttpd/目录不存在，需要手动建立。启动服务失败没提示，看错误日志才发现这个异常。以上配置好了后，浏览器访问http://ip:8080/dav返回403错误，郁闷……，但用软件连接正常。接下来公网服务器操作：1、nps增加tcp隧道转发，这个属于基本操作。2、安装davfs2挂载到服务器，可以参考 Linux 自动挂载 alist 提供的webdav（1）安装davfs2：apt-get install davfs2 -y（2）配置davfs2：在/etc/davfs2/secrets中添加如下一行即可："http://127.0.0.1:9001/" admin password（3）挂载到本地磁盘：mount.davfs http://127.0.0.1:9001/ /home3、配置自动化脚本运行任务。

lighttpd开启目录浏览
type: item
date: 2024-12-21T17:36:00+00:00
description: 这是接上一篇文章 小米R3D上开启Webdav服务 的后续操作，记录一下。古董机R3D毕竟马上要淘汰了，但一直感觉自带的Samba共享挺实用，后续也没厂商再出这种硬路由了。目前没用路由的webdav，远程访问用飞牛转发。编辑 lighttpd.conf1、开启所有目录的目录浏览dir-listing.activate = "enable"2、开启特定目录的目录浏览$HTTP["url"] =~ "^/upload($|/)" { dir-listing.activate = "enable" }3、开启所有目录,关闭特定目录的目录浏览dir-listing.activate = "enable" $HTTP["url"] =~ "^/www($|/)" { dir-listing.activate = "disable" }4、文件名乱码dir-listing.encoding = "utf8"来自：https://ferrets.space/2012/03/20/lighttpd开启关闭目录浏览/

开启HTTPS后WordPress显示不正常
type: item
date: 2024-12-21T02:24:00+00:00
description: 1、问题点：由于服务器放在内网，用NPS从公网中转。开启HTTPS后，公网服务器还是用80端口连接内网，导致WordPress误以为没有开启HTTPS，css/js文件路径还是HTTP导致加载失败，页面显示不正常。2、问题排查：网络搜索发现是wp-includes/load.php这个文件中的is_ssl()返回值异常。公网中转时返回值一直是false。wp-includes/load.php 中只判断了$_SERVER['HTTPS'] 和$_SERVER['SERVER_PORT'] 字段，公网中转时这两个字段值还是http/80。function is_ssl() { if ( isset( $_SERVER['HTTPS'] ) ) { if ( 'on' === strtolower( $_SERVER['HTTPS'] ) ) { return true; } if ( '1' === (string) $_SERVER['HTTPS'] ) { return true; } } elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' === (string) $_SERVER['SERVER_PORT'] ) ) { return true; } return false; }打印出 $_SERVER 所有值，发现里面有两个HTTP_X_FORWARDED字段标记了https和443，可以用来判断。print_r($_SERVER);Array ( ...... [HTTP_X_FORWARDED_PROTO] => https [HTTP_X_FORWARDED_PORT] => 443 ...... [SERVER_PORT] => 80 ...... [REQUEST_SCHEME] => http # 打印出来没有 $_SERVER['HTTPS'] ...... )3、问题解决：所以直接修改is_ssl()函数，增加对 HTTP_X_FORWARDED_PORT 和 HTTP_X_FORWARDED_PROTO 的判断即可。修改后的代码：function is_ssl() { if ( isset( $_SERVER['HTTPS'] ) ) { if ( 'on' === strtolower( $_SERVER['HTTPS'] ) ) { return true; } if ( '1' === (string) $_SERVER['HTTPS'] ) { return true; } } elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' === (string) $_SERVER['SERVER_PORT'] ) ) { return true; } /* 以下两个判断新增加 */ elseif ( isset( $_SERVER['HTTP_X_FORWARDED_PORT'] ) && ( '443' === (string) $_SERVER['HTTP_X_FORWARDED_PORT'] ) ) { return true; } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && ( 'https' === strtolower( $_SERVER['HTTP_X_FORWARDED_PROTO']) )) { return true; } return false; }测试访问正常。

虚拟网络拓扑结构图
type: item
date: 2024-12-20T19:58:00+00:00
description: 不知所谓的东东……1、路由器MiWifi 咸鱼上收的小米路由器HD，自带1T机械硬盘； 用来组建私有网络，通过Samba在局域网内充当文件共享服务器。2、Centerm C92 二手升腾瘦客户机，8G内存/256G机械硬盘，WIN10LTSB系统； 安装宝塔系统，充当Wordpress服务器。同时用Bind9搭建了私有DNS服务器。3、外置机械硬盘 4T机械硬盘，搭配绿联硬盘盒。 目前备份着近几年来的文件，用了大概100G左右。 现在是NTF格式，准备格式化成EX4，利用小米路由器HD的双盘自动备份功能。4、云服务器 华为云最便宜的新手每年22元，但域名要备案。 香港主机淘宝上最便宜的每月8元，5MPS无流量限制，内网穿透访问Wordpress速度跟国内阿里云、华为云没明显差别。重要的是没有备案的域名可以解析，暂时选择它。5、虚拟网络搭建 虚拟网络用TailScale和ZeroTier同时搭建，用来远程连接Centerm桌面，后续搭建NAS。 （1）TailScale局域网内安装在小米路由器上，可以直接访问内网所有设备。局域网内其他设备不用安装。 （2）ZeroTier局域网内安装在Centerm瘦客户机上，可以用远程桌面访问局域网设备。可以在云主机上搭建Planet根服务器，但可能云主机宽带太小，测试加速效果不理想。 ZeroTier小米路由器上安装失败：官方固件安装后无法连接网络，刷了OpenWrt后路由器的很多功能又没法利用了。6、内网穿透 选择用nps内网穿透，通过云主机，转发内网Centerm上的Wordpress服务。同时可以在外部电脑/手机（没有加入虚拟局域网）上访问内网设备，3389远程桌面、宝塔系统、路由器SSH连接等。后续补充R3D上软件安装方法，nps、TailScale和ZeroTier使用方法。