首页
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索
1
PCL我的世界启动器设置第三方登录
44 阅读
2
Debian搭建wireguard组网
12 阅读
3
开源、轻量、易用的服务器监控,实战部署哪吒监控
4 阅读
4
哪吒监控配置nginx反向代理
3 阅读
5
Rust静态编译
3 阅读
服务器
技术
闲谈
MC
VPN
登录
搜索
标签搜索
debian
服务器
Linux
监控
雨云
wireguard
Android
MC
我的世界
硬盘
nginx
反向代理
哪吒
部署
Rust
静态编译
组网
局域网
联机
虚拟网卡
mohuangNPC
累计撰写
18
篇文章
累计收到
1
条评论
首页
栏目
服务器
技术
闲谈
MC
VPN
页面
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索到
7
篇与
的结果
2026-01-08
Debian服务器根目录LVM扩容记录
最近用PVE和VM创建的虚拟机根目录总是不够用,但是我又不想一次性分多,现在导致根目录容量告急,这里记录一下稳妥的根目录扩容方案,应该也适用于别的目录先判断你的 服务器/虚拟机 用的是什么结构本教程暂时先记录LVM的流程LVMlsblk sda ├─sda1 boot ├─sda2 LVM PV ├─pve-root ├─pve-swap └─pve-data你会看到类似LVM的字眼,即是LVM给虚拟机扩容首先我们使用首先使用PVE/VM给虚拟机增加磁盘容量增加容量前sda 8:0 0 40G 0 disk ├─sda1 8:1 0 976M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 39G 0 part ├─node01--vg-root 254:0 0 8.5G 0 lvm / ├─node01--vg-swap_1 254:1 0 2G 0 lvm [SWAP] └─node01--vg-home 254:2 0 28.4G 0 lvm /home sr0 11:0 1 754M 0 rom我们可以看到sda只有40G增加容量后sda 8:0 0 80G 0 disk ├─sda1 8:1 0 976M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 39G 0 part ├─node01--vg-root 254:0 0 8.5G 0 lvm / ├─node01--vg-swap_1 254:1 0 2G 0 lvm [SWAP] └─node01--vg-home 254:2 0 28.4G 0 lvm /home sr0 11:0 1 754M 0 rom现在sda已经80G了,但是这80G还不能使用,我们需要分给根目录分配空间给根目录进入 partedparted /dev/sdapartend未安装apt install parted运行命令我们在parted中依次输入print Model: VMware, VMware Virtual S (scsi) Disk /dev/sda: 85.9GB Sector size (logical/physical): 512B/512B Partition Table: msdos Disk Flags: Number Start End Size Type File system Flags 1 1049kB 1024MB 1023MB primary ext4 boot 2 1026MB 42.9GB 41.9GB extended lba 5 1026MB 42.9GB 41.9GB logical resizepart 5 100% quit注意当我们输入 resizepart 5 100% 的时候,可能会提示如下Error: Can't have overlapping partitions.为什么会提示是 MBR + 扩展分区(extended)结构的限制,咱们现在的结构是这样的sda1 primary /boot sda2 extended ← 外壳 └─sda5 logical ← LVM 用的sda5 是“逻辑分区”它 必须完全位于 sda2(扩展分区)内部你现在只尝试扩 sda5但 sda2 本身没有扩到 100%咱们不能让 sda5 超出 sda2 的范围(否则就“重叠”了)正确顺序先扩 sda2(extended) → 再扩 sda5(logical) → 再 pvresize → 再 lvextend所以如果提示这个错误,先退出parted, 然后重新 parted /dev/sda 进入,然后先执行resizepart 2 100%如果提示分区正在使用:Is this partition in use?输入Yes即可然后我们继续依次输入:resizepart 5 100% quit查看空间sda 8:0 0 80G 0 disk ├─sda1 8:1 0 976M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 79G 0 part ├─node01--vg-root 254:0 0 8.5G 0 lvm / ├─node01--vg-swap_1 254:1 0 2G 0 lvm [SWAP] └─node01--vg-home 254:2 0 28.4G 0 lvm /home sr0 11:0 1 754M 0 rom 现在我们sda5已经79G了,下一步继续把空间分给具体的跟目录(/)分配容量到跟目录让 LVM 认识新空间pvresize /dev/sda5确认 VG 里有空闲空间(强烈建议看一眼)vgdisplay node01-vg应该能看到类似:Free PE / Size 40.00 GiB把空闲空间给根目录 /全部给根目录lvextend -l +100%FREE /dev/node01-vg/root只给一部分lvextend -L +30G /dev/node01-vg/root扩展文件系统(ext4 必须做)resize2fs /dev/node01-vg/root如果是 xfs(你大概率不是),那是 xfs_growfs /最后验证df -h /已经增加上了Filesystem Size Used Avail Use% Mounted on udev 7.8G 0 7.8G 0% /dev tmpfs 1.6G 1.2M 1.6G 1% /run /dev/mapper/node01--vg-root 48G 6.8G 39G 15% / tmpfs 7.8G 0 7.8G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service tmpfs 7.8G 0 7.8G 0% /tmp /dev/sda1 943M 111M 768M 13% /boot /dev/mapper/node01--vg-home 28G 21G 5.9G 78% /home overlay 48G 6.8G 39G 15% /var/lib/docker/rootfs/overlayfs/368311adf1778f75225d00392c20a82e0c8785b6bde1badc75844b8f6a556d38 tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service tmpfs 1.6G 12K 1.6G 1% /run/user/0 root@node01:~#
2026年01月08日
1 阅读
0 评论
0 点赞
2026-01-06
Debian使用nftables进行端口转发
最近搭建MC服务器,虽然有公网IP但是不想使用frp,最后采用了通过了Wireguard组网,nftables进行转口转发的方式,这里记录一下端口转发的配置以及相关介绍先上一些基础名词配置# 标准 NAT 钩子点有约定名称: # - prerouting (入站数据包处理) # - input (目标为本机的数据包) # - output (本机产生的数据包) # - postrouting (出站数据包处理) # - forward (转发的数据包) # nftables iptables # --------------------------------- # prerouting ↔ PREROUTING # input ↔ INPUT # output ↔ OUTPUT # postrouting ↔ POSTROUTING # forward ↔ FORWARD # 如果你改名,熟悉 iptables 的人会困惑直接上配置,咱们逐行解析table ip nat { chain prerouting { type nat hook prerouting priority -100; policy accept; # 外部访问转发 tcp dport 80 redirect to :8080 } chain output { type nat hook output priority -100; policy accept; # 本地访问转发 ip daddr 127.0.0.1 tcp dport 80 redirect to :8080 # 或者更通用(包括本机IP) # tcp dport 80 redirect to :8080 } chain postrouting { type nat hook postrouting priority 100; policy accept; } }表定义table ip nattable:定义一个 nftables 表ip:仅处理 IPv4 数据包(IPv6 需要 ip6 或 inet)nat:表名称,专门用于网络地址转换(NAT)PREROUTING 链定义 chain prerouting { type nat hook prerouting priority -100; policy accept;chain prerouting:创建名为 "prerouting" 的链type nat:这是一个 NAT 类型的链hook prerouting:挂接到内核的 PREROUTING 钩子点priority -100:优先级,数字越小优先级越高policy accept:默认策略是接受(如果规则不匹配)工作流程:外部访问: 客户端 → 服务器IP:80 → PREROUTING → 目标端口改为8080 → 本地进程PREROUTING 规则# 外部访问转发 tcp dport 80 redirect to :8080 }tcp dport 80:匹配 TCP 协议且目标端口为 80 的数据包redirect to :8080:将目标端口重定向到 8080工作流程:外部访问: 客户端 → 服务器IP:80 → PREROUTING → 目标端口改为8080 → 本地进程OUTPUT 链定义 chain output { type nat hook output priority -100; policy accept;chain output:创建名为 "output" 的链hook output:挂接到 OUTPUT 钩子点优先级相同:-100,与 PREROUTING 并行处理OUTPUT 钩子位置:本地进程发送数据 → OUTPUT → POSTROUTING → 发送到网络OUTPUT 链规则# 本地访问转发 ip daddr 127.0.0.1 tcp dport 80 redirect to :8080ip daddr 127.0.0.1:匹配目标 IP 地址为 127.0.0.1(localhost)tcp dport 80:匹配目标端口 80redirect to :8080:重定向到 8080 端口为什么需要这个规则本地访问: curl 127.0.0.1:80 → OUTPUT链 → 端口改为8080 → 回环接口 → 本地进程POSTROUTING 链定义 chain postrouting { type nat hook postrouting priority 100; policy accept; } }hook postrouting:挂接到 POSTROUTING 钩子点priority 100:较低优先级,在路由决策后执行POSTROUTING 钩子位置:数据包发送前 → POSTROUTING → 网络接口发送完整数据包流向场景1:外部客户端访问场景2:本地 curl 访问场景3:本地 curl 访问服务器公网IP问题当咱们有这个配置 chain output { type nat hook output priority -100; policy accept; # 本地访问转发 ip daddr 127.0.0.1 tcp dport 80 redirect to :8080 # 或者更通用(包括本机IP) # tcp dport 80 redirect to :8080 }咱们访问curl 127.0.0.1的时候会转发到80,但是curl 192.x.x.x则不会,因为咱们只配置了127.0.0.1解决方案1:更通用的 OUTPUT 规则chain output { type nat hook output priority -100; policy accept; # 匹配所有目标端口80的TCP流量 tcp dport 80 redirect to :8080 }但是这样有大问题,本机所有目标端口的80都会到8080,甚至是curl http://www.baidu.com所以慎用解决方案2:指定所有本地IP chain output { type nat hook output priority -100; policy accept; # 匹配多个本地地址 ip daddr { 127.0.0.1, 192.168.1.100, 10.0.0.1 } tcp dport 80 redirect to :8080 }进阶代理到其他内网机器大部分时候MC服务器不一定是在本机,所以有时候我们需要转发到别的内网机或者外网机先上配置:table ip nat { chain prerouting { type nat hook prerouting priority 0; policy accept; #ip daddr 公网ip tcp dport 80 dnat to 172.32.100.11:25565 iifname "eth0" tcp dport 80 dnat to 172.32.100.11:25565 } chain postrouting { type nat hook postrouting priority srcnat; policy accept; #ip daddr 172.32.100.11 masquerade oifname "test" masquerade } }prerouting部分咱们先看第一部分ip daddr 公网ip tcp dport 80 dnat to 172.32.100.11:25565iifname "eth0" tcp dport 80 dnat to 172.32.100.11:25565为什么我把第一段注释了呢,这段意思是把ip端口为公网:80的流量转发给172xxxx:25565,那么正常应该是没问题,但是咱们一般都是公网云服务器,一般也都是弹性IP,也就是说,如果正常网络下访问公网:80, 服务器的确能收到流量,但是目标ip可能被云服务器厂商转换了,而转换的ip大概率就是本机eth0(本机网卡)的IP如图这个10.0.16.2,当然我没试过,所以咱们直接最暴力的就是本机eth所有的80端口流量都到172.32.100.11:25565就行postrouting部分咱们再看第二部分,首先我们回顾一下场景① 客户端访问公网服务器客户端 → 82.x.x.x:80② PREROUTINGiifname "eth0" tcp dport 80 dnat to 172.32.100.11:25565数据包变为了源 IP: 客户端公网 IP 目标 IP: 172.32.100.11 目标端口: 25565③ 路由判断系统发现:172.32.100.11 在 wg/本机局域网 网段 → 走 test/eth0 网卡④ 到达 POSTROUTING(当前部分)oifname "test" masquerade那这里发生了什么呢?内核准备把包从 test 网卡发出去,于是 nftables 检查这个包是不是要从 test 网卡出去✔ 是 → 命中规则⑤ masquerade 做了什么(核心)原始包(DNAT 后):源 IP: 客户端公网 IP 目标 IP: 172.32.100.11经过 masquerade 后:源 IP: 172.32.100.1 ←(本机 test 网卡 IP) 目标 IP: 172.32.100.11源地址被“伪装”成 WG 网卡自己为什么必须 masquerade?如果不 masquerade(常见错误)MC 服务器收到的是:源 IP: 客户端公网 IP 目标 IP: 172.32.100.11然后 MC 服务器回包时会:目的 IP = 客户端公网 IPBut 这就是问题:MC 服务器根本不知道怎么去公网默认路由可能不在 WG回包直接丢失有 masquerade 的情况MC 服务器看到的是:源 IP: 172.32.100.1(你的公网服务器)回包:172.32.100.11 → 172.32.100.1走 WG 回到公网服务器内核根据 NAT 表反查自动还原成:82.x.x.x → 客户端连接成功
2026年01月06日
2 阅读
0 评论
0 点赞
2025-12-23
Docker迁移目录
停止dockersystemctl stop docker.socket systemctl stop docker systemctl stop containerd迁移数据到新目录mkdir -p /data/docker mkdir -p /data/containerd rsync -aHAX --progress /var/lib/docker/ /data/docker mv /var/lib/docker /var/lib/docker.old //注意 必要可以挂一个软连接 ln -s /data/docker /var/lib/ 正常的话不需要 //迁移containerd到新目录 rsync -aHAX --progress /var/lib/containerd /data/containerd/配置docker新目录sudo nano /etc/docker/daemon.json内容写成:{ "data-root": "/home/docker" }配置containerd新目录//修改containerd配置 nano /etc/containerd/config.toml root = "/var/lib/containerd" 改成 root = "/data/containerd"重启dockersystemctl daemon-reload systemctl start docker // 必要的话下面的也可以执行 一般不需要 systemctl restart containerd查看结果docker info | grep "Docker Root Dir"
2025年12月23日
3 阅读
0 评论
0 点赞
2025-12-23
lsblk/fdisk额外磁盘挂载教程
看物理盘 & 分区lsblk看有没有文件系统lsblk -f //如果你看到: sdb1 ext4 /data → 已可用 如果是空的 → 还没格式化看 UUID(挂载必用)blkid /dev/sdb如果blkid命令没有执行命令安装apt install util-linux注意安装后可能还是不行,大概率在/usr/sbin/blkid并入LVM方法挂载为单独的/data进入分区工具fdisk /dev/sdb在 fdisk 里依次输入(照敲)n # 新建分区 p # 主分区 1 # 分区号 # 回车(默认起始) # 回车(默认结束,用满整盘) w # 写入并退出格式化分区(推荐 ext4)mkfs.ext4 /dev/sdb1看到 done / writing superblocks 即成功。创建挂载目录mkdir -p /data临时挂载(立刻生效)mount /dev/sdb1 /data验证:df -h | grep data 你应该能看到: /dev/sdb1 100G ... /data设置开机自动挂载(很重要)获取 UUID(不用 blkid)lsblk -f 示例输出: sdb1 ext4 3e9c6c0e-xxxx-xxxx-xxxx-xxxxxxxxxxxx编辑 /etc/fstabnano /etc/fstab 在最后一行加: UUID=3e9c6c0e-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 2 (UUID 换成你自己的)验证 fstab 是否正确(不重启)mount -a 没报错 = 100% 正确
2025年12月23日
2 阅读
0 评论
0 点赞
2025-12-08
Debian搭建wireguard组网
前言因为家里宽带没有公网IP也不支持ipv6,一直使用 frps 作为内网穿透的工具。后来发现了 wireguard,于是就将家里的服务器与具有公网IP的云服务器组网,实现内网穿透功能。这里主要介绍 wireguard 的安装以及组网方式,能够满足正常工作、学习所需了。公网服务器首先我们需要一台处于公网的服务器,这里我们使用雨云服务器,服务器配置不需要太高,2H2G即可雨云优惠注册地址 :https://www.rainyun.com/mohuang_雨云优惠码 :mohuang(使用优惠码注册可获得首月5折优惠券,还可在积分商城领取8折新购券,8折券可叠加官方的年付7折优惠,也就是5.6折)注册完账号后进到 雨云控制台,点击云产品→云服务器→立即购买: 这里我们选择湖北的,各位可根据自己的延迟选择,2H2G足够系统我们手动选择debian13然后点击下方的立即购买即可,购买后可在云产品>云服务器> 我的云服务器 中看到点击卡片中的管理可进入服务器详情页面:开始连接服务器下载安装并打开ssh客户端软件,ssh客户端软件推荐mobaxterm或xshell/xftp我这里用mobaxterm,打开软件后点击会话→SSH,在远程主机处输入你的服务器的IP地址,然后点击好的。mobaxterm下载地址 我这个mobaxterm是直接免安装的,解压到文件夹中直接运行MobaXterm_Personal_24.3.exe就可使用然后输入账号并按回车,账号一般默认为root,接着输入密码并按回车确定,输入密码时不会显示出来。温馨提示:在SSH终端中按住鼠标左键选择文字,然后松开鼠标,再在空白处单击一下,这样就把选中的文字复制了;在SSH终端单击右键即为粘贴。开启服务器转发在上一步我们购买了服务器,使用mobaxterm进入服务器之后首先开启IPV4流量转发功能(中转的公网IP服务器必须配置)echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p更新软件包apt update安装Wireguard这里咱们使用Debian系统,Debian支持从它的仓库直接下载安装apt install -y wireguard编写配置文件这里各位可以自行查看官方文档来自定义编写,也可以使用我自己编写的配置文件生成工具。这里使用配置文件生成工具。执行命令下载工具:curl -L https://gitee.com/edrik_1/typecho/raw/master/VpnUtil -o /usr/local/bin/vpnutil && chmod +x /usr/local/bin/vpnutil && mkdir /etc/vpnutil生成服务端配置文件我们已经安装好了wireguard以及配置文件生成工具,现在我们要初始化一下wireguard以及vpnutil的配置文件,执行命令:# 创建并进入一个文件夹用来存放配置 mkdir vpnconf && cd vpnconf # 执行初始化命令 vpnutil gen serve server 111.122.59.214 -a 172.32.100.1/24 -p 51820命令参数解析vpnutil gen serve 是基础命令server是生成配置文件的前缀名字,例如server.conf,server.key,这里最好不要变,就是server即可118.193.35.26 是自己服务器的公网ip-a 172.32.100.1/24 是设置wireguard客户端的虚拟ip范围-p 51820 是设置wireguard服务端的监听端口执行完毕后,当前文件夹会出现三个文件前缀名字.conf wireguard服务端的配置文件前缀名字_private.key wireguard服务端的私钥前缀名字_public.key wireguard服务端的公钥根据咱们当前执行的命令会出现,server.conf、server_private.key、server_public.key应用配置文件接下来咱们移动"前缀名字.conf"文件到wireguard的配置文件目录使其生效cp server.conf /etc/wireguard/ && wg-quick up server查看wireguard状态# 查看wg的状态 wg show这代表已经正常运行生成客户端配置接下来使用自动工具生成客户端配置.执行命令:vpnutil gen client client01命令参数解析vpnutil gen client 是基础命令client01 是要生成客户端配置文件的前缀,可以自定义起名字,但最好不要包含特殊字符执行完毕后,当前文件夹会出现三个文件前缀名字.conf wireguard客户端的配置文件前缀名字_private.key wireguard客户端的私钥前缀名字_public.key wireguard客户端的公钥这里要注意,服务端的配置文件名字一定要是server.conf,正常按照教程走的话是不会有问题的,如果想使用自动工具生成客户端配置,但服务端配置是自己手写的小伙伴,那就把配置文件改下名字,客户端配置文件名字随意命名即可防火墙放行我们已经运行了服务端,并设置了监听端口51820,我们开始继续部署客户端组网之前,需要在雨云后台开启服务器的防火墙放强行51820端口进入服务器防火墙新建防火墙规则点击新建防火墙规则,输入端口,协议是UDP, 点击确定新增成功新增成功,我们可以开始进行下一步了。客户端组网这里咱们演示Debian和Window下如何组网Debian组网新开一个虚拟机或者测试服务器按照上面的教程先安装一遍wireguard。然后我们在wireguard的服务端服务器上使用自动配置工具生成一个配置文件。例如:vpnutil gen client debian此时当前文件夹下会生成debian.conf,debian_private.key,debian_public.key。然后我们将debian.conf复制到虚拟机或测试服务器的/etc/wireguard目录下。执行命令:# wg启动命令,其中debian就是配置文件名字,配置文件叫什么名字,这里就填什么名字,注意不能填后缀.conf wg-quick up debian # wg关闭命令 wg-quick down debian然后我们客户端执行命令查看状态:wg show已经成功。我们回服务端同样执行wg show查看可以看到客户端连进来了Window组网同样我们去wireguard服务端执行命令生成配置文件vpnutil gen client windowwindow上安装wireguard的window版本,下载地址 安装后打开如下:我们将服务端生成的配置文件下载下来,然后点击客户端的新建隧道或从文件导入,选择window.conf。然后点击确定,如下:我们点击连接。如图连接成功。我们回到服务端,执行wg show,如图,window也已经加入到组网了完结至此,wireguard组网教程结束坑点如果window无法连接到,可以尝试关闭Window防火墙linux等系统无法连接的话,也检查一下Linux防火墙
2025年12月08日
12 阅读
0 评论
0 点赞
1
2
Warning
: file_put_contents(/var/www/html/rss.xml): failed to open stream: Permission denied in
/var/www/html/usr/plugins/CustomRSS/Plugin.php
on line
149