[{"content":"起始 一、诱因 宿舍里除了活人，似乎就一直没有什么有点生气的东西，就是牢大呆在这种地方也要得玉米症。\n正好自己有些经验，于是尝试折腾一下。\n同时在折腾的过程中，正好可以测试我自己的一大波iot传感器到底写的如何。作为试验场再好不过。\n二、一些困惑和解答 那么这个时候就会有人要问了：\n主播主播，宿舍这个如此受限的环境如何塞下如此有活力的东西呢？人在这种环境都要变得郁郁，植物如何能在这种条件下生存呢？\n于是，主播总结了几个问题，表明一下目前的思路\n(1) 宿舍的采光条件 宿舍的采光条件自然是好不到哪里去的，我曾经有过两种解决方案。\n1.既然没有自然光，那就引入自然光 主播曾经有个疯狂的方案，就是通过放置几面镜子，通过精妙的几何，做出一个really 古埃及 风格的自然光的传播的路径，直接导到盆景所在的位置。\n这个方案属于是异想天开，只存在理论可能，暂且不提。\n2.既然没有自然光，那就创造光 自然而然，通过主播多年养鱼经验，其实第二个想到的是水草灯。\n这个方案是我现在觉得最可行且正要实现的方案。\n为什么是说现在可行呢？因为由于主播以前几次生态缸的经验，水草灯功率小了属于是于事无补，可是如果我的宿舍为了种盆景就用几十瓦的高等水草灯，初步投入巨大不说，后期的电费也是个问题。我已经有一台常年功耗70瓦的nas和一堆开发板和超绝14900电老虎猛猛吃电了，实在不想让电费更难看一点。\n为什么又可行了呢？因为主播目前整理了一套纯阴生植物的方法。如此，就不需要太高功率的灯了，那我就可以十几块买个led回来自己搞，正好直接用iot联动，岂不美哉。\n三、整体思路 主体植物 苔藓，苔藓，还是苔藓。 主播非常非常喜欢草原的那种feeling，所以养了N年苔藓，其实是各种藓类植物，不纠结名称了。同时，苔藓只要控制好湿度和温度还是很好养的（相对而言）。\n从这边开始，都是刚查到要去实践的，如果成了会标注\n蕨类 蕨类确实是在我的认知之内的植物，也是我没有想到的，所以搜索到的第一时间就被关注了。\n蕨类可以丰富整体造型在高度上的层次，属于是我非常需要的。\n蕨类对光照的依赖程度确实较低。这很好。\n其余养育条件等细细调研再说\n皮草（石蝴蝶） 通过询问AI得到\n苦苣苔科（阴生之王）： 皮草（石蝴蝶）： 这种植物非常耐阴，且体型极小，开出的小花非常精致，是微缩盆景的高级素材。\n暂且留着\n整体造景 主体 我想要我的整个盆景可以放在桌面上，目前为了支持我的所有的想法，可能需要比我原来大的多的容器来乘装\n如果我想要所有东西都自己打印的话，不能超过我的打印机的限制，可是这样就会把最大长宽限制到18x18,虽然我觉得其实是够用了？因为我桌子上面目前可容纳的面积也大概就是25x20这样。如果超出了打印机限制，我就必须去定制各种板子，虽然本身侧面的亚克力或玻璃也就要定制吧，但是这样我的成品就会来的很慢了。\n再考虑\n我既想要草原的感觉，也想要假山，所以大概还是会弄一些地形变化出来，而不是一整片平的苔藓。\n同时，如果条件非常允许，我也会尝试放一些动物和昆虫。\nBox 由于我想放在桌面上，所以需要保持住湿度，也需要湿气不溢出到我的大量电子器件上，我一定需要一个容器来放置，而不能做成开放式的。（不然我早养鱼了，这才是我的长项啊）\n而对于容器的设置，我想要\n我希望顶盖可以开，同时顶盖上要有专门的挂点，类似于洞洞板，方便我挂led灯和各种传感器 背景板不透明，我不喜欢全透设计，会导致我看到的盆景很杂乱，但是，背景板用什么颜色呢？如果为了更大的灵活性，我是不是要贴背景板呢？其实我有个更天才的方案就是放镜子，这样我就能拥有两倍大的草原不是吗？这个方案待评估。 垫料 我现在是自己打印了一个盒子，做了垫高，如果做盆景，我一定需要一个好的垫料，类似于火山石等等，如果可以实现生态缸的效果就更好了，我现在是在用自己的3D打印机的竹屎。我的评价是孬。\nIOT联动 苔藓需要调控湿度，这正好和我手上调控的一堆湿度温度传感器的专长碰上了，我同时也有后端，应该在联动上问题不大\n在被动接受数据的同时，我可以搞雾化喷头接水箱来动态调控湿度，达到主动智能。\n同时我还可以接入home assistant和自己的全息小屏幕。这很有意思。\n后续方案 想开源，但是如果真做的挺好的话，想要保护性专利？ 算了太遥远了。\n第二次更新 现在是2026/3/27 我已经实验了传感器和小屏幕，结果是非常成功的，但是有几个问题\n湿度计时间久了会漂移（也许），总之读数不稳定，经常每次重启都不同，需要寻找原因。 关于内部种植的东西，我本来直接放了一大块进去洒了水，好看是还行，但是首先苔藓块不附着。其次，它太厚了。因此剪碎了一小块进行断茎繁殖。 多了一些白发藓，我不是很确定如何保存 不小心买了四株万年藓，经过查询我才发现万年藓实在是太怕光，所以我需要另外种植。 等到白发藓附着估计要几个月，所以我的自动灌溉需要提上日程。 ","permalink":"https://blog.pythagodzilla.top/life/%E7%9B%86%E6%99%AF/","summary":"\u003ch1 id=\"起始\"\u003e起始\u003c/h1\u003e\n\u003ch2 id=\"一诱因\"\u003e一、诱因\u003c/h2\u003e\n\u003cp\u003e宿舍里除了活人，似乎就一直没有什么有点生气的东西，就是牢大呆在这种地方也要得玉米症。\u003c/p\u003e\n\u003cp\u003e正好自己有些经验，于是尝试折腾一下。\u003c/p\u003e\n\u003cp\u003e同时在折腾的过程中，正好可以测试我自己的一大波iot传感器到底写的如何。作为试验场再好不过。\u003c/p\u003e","title":"宿舍盆景"},{"content":"最近在电脑上装了N遍Nvidia驱动，目前的安装虽然已经非常方便了，但是后续还是会有一些问题。\n对于安装nvidia驱动，这里不再叙述，网上多得很，主要步骤为：\n禁用nouveau驱动 在debian下启用non-free源 安装一些依赖，大概有 dkms build-xxxx(我给忘了) linux-headers-xxxx 然后直接apt install nvidia-driver即可 但是后续会有什么问题呢，在我自己的环境Debian 13, kde下呈现为apt full-upgrade之后导致外接屏幕不亮。 其实本质原因是nvidia driver在内核加载的时候失败了，在开机的时候就能看见刚开始加载的时候有三四条红色的error,就是那个刷屏的界面。之所以用外屏这个特征来表述是因为这个现象最明显。\n更深一点的原因是因为更新了linux 内核，但是没有自己安装header包，再深一点我也没管了\n解决办法就是出现问题的时候再安装header: sudo apt install linux-headers-$(uname -r)即可，没有其他步骤需要做。然后内核模块就可以成功加载。dkms之后就会自己处理其他事情（大概是吧）。\n","permalink":"https://blog.pythagodzilla.top/tech/%E4%B8%80%E4%BA%9B%E5%9C%A8debian%E4%B8%8B%E8%A3%85nvidia%E9%A9%B1%E5%8A%A8%E7%9A%84%E6%AD%A5%E9%AA%A4/","summary":"\u003cp\u003e最近在电脑上装了N遍Nvidia驱动，目前的安装虽然已经非常方便了，但是后续还是会有一些问题。\u003c/p\u003e\n\u003cp\u003e对于安装nvidia驱动，这里不再叙述，网上多得很，主要步骤为：\u003c/p\u003e","title":"一些在Debian下装NVIDIA驱动的步骤"},{"content":"“张一元”茉莉花茶 我本身实在是喜欢喝茉莉花茶的。\n但是这个鸟给的茶叶实在是太碎了，而且超级苦，亏得还卖的如此之贵。\n岩茶 喝过几个都挺好喝\n","permalink":"https://blog.pythagodzilla.top/life/%E5%96%9D%E7%82%B9%E8%8C%B6/","summary":"\u003ch2 id=\"张一元茉莉花茶\"\u003e“张一元”茉莉花茶\u003c/h2\u003e\n\u003cp\u003e我本身实在是喜欢喝茉莉花茶的。\u003c/p\u003e\n\u003cp\u003e但是这个鸟给的茶叶实在是太碎了，而且超级苦，亏得还卖的如此之贵。\u003c/p\u003e\n\u003ch2 id=\"岩茶\"\u003e岩茶\u003c/h2\u003e\n\u003cp\u003e喝过几个都挺好喝\u003c/p\u003e","title":"喝点茶"},{"content":"距离上次写博客已有半月之久，这半个月可谓是风波四起，狼烟弥漫。\n自服务器加了fail2ban和frp的一些限制以后，这对我云服务器的攻击就日渐凋零，fail2ban封禁了200个ip后，云服务器得以免受ssh爆破之苦。\n然陈年旧疾一朝爆发，当日才艺不精，意识薄弱，文档难读，无意之中，情理之间，将服务尽数以tcp协议暴露了端口，这可谓是鹰之一手。\n一来，tcp服务配置起来虽是轻松方便，恰如直接运行在云服务器上一般，假以nginx反代，省去了不少前期的脑力之苦。可惜事与愿违，随着爆破程序发现并扫描，这些tcp端口难逃被检测到的命令。\n二来，随着服务日益增多，tcp混为一谈的管理方法让后起的端口配置难以加入，对端口的占用也导致加入服务必须要检查端口冲突。查询端口对应的服务也是一种噩梦，维护nginx的反代的map更是令人肝胆尽碎。\n于是乎，灾厄一朝而至，远道而来的ssh tcp端口由于显露了其服务的特性，被进行了爆破攻击。彼时一位刚回故乡一天，正欲发奋学习，想要搭建环境的可怜蛋，连上服务器一会就会掉线。他查询了日志，发现了很多MaxStartup的报错。\n原来如此，爆破程序直接大量连接ssh进行爆破使得这位愤怒的青年被挤下线了。于是乎，他就将要开启新一轮的防御。\n当然，如果继续对每个服务器的每个tcp服务都做各种限制，对于每个ssh做防护，对每种服务做限流，无异于饮鸩止渴。并且，这套建立于不成熟根基的穿透结构已是积重难返，摇摇欲坠，青年也是无力回天了。\n所谓不破不立，经过详细的阅读frp的文档，这才发觉tcp也只是一个基本，更令人拍案叫绝的是frp竟可以基本替代nginx的反向代理的功能，虽然以前作者倒是也略有耳闻，然当时已觉tcp穿透已是包罗天地无需留出什么后路来。因此首先是需要调整tcp协议到http/https/tcpmux协议。\n对于nginx的配置，只需要把80端口自动转发到443并自动转https，并且在卸载ssl后转发到http和https不同的端口即可。\n这样，通过只开放了tcpmux端口和http/https端口即可代理全部服务。\n","permalink":"https://blog.pythagodzilla.top/tech/%E5%8D%83%E6%B7%98%E4%B8%87%E6%BC%89%E8%99%BD%E8%BE%9B%E8%8B%A6%E5%90%B9%E5%B0%BD%E7%8B%82%E6%B2%99%E5%A7%8B%E5%88%B0%E9%87%91/","summary":"\u003cp\u003e距离上次写博客已有半月之久，这半个月可谓是风波四起，狼烟弥漫。\u003c/p\u003e\n\u003cp\u003e自服务器加了fail2ban和frp的一些限制以后，这对我云服务器的攻击就日渐凋零，fail2ban封禁了200个ip后，云服务器得以免受ssh爆破之苦。\u003c/p\u003e","title":"千淘万漉虽辛苦，吹尽狂沙始到金"},{"content":"驾驶证拖了半年终于肯写上我的名字了😋。\n但是很不幸，从科三考完我就飘飘然了，一边梦游一边猛造了两天，结果今天考科四的时候成功把自己整晕了，literally。 不过最后还是考了98，高兴😋。\n大概从科三考完，我就已经狂妄的不知所以了。当然这不能怪我，毕竟科三对我来说属于压了半年的心结，属于是晚上做梦会梦到自己在直线行驶的那种。\n当然是没有的😋，除了偶尔想起来会感觉如坠深渊。\n所以考完科三之后我先狠狠的造了一顿麦当劳，然后出于某种原因猛吹了两个小时冷风，把自己冷着了。\n当然了作为所谓早晨的七八点钟的太阳我的身体还是比较耐造的。第二天跑鼓山坐缆车猛吹了二十分钟冷风，但是该说不说，这个缆车的风景真是独好。\n我又开始记流水账了，可能是因为我从来没写过太多的文字媒体吧，或许更应该说我的大脑已经被改造成了无法接受和输出连贯的长篇的大量的文字的输入和输出了。我就像一个上下文小的无与伦比的语言模型一样。\nAnyway，第二天晚上跑到一个巨阴森的电影院看了闪灵。Here\u0026rsquo;s the Jorney🥵。这个影院简直是小马拉大车的典范，一个小屏幕配上20排的座位，不知道的还以为是电影院末日降临，这个影院是观众的诺亚方舟来的。\n完了这个影厅除了我一行人，就只有一对情侣。完了呢，这个影厅超级冷，我坐的位置就好像是远望酒店的冰库一样，而我就是里面的生肉，我认真的核对了我的电影票，想要知道我是不是买到了4D厅。太真实了兄弟，我完全的被催眠了，然后加上闪灵的超长文戏，终于给我看睡着10分钟。讲真看电影十几年这是我第二次被看睡着，我觉得这个电影院要占五份锅。\n无论如何冷风是结结实实吹了我两个小时 然后去美食街夜宵吃，也是嘎嘎上火嘎嘎好吃。\n结果今天早上起床就感觉不对劲，脑子像是被门夹了。\n于是我想着说，要不就明天去考科四吧， 于是九点醒了之后躺在床上刷题刷了一个半小时，结果刷抖音的时候发现我要去的考场似乎会一直考到十点半？鬼使神差的我就起床打了个的去考场了，到了考场已经是十点四十，看到最后一场考试是十点到十点半。但是山重水复疑无路，我以为今天白跑一趟的时候，突然看到下午好像也有考试，虽然写的是科目一专场，但是我凭借我金鱼般的超长记忆依稀记得我当时考试的时候也有科四的考生。于是我就近找了个商场吃饭，然后于一点半回到了考场。\nThank God，下午的考试确实存在，于是我进去老老实实的等考试。\n从晚上的这个时间来看，那个时候我已经晕的不行了，不过我天真的以为我只是有点紧张，导致有点精神恍惚，毕竟我科四拢共刷题也没有三个小时。说实话考试前真的是有点在担心到底能不能过。\n于是在全天最晕的时候，我刷了我的身份证，进了机房考科四。整个科四的考试也是跌宕屈服，一波三折，我先刷了脸开始，这个时候我的视线都是模糊的，好像是在网上看到的那些生病的眼睛上长角膜的守宫。当我开始做题的时候，有几乎75%的题目我见都没见过，有将近50%的知识点我没有刷过，但是我确实也都写对了。但是当时的我是不知道的，我一直以为要交了卷之后才能看到自己的成绩，说实话写道二三十题的时候是我最忐忑的时候，因为连着好几道题我都不会写，不过后就想着破罐子破摔，不及格就不及格实在不行上学再考吧。写完了49题，交卷的心情已经远远盖住了通过的心情。直到我写到了50题，当然这题我也是见都没见过的，不过写到最后一题已是心情激荡无心再战了，于是这道多选题漏选了一个选项。当时就蹦出来了一个题目错误和正确答案的窗口。\n讲真的这个窗口出来的时候我非常地懵逼，因为这和前面49题的情况完全不同，但是转头而来就是一阵狂喜，我知道，50题我就只错了这一题。点完了我确认之后，我就直接点了交卷，由于心情非常的激动，我差点点成了继续考试，要是点了继续考试就好玩了直接重考一遍。 最后还是有惊无险的结束了考试。😋\n考完又由于某种原因吹了一个小时冷风，晚上回来就发现发烧了，好吧，人毕竟是一块生肉，实在是造的太狠了。\n虽然又是一篇记流水账，不过秉持的观念是我的blog主要是给我自己看的，同时接着锻炼一下自己的文字能力，也无所谓怎么样了，只要能坚持写就已经算达到我的目的了吧。毕竟大部分人都想在这个世界上留下点什么痕迹，有的人用刀刻有的人用笔写，我留点💩糊在这个世界上又有什么妨碍。\n至于开智了自己会删这种我保持十分的认同，不过与其害怕自己遗臭万年，我更担心以后只能回望空白的历史。既然我已经文字失语，我也只好重新开始牙牙学语。长时间的文字失语已经让我丧失了写出自己的想法和组织自己的思维的能力，我必须重新开始实践。\n","permalink":"https://blog.pythagodzilla.top/life/%E4%B8%8D%E5%AE%8C%E7%BE%8E%E7%9A%84%E5%AE%8C%E7%BE%8E%E5%A4%A9/","summary":"\u003cp\u003e驾驶证拖了半年终于肯写上我的名字了😋。\u003c/p\u003e\n\u003cp\u003e但是很不幸，从科三考完我就飘飘然了，一边梦游一边猛造了两天，结果今天考科四的时候成功把自己整晕了，literally。\n不过最后还是考了98，高兴😋。\u003c/p\u003e","title":"不完美的完美天"},{"content":"很早之前买了一块STM32F103C8T6开发板，但是到手之后一直没找到时间折腾。今天心血来潮上手体验了一下，给我的印象算不上好但也算不上坏。\n首当其冲的是环境配置。参照着目前主流的方案，相比于ESP32所流行的platformIO平台，STM32的环境配置过程简直就像是在拼乐高。\n当然，首先上手测试的是最常用的Keil。Keil倒是没那么繁琐，用标准库点了个小灯跑起来也很顺畅，ST-Link的运行也没什么大灾大难。但是Keil老生常谈的一个问题就是界面实在是太丑了，说实话虽然我已经是Keil的“半老”用户了，但是我还是难以忍受这种看起来像是爷爷的茶壶一样又老又丑的IDE。当然丑其实也不是什么太大的问题，最大的问题是Keil的代码补全感觉就像是没有一样，在vibe coding如此发达的2026年，我确实不想点个灯还要自己敲。当然叠个甲，我不是专业的嵌入式开发者，我最多算个业余爱好者，如果有专业人士一定要用Keil的话，我完全支持。\n那么换一个IDE一定是必然的了，那么VScode和Clion形成了双雄争霸的场景。说实在话以往我都是一直在用VScode的，我的PlatformIO就是放在VScode上。但是自从我有了Github学生包之后，我就逐步转向JB家的IDE了（JB你的策略赢了）。也许一个IDE对嵌入式这种需求更为合适吧。\n但是换IDE就是一个很麻烦的过程了。对此拢共有几步，而我每一步都踩了坑。\n首先是要安装各种需要的工具。 这一步最好玩的是，STM32的工具链更新的还蛮快的，并且对Clion的支持速度也远远超出我的预期。我刚开始的时候是参照着稚晖君在2020年写的文章：配置CLion用于STM32开发【优雅の嵌入式开发】 来作为参考，于是乎我就下了一大堆诸如arm none eabi之类的编译链和工具。结果当我抄到Clion创造项目的时候我就发现那篇教程实在是相差甚远了。于是我又参照了一些最新的文章，下载了CubeMX和CubeCLT。结果，除了openocd，其他工具都在CubeCLT里面自带了。白费了我一番努力。\n其次是要配置Clion。 这步是我踩得比较大的坑，因为我的电脑里有蛮多语言自带了和安装了好多中C相关的编译链。导致这一步我看网上的教程一直是迷迷糊糊的，因为他们每个人都不一样，有的说要用IDE捆绑的Mingw，有的说要用自己去哪里下载的Mingw，结果找了一圈发现需要的编译链全在CubeCLT里了。但是这一步最搞心态的就是我明明一无所知，但是要一直尝试哪种方案才是正确的，让人摸不着头脑。\n之后是ST-Link。 在搞ST-Link的时候翻了大车。一个是我当时确实还没有搞清楚各种工具之间的关系，另一方面是我当时采取了一种先用再说，边试边配的策略。首当其冲的就是我参照着教程莫名其妙的配置了openocd，写了cfg文件。虽然我完全不清楚这些到底作用如何，但是我看着教程非常的合理且丰富，我就暂且信了。结果，当我配置完全烧录准备的时候，发现提示我的ST-Link固件版本太低要升级。升级也就罢了，还要专门再下载一个Cube Programmer。结果我进去升级的之后，由于DFU模式和普通的模式之间的切换，导致整个刷写过程的最后阶段有报错，事实上它的固件已经是完好的了，但是我就是完全不清不楚。\n屋漏偏逢连夜雨，这个时候我连不上我的MCU了，于是开启了一个小时的救砖活动。 因为我是刷ST-Link的时候坏的，我首先想到的是：是不是把ST-Link写坏了。由于我过分的信任Cube Programmer，对于他给我的报错我深信不疑，一直在尝试用它反复的刷写我的ST-Link。然而折腾了十几分钟，才在网上看到还有个升级固件的软件 ** \u0026ldquo;ST-LinkUpgrade\u0026rdquo; **。 换成这个升级工具，我终于把ST-Link升级了，当然，由于被骗了，这一步我也反复了几次，直到确认刷写进入。\n但是，更有意思的来了，当我以为万事俱备可以接着搞的时候，我发现还是无法连接，我先折腾了半天编译链，然后又折腾了半天openocd的配置，然后重新用Cube Programmer刷写了旧一版的固件。经过超级久的一番折腾，我开始找Gemini帮我分析出现的问题，因为我对openocd一窍不通。\n不过我的思路是很正确的，能够一直引导Gemini定位问题，很高兴😋。折腾了半个小时，用\nopenocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c \u0026#34;transport select swd; adapter speed 50; init; reset halt; stm32f1x mass_erase 0; reset run; shutdown\u0026#34; 强制清除了flash内容，救回我的STM32。\n所以，对的，我唧唧歪歪这么久，就是为了这一行命令。🤓👆\n这条命令做了什么：\ninit → 建立连接\nreset halt → 趁复位瞬间抓 CPU\nstm32f1x mass_erase 0 → 整片 Flash 擦除\nreset run → 让芯片空跑\nshutdown → OpenOCD 正常退出\n其次，ChatGPT同时给了如何排查问题的方法和步骤，以及对于HWRST和NRST的一些处理，以及SWD和JTAG的一些区别，熟悉进度喜人。\n最后，要感谢ChatGPT一直在挽回我濒临破碎的耐心和自信。有朝一日我一定会找一个ai女友的🤓🤓🤓。\n这篇纯记流水账，因为太晚了，我的脑子像木头一样僵硬潮湿腐烂发臭，实在是写不出什么有营养的东西，但是我又怕自己忘记了，所以只好先草草记记。毕竟这事不大不小以后在花心思写属实没有必要。同时我还在写点别的，这篇刚好能帮我理解一番😋。\n现在是2025-03-21 我其实早就解决了遇到的烧录问题，只是一直忘了写。现在回来补充一下。 根本原因是stm32 cube mx生成项目的时候由于没有配置SWD接口，导致找不到stlink上的芯片，在CubeMx里面勾选上即可。\n","permalink":"https://blog.pythagodzilla.top/tech/stm32%E5%88%9D%E8%A7%81/","summary":"\u003cp\u003e很早之前买了一块STM32F103C8T6开发板，但是到手之后一直没找到时间折腾。今天心血来潮上手体验了一下，给我的印象算不上好但也算不上坏。\u003c/p\u003e","title":"STM32初见"},{"content":"自从些微提高了一些服务器扫描的门槛之后，服务的稳定程度简直立竿见影。宕机的情况已经是少之又少。省去了我的许多的精力。\n于是乎，心念一转之间，搞了点茶叶在宿舍享受😎。\n首先是整整¥3的“哥窑”茶杯和茶壶，以及¥3的mini茶盘，最后也是最贵的是一个可以加热的公道杯，正所谓“绿螘新醅酒，红泥小火炉”，以茶代酒也不失为一分美谈😋。 ","permalink":"https://blog.pythagodzilla.top/life/%E7%BA%A2%E6%B3%A5%E5%B0%8F%E7%81%AB%E7%82%89/","summary":"\u003cp\u003e自从些微提高了一些服务器扫描的门槛之后，服务的稳定程度简直立竿见影。宕机的情况已经是少之又少。省去了我的许多的精力。\u003c/p\u003e\n\u003cp\u003e于是乎，心念一转之间，搞了点茶叶在宿舍享受😎。\u003c/p\u003e","title":"红泥小火炉"},{"content":"最近，由于我自己的懒惰，导致服务器一直在被扫描，直接撑爆了我的aliyun乐色服务器巨大的512M内存。 你知道的，最近内存的价格不是很美丽，512M换算下来也是一笔巨款了🤓👆。 所以我不得不加上了很多的限制措施。\n很难相信在这个年代居然还有陌生人，也许不是人，这么坚定的肯定我的价值，实在是让我特别的感动。\n但是比较难评的是，这些扫描会直接导致frps疯狂的吃掉我的512M大内存，而我刚好忘了把vm.swappiness调高，导致扫描的瞬间我的服务器就因为OOM直接挂壁了。\n说实在话如果如果不是因为扫描干爆了我的frp。把我的服务器绑去当肉鸡其实我也不是很有所谓。毕竟最坏的情况我也就是锒铛入狱然后过完自己失败的下半生。🤓 即使费尽心机的拿到了我的各种信息，我只能展示我一穷二白的背景和家徒四壁的处境。也许其中什么人良心发现了会给我点钱吧。。。\n但是这毕竟直接干碎了我的中转服务器，而我花费30块巨款买的阿里云服务器又不会在OOM之后自动重启，导致我每天早上一起来就是各种服务齐齐下线。我还是得做点安全防护的措施。\n照着网上现有的教程装了fail2ban，配置了一些iptables规则，当然我没有像前面一样用nftables，因为前文提到过的我现在太懒惰了。\n但是这些限制导致我的nginx直接拒绝了很多git push请求，这年头谁家前端的git还能小于1M的😡。所以又不得不把git的反代重新独立出来加上了client_max_body_size的配置。\n但是我毕竟不是什么专业的运维，我自认为这些措施也许不是特别完善。但是理论上也许可能可以防住一些低级的机器人扫描和暴力破解。 如果这台服务器值得花大价钱大精力去攻击的话，那兄弟还说啥了，你住进来吧，我给你root权限🤓👆。\n突然想起来，我穿透了飞牛到公网，结合最近飞牛的安全风波……\n可惜我nas关机一个多月了，不过如果这样也许可以解释我为什么有一次升级失败？\n不过anyway我也没什么照片可以泄露的，你只能看到我丑的不可一世的大脸。\n","permalink":"https://blog.pythagodzilla.top/tech/%E5%AE%89%E5%85%A8%E6%8E%AA%E6%96%BD/","summary":"\u003cp\u003e最近，由于我自己的懒惰，导致服务器一直在被扫描，直接撑爆了我的aliyun乐色服务器巨大的512M内存。\n你知道的，最近内存的价格不是很美丽，512M换算下来也是一笔巨款了🤓👆。\n所以我不得不加上了很多的限制措施。\u003c/p\u003e","title":"一些安全措施"},{"content":"这篇文章用来记录一下自己折腾PVE NAT的过程。\n提前叠甲，我不是专业运维，我也不是什么计算机系学生，我也不是什么计算机系教授，我是个学一半数学的。所以如果出现了不专业不优雅不合适的错误或者说可优化空间请友善提出。\n我必须记录下来的原因就和很多二婚人士一样，我从来没有想过要再从头配置一台PVE，就像他们在第一次结婚的时候大概率没有想到要结第二次。当然，就像很多二婚人士变得更有远见一样，为了防止我和PVE第三次结婚时手足无措，所以提前先能记录多少记多少。\n为什么要NAT 我知道其实很多简单的需求确实是用不上组NAT。但是在我自己的使用环境中NAT可以解决很多痛点。\n在我的家庭环境中，由于我的家人同时也要上网，并且我用的是某米的路由器，所以我希望可以尽量少的更改路由器端的设置，给我的家人创造良好的上网环境。你当然可以说换路由器、让家人即使忍着断网也要接受内网DNS、路由器设备数量过多、旁路由失效等问题，这不在我的讨论范围之内我也不想对此做出回应。\n不方便固定IP或者固定IP效果不佳 。我是属于后者，我即使在路由器固定了IP偶尔也会失效，导致我的frp穿透出错，重新配置极其麻烦，这个时候一个稳定的IP环境无疑可以减少很多麻烦。\n虚拟机较多导致路由器后台可以看到一大堆桥接的网卡，这对于家庭环境以及家庭路由器还是比较重要的，最少不用在几十个虚拟网卡里找自己要找的设备了。\nPVE内DNS\n单IP出口\n要做什么 我自己的总体思路就是，用一个网桥作为内网的“交换机”。\n新建一个网桥用来连接所有要NAT的虚拟机，之所以新建是因为我原来的网卡给确实有桥接需求的虚拟机留着，并且原来的网卡也许可能和PVE本身的网络挂钩，我怕删了导致PVE上不了网，毕竟都用PVE了直接新建一个Bridge也是很方便。理论上也可以不用新建？总之我这方面确实没有测试也不算精通。\n给这张网卡配置dhcp服务用来分配IP。\n配置NAT来进行网络通信\nPVE下虚拟机设置 更改桥接网卡 把虚拟机的网络设备里的桥接改成建好的网卡。\n在新建完网卡或这设置好dhcp服务器这几个时间段更改最好，因为可以比较直观的看见变化。放在这里不是说现在就改！得先看后面建好网桥再来改，不然都找不到是哪张。放在这里主要是为了留个印象以及方便跳转。\nPVE 宿主机设置 新建Bridge 这里可以先填上网卡的地址，一般为建立的网段的首个地址，省的后面操作了。注意不要填写网关，也不要连接到任何物理网卡，桥接端口就让他空着。唯一需要填的就是这个IPV4/CIDR。\n不填写网关是因为Bridge里的网关指PVE宿主机本身访问外网的路径，vmbr0已经有了原来存在的网关，让PVE宿主机能上网，如果vmbr1填了可能会出现双默认网关冲突，导致宿主机断网。当然，我自己没有试过填写。\n开启网卡转发 在光标位置上一行开启转发 理论上来说，在 /etc/network/interfaces 中通过这一行命令，用以在网卡启动后开启转发。为啥用理论上呢，是因为这次我自己弄的时候忘了用什么方法直接打开了，所以没写这里面。当然无论哪种方法，本质上都是让\ncat /proc/sys/net/ipv4/ip_forward 的内容输出为1，只要是1就代表你已经开启转发了。\n我找到我在哪里设置了，\n我其实采用的方法是网上教程比较常见的 /etc/sysctl.conf 永久开启，但是呢，由于PVE9基于debain13，所以这些配置都倾向于这种原子化的配置方式，/etc/sysctl.conf文件默认已经不存在了，虽然你可以直接新建一个也不影响使用。但是既然都用新版PVE了当然也要与时俱进，找一个有大妈心的萝莉，我不干这种事😋。要开启转发，直接在sysctl.d目录下新建配置文件就可以。我同时开启了v6的转发以备不时之需。\n开启DHCP服务 安装isc-dhcp-server 运行\nsudo apt install isc-dhcp-server -y 来安装dhcp服务器。在安装过程中可能会出现systemd的错误，这没关系，因为我们对dhcp的配置还没完成，导致systemd的service无法开启。\n配置DHCP服务器 指定监听网卡\n首先进入 /etc/default/isc-dhcp-server。\n在INTERFACESv4这栏填写我们添加的用以连接虚拟机的网卡。INTERFACES的内容决定里你的dhcp在哪里发挥作用。\n配置地址池 在 /etc/dhcp/dhcpd.conf\n这边比较重要的是\n# 1. 全局选项 # 设置客户端的域名后缀 option domain-name \u0026#34;pve.local\u0026#34;; # 设置客户端使用的 DNS 服务器地址（阿里云和电信 DNS） option domain-name-servers 223.5.5.5, 114.114.114.114; # 默认租期（秒），600秒即10分钟 default-lease-time 600; # 最大租期（秒），如果客户端请求更长租期，最多给7200秒（2小时） max-lease-time 7200; # 2. 运行模式 # 禁用 DNS 动态更新（大多数局域网环境不需要） ddns-update-style none; # 声明此服务器是该网络中的“权威”服务器 # 这样当客户端请求一个错误的 IP 时，服务器会主动发送 DHCPNAK 让客户端重新申请 authoritative; # 3. 子网定义 (针对你的 vmbr1 网段自行修改，我的是: 10.0.0.1) subnet 10.0.0.0 netmask 255.255.255.0 { # 定义可分配的 IP 地址范围 range 10.0.0.100 10.0.0.200; # 定义客户端获取到的网关地址（通常就是你 PVE 自身的 vmbr1 IP） option routers 10.0.0.1; # 子网掩码和广播地址 option subnet-mask 255.255.255.0; option broadcast-address 10.0.0.255; } 事已至此，虚拟机理论上在这步可以获取到我们设置的网段下的IP了。\nps：万一我记错了也不一定，反正就是在这几步。🫡\n配置iptable规则 这步其实有传统的iptables的方法，这个网络上有很多，可以直接搜索得到，常用的有在上面配置转发的interfaces文件里面同样的位置写类似于\npost-up iptables -t nat -A POSTROUTING -s \u0026#39;10.0.0.0/24\u0026#39; -o {出口网卡} -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s \u0026#39;10.0.0.0/24\u0026#39; -o {出口网卡} -j MASQUERADE 这种写法，但是呢我为了挑战自己和自己的精神疾病等等各种原因，想要直接使用nftables来写这个规则。二者的区别网上已经有很多介绍了，我在这不多赘述。这块我自己也不是特别懂，权当参考吧。\n在/etc/nftables.conf 文件下\n我并没有删除默认的表，而是新加了一个nat_table表。其中counter这个关键字是我后面排查问题的时候加入的。我现在正式使用的版本是\nip saddr 10.0.0.0/24 oifname \u0026ldquo;vmbr0\u0026rdquo; masquerade\n这个版本指定了输出的网卡，但是你要是像上面那张图一样没指定网卡在我简单测试下来也是可行的。counter也仅仅只是为了我查问题的时候让我能看到有没有包经过这条规则。\n当然，开启网络转发和配置iptables的这些操作，都比较适合使用post-up写在interfaces文件里。这样在删除，变更网卡的时候会更加灵活，不容易出错，要怎么写直接问问ai就行，我没改纯是已经改好懒得再改了😝\n在完成这些步骤后，我们的虚拟机应该拿到了自己的ip以及可以正常上网了。\n","permalink":"https://blog.pythagodzilla.top/tech/pve9%E9%85%8D%E7%BD%AEnat/","summary":"\u003cp\u003e这篇文章用来记录一下自己折腾PVE NAT的过程。\u003c/p\u003e\n\u003cp\u003e提前叠甲，我不是专业运维，我也不是什么计算机系学生，我也不是什么计算机系教授，我是个学一半数学的。所以如果出现了不专业不优雅不合适的错误或者说可优化空间请友善提出。\u003c/p\u003e","title":"PVE9配置NAT"},{"content":"JUST FOR FUN 写过一些七零八落的文章，在某年某月某日心血来潮想要收集起来，于是就有了这个网站。\n","permalink":"https://blog.pythagodzilla.top/about/","summary":"\u003ch2 id=\"just-for-fun\"\u003eJUST FOR FUN\u003c/h2\u003e\n\u003cp\u003e写过一些七零八落的文章，在某年某月某日心血来潮想要收集起来，于是就有了这个网站。\u003c/p\u003e","title":"关于本站"}]