dc

IPv6后续

前阵子全面启用了IPv6,最近又有些修改。 M、O tag 之前使用的是无状态DHCPv6,但还是能在DHCPv6分配地址中看到几条记录,那不就相当于是有状态的分配么。于是又看到了A、M、O几个tag的作用,也许我用的OpenWRT并不是最新版原因,UI上没有更精准的调整方法,但配置支持。我的无状态DHCPv6给配置了ra_flags 有managed-config 和other-config 文档上的解释是,managed-config代表里地址信息也从RA中获取,而other-config指的是DNS等信息,完全无状态的话,得全都自己配置需要的信息才能联网,退而求其次的无状态就是地址能自己生成就好了,其他信息还可以从DHCP获取。 由于我的UI上没有更细的关于RA的配置,于是我就直接改配置,ra_flags只保留了other-config AppleTV的home hub 最近买了个Apple TV 4K版,接入家庭网络后发现它竟然在自己组网。。。起初是从k8s集群中看到了所有节点都有一个fd42 开头的IPv6地址,以为是什么高级的k8s功能,搜了很久也没看到哪里
5 min read
全面启用了IPv6

全面启用了IPv6

好像是因为IPTV,全面启用了IPv6. 农历新年前最后一个大件,AppleTV 4K到手,目前看来这也算是个提升幸福感的东西。拿到后用了国区AppleID登陆后发现啥功能都没有,以为买错了,因为看到说明在某代AppleTV上不提供AppStore,但我这几乎是最新款AppleTV了还能不提供?最后得知国区没有AppleTV。。。 作为一个电视,还是有机会看看新闻、春晚啥的,于是尝试了一下IPTV,由于没有购买这个服务(从联通),也就只能找一些免费资源,收费也没找到。。。最后找到一个IPv6的地址,当时没有启用IPv6,也就无法测试是否好用,这才考虑要不要启用IPv6试试看啊,之前默认开着,总感觉慢慢的,后来就嫌麻烦关闭了。 OpenWRT上的主要改动: * WAN口中【使用内置的 IPv6 管理/ use builtin IPv6 Management】关闭,这个关不关都不要紧,看到这个功能是为了几个没听过的服务使用,于是就关了。 * LAN中的DHCP里有一个【IPv6】配置,通告和DHCPv6都开了服务器模式,这和具体网络环境有关,我是光猫桥接,所以这里用服务器模式。
2 min read
最近的网络改动
networking

最近的网络改动

最近微调了家中网络,主要来自以下几个方面。 1. 去除2个端口的链路聚合 2. iot网络隔离 3. 测试网络 原本链路聚合为了增加带宽,但可能受限于交换机的链路选择算法,并没有测到更高的带宽,不如以后升级到2.5G网络算了,现在用了猫棒,光纤收发机支持了2.5G,所以从路由器测速能到1200Mbps,从下游电脑上只能到940Mbps。去掉链路聚合是为了能释放一个网口给iot使用。 目前把第一个网口留给了测试网络,用线拉到了办公桌上的交换机,基本是给几个不动的笔记本使用。目前和默认的LAN网络一致,LAN用了4号网口,不再需要桥接,直接就对应eth3. 而3号网口给了Linksys 1900AC路由器,这个路由器是前几天替换下来的老路由器,想专门给iot设备使用。 于是创建了一个iot网络,并添加了如下规则限制访问LAN网络,但不影响访问WAN. config rule option target 'ACCEPT' option
2 min read
Comprehensive Rust中文版编译
rust

Comprehensive Rust中文版编译

官方地址:https://google.github.io/comprehensive-rust/,中文名字应该叫《深入理解Rust》? 从twitter上看到有人发了这样一个Rust的入门教程,出自Google Android团队,不造为啥是Android出的,看着是个三四天课程,前三天是基础,后面有Android、Bare metal、并发三个后续内容。 看到昨天合并了中文的翻译,看了下在线版的多语言,只有4个,但PO文件已经有不少,不造这里是咋考虑的,固定就这几个还是要等翻译完再加上。目前中文版翻译不是100%,也不太影响阅读。 先睹为快的方法 按照README中提示,用Cargo安装几个依赖后,使用 mdbook build 可以指定语言编译成静态文件,试了下,mdbook serve 也支持添加MDBOOK_BOOK__LANGUAGE=zh-CN 得到中文版。注意需要使用zh-CN而不是zh或者cn 其他 发现Jetbrains发布的RustRover在Preview阶段,应该可以免费用,所以赶紧下载一个吧,还是那些熟悉的按键!
1 min read
MetalLB with OpenWRT

MetalLB with OpenWRT

主要参考这里:https://www.cnblogs.com/hahaha111122222/p/17223152.htm,下面记录一些和OpenWRT相关操作。 我用的stupidloud/nanopi-openwrtOpenWRT镜像,安装最新版slim版,但本地软件源中没有quagga,打开snapshot源后,也没有。。。发现release版中有,于是找了最近一个stable release,下载了这些packages: * quagga-bgpd_1.2.4-2_x86_64.ipk         * quagga-vtysh_1.2.4-2_x86_64.ipk         * quagga-zebra_1.2.4-2_x86_64.ipk * quagga-libzebra_1.2.4-2_x86_64.ipk     * quagga-watchquagga_1.
2 min read
k8s

cloudflare帮助消除了8443端口

80和443不能用才改用的8080和8443 8080和8443的转发在openwrt中添加,转发给ingress-nginx即可。到此,如果你不嫌弃8080和8443端口出现在URL上,那就不用继续了,这样以及可以用了。 但如果还想去掉这可恶的自定义端口,则需要继续,让cloudflare帮忙。 一直在用cloudflare,但仅仅用来添加DNS,它的本源(CDN)和最近几年一直在上新的功能是一个都没用上。看了下cloudflare的功能,一开始觉得无法解决端口隐藏的功能,也就是说,虽然8443也是CF认可的https端口,也就是说,当你访问8443端口的时候,CF也会去original的8443端口获取数据,但并不能给隐藏啊。后来看到有人说可以加page rules直接转发,这样的话,确实可以,但最终还是不隐藏的状态,直到我看到这么多规则可以设置: 我看了下Origin Rules中写了可以rewrite port,于是添加了一条试试: 这条规则就是HTTPS的话,rewrite origin port to 8443,尝试了下,竟然就隐藏了端口。。。可以用了。 据说,
3 min read
Day light collector

Day light collector

这是个什么? 统计光照数据的应用。 为什么? 买房的时候,对于前楼遮挡与否、光照时间等有些讨论,现在租住的房子光照效果不错,于是想统计一下现在的光照时间段、强度信息。 怎么做? M5Stack Atom Lite + DLight传感器,把数据上报到InfluxDB中(部署在k8s) 电源问题 得有一个持续供电的电源,这样才能统计接近白天时间的光照强度,因为要放在南向的窗户边,那里正好没有电源,要么就要拉一根线过去。 使用过充电宝,电量没问题,但,M5stack工作时电量消耗太小,充电宝一会就休眠了。小米的充电宝有低电流模式,但,只能开2小时。可以考虑购买不休眠的充电宝。 买了个5V2W的太阳能电池板,供不起来M5stack,要是买5V7W的应该就没问题了,只是会稍大一些。 试过M5stack Atom电池套件,190mah,很快就用完了,再接一个充电宝也还是不行。 最终在M5stack技术支持建议下,使用deep sleep模式,大约有3小时续航,还是不理想啊。不过3小时是在10s一次的频率下,每次3次采样取了平均值。降低到1分钟频率会使得Atom电池套件
2 min read
M5 stack atom lite

M5 stack atom lite

使用Manjaro系统,下载官方提供的m5burner,直接运行会提示让你把自己用户加到dialout组下,但在manjaro系统中并不使用这个组管理usb serial设备,连接上atom lite后并不需要像windows那样安装驱动,似乎是直接就能使用serial设备了。 我用minicom测试了一下,连上就能看到数据,但需要是root用户,如果不是root,需要你的用户在uucp组下。我给自己加上这个组,logout后还是不行(无权限),重启后正常。。。 直接运行M5burner的bin目录下的m5burner即可,可以用右上角的serial manager测试一下连接是否正常,再对应找到固件烧录即可。 from m5stack import * from m5ui import * from uiflow import * import unit from random import randint import utime rgb.setColorAll(0x33ff33) rgb3 = unit.get(unit.RGB, unit.PORTA) rgb3.se
1 min read
Zoom mute button

Zoom mute button

自从看到用M5 Atom S3做的mute button视频后就也想做一个这种按钮出来,因为每日也得用几次zoom开会,有这样一个实体按键确实很方便,因为我需要比较频繁按静音。 stackoverflow key可以通过QMK修改按键定义,原本只是把key 1做成了触发Alt+A,这在windows上是zoom设置的静音开启、关闭快捷键。但后来看到有人专门写了文章说这个快捷键不是全局的,比如你在share screen,按这个键就不能开关声音,我试了下果然如此,另外,没有share screen时,焦点不在zoom窗口时也没用;windows中还有个mini窗口的zoom,如下图,焦点不在这上面也不行。 目前通过AutoHotkey,写了几行代码处理这几种情况,先激活到zoom窗口中,再触发Alt+A ,再切回之前的窗口。 ^+!a::{ current_active_window_id := WinExist("A") if WinExist("ahk_class ZPFloatToolbarClass") or WinExist(
2 min read

Advanced private K8S

之前又一次部署了k8s之后,还没真正开始使用,现在有机会了,要部署一个app,并发布到线上。 困难1:build for ARM64 找一个树莓派,或者M1电脑,或者在x64上折腾qemu模拟arm64,或者aws上开一个ARM64的VM。最后一个最好! 困难1-2:image registry 暂时放在了docker hub上,public repository,在ARM上编译完直接push到了docker hub。 困难2:CNI没成功 CNI是k8s的网络插件,在集群初始化后还需要选择一个CNI部署才能用k8s。然鹅我选择了Flannel这个CNI,需要在初始化k8s时指定pod network cidr,我肯定是没指定的,于是我又进行了一遍kubeadm init,就为了传这个参数 困难3:ingress 选了nginx-ingress,功能估计够用 困难4:load balancer 之前选的metallb,现在依然打算选这个 困难5:另一个网段 我想给k8s使用192.168.2.0/
3 min read
openwrt

给OpenWRT x86扩容磁盘

一般用OpenWRT很少遇到磁盘扩容问题,因为大多数情况磁盘都是不太够用的,除了像这次把OpenWRT安装到了x86平台或者一些性能很好的硬件平台。 这次扩容很有风险,我没有参考官方文档,后果就是,重启后无法使用了。下面是我的操作: 1. 用fdisk对sda2分区进行扩容。 2. 执行resize2fs失败后重启。 我的openWRT安装后一共有3个分区: 1. sda1:boot和efi 2. sda2:rootfs 3. sda128:不知道做什么用,Type是BIOS boot,虽然名字靠后,但却是磁盘最前面的一个分区 这样看起来,sda2其实是最后一个分区了,我的磁盘是32G, 扩容前,sda2只有几百Mb,用fdisk对其扩容的方法是,先删除sda2,再创建,fdisk默认会把所有空间给新创建的分区,这样就达到了扩容的目的。这一切操作做完后,用fdisk写入。 接下来应该做的事情是:更新GRUB. 因为我没更新GRUB就重启了,系统就引导不起来了,我用了Ubuntu LiveCD,挂上了sda1和sda2,在LiveCD中手动更新了GRUB。 其实
2 min read
树莓派HiFi
raspberrypi

树莓派HiFi

Updates UPS 工作正常,之前以为不能兼容可能是因为UPS用顶针方式集成树莓派和DAC需要用到的GPIO冲突,和卖家交流了一番觉得可以试试,结果充电后就正常了,电量不足时UPS发出了蜂鸣音。图片已经更新成了带UPS的样子。 Nintendo Switch蓝牙音频 一个通宵捣鼓switch, 因为switch用蓝牙会很方便,不然还得换成2和1的线接到音箱和switch上。为什么需要花一个通宵?大概是某些bug在一起很难弄吧。在我刚刚发文放弃switch的时候,鬼使神差般的尝试了一种办法,竟然可以让switch配对上——就是关闭蓝牙,再打开,然后紧接着配对。在stackoverflow中看到有人提到3分钟问题,文档这样说: Once the discovery stops, devices neither connected to or paired will be automatically removed by bluetoothd within three minutes. 总之我这样做了之后,就能在agent上收到消息是否同意设备加入的提醒了,之前一直遇到的
4 min read
升级了J4125作为主路由
openwrt

升级了J4125作为主路由

双12没忍得住,继续买买买了一堆用不上的网络设备: * 猫棒 * 2.5G光电收发器 * J4125路由器 其实目的也就是突破一下路由器端的千兆速率。原本的R2S能让测速勉强跑到900+,理论速度945没见过,而换了J4125记得最高见过960mbps。在路由器上用speedtest跑,见到了1200+,果然联通千兆给的很足。 猫棒没啥特殊要说明的,买的是ODI(不知道什么牌子)全新,支持GPON和EPON,因为联通是GPON,没机会尝试EPON了,据说是自动识别,但EPON速度据说到楼就是1Gbps,所以也快不到哪去。我这里的联通,只需要输入LOID就可以认证了,不需要其他设置了。 光电收发器有点说头:在正面有个不太容易使用的跳线开关,我拿到后以为是做工问题,很不容易使用,还打开了收发器确认是不是可以向外推一推,结果现在来看,像是故意设计成这样,上面的文字描述也不清楚,我就在拿到后拨到了ON端,以为这样才能用,果然也是能用,只是。。。拨到ON端意思是限制电口速率为1Gbps!现在我也明白了上面标的“1”的含义。这是我在研究了半天J4125和openwrt系统、网卡驱动后
4 min read

Bind multiple ips to a single NIC

我购买DMIT服务的时候另外买了一个网络优化过的IP地址,这样我的VPS就有了2个IP地址,之前问过客服哪个是优化过的地址,结果是那个默认没绑定的IP. 当时修改了netplan的配置,换上了新地址。今天想着是不是可以让两个地址都工作呢,会不会需要再有一个NIC才能用,因为两个IP分别是两个网络,有不同的网关。 搜了下,看到netplan给了多个ip在同一个网卡上的例子,感觉应该可行:https://netplan.io/examples 最终就是按照例子那样,添加上了2个IP, 给了不同的metric。虽然这样,但也许没啥作用,如果我的VPS是一台路由器的话,这样就有了2个下一跳的出口,根据metric可以控制走哪一个出口,比如默认走metric小的那个。但我这是个代理服务器,流量到这里就结束了。 总之,两个IP都可以访问了,另外发现不是网络优化过的IP,延迟更低呢。。。
1 min read

放在了Linode

主要是DMIT的主机被用来加速了,443端口分给了伪装网站,本来资源就不太够,再开上Ghost(mysql+nodejs)就更加捉襟见肘,我都看到了几次OOM。 考虑过转成静态网站,无奈没找到从Ghost转其他平台的,要么就是购买blog service,要么自寻他路搭建。DMIT上再开一个的话,估计12usd/month差不多,但感觉有点浪费。就看了下Linode, 5usd/month就有1G内存,应该是够用了。 选了Japan2机房,但开出的IP已经被封,本想看看速度咋样,特意忽略了加速,这才发现IP是不能用了,搜了下这应该是常见问题,建议自行开主机更换。Linode有个IP transfer功能,可以自助交换两个主机的IP,需要是同一机房。 于是就开始创建新主机,测试ping和ssh是否正常,估计得开了10台吧,才遇到这个ping和ssh都可用的,又试了下80也可用,就赶紧换了IP,换完后需要重启一下主机,否则还是用的旧IP,有些功能不重启不可用,但SSH竟然不需要重启就行了。
1 min read

最近耳机购物记录

很久不更,各种不更,活在自己的圈子里。本来今天在外面很累,很热,饭也没食欲,回来后把作业处理完,突然想记录一下最近买耳机的记录。 上一个耳机是小米的半入耳式耳机,可能现在官方买不到了,能买到的半入耳就是黑鲨游戏耳机了。为啥非得是半入耳?入耳式压迫感太强,塞住耳朵很不舒服,也可能是苹果那款半入耳太习惯了吧。不过小米那款戴坏了,终于有这种把东西用坏再买新的的时候了。有时候很多东西,就想买,但不一定用得够多,慢慢也许就被时间淘汰了,于是又在物色下一个。 最近买了铁三角的半入耳,C200IS,有点挂不住,随后退货了,这个话有点长了。一开始打算买一款可以替换小米的耳机,搜了下京东,看到了JBL监听耳机,就想买个监听吧,我又不听歌什么的,监听更适合我啊,但监听耳机无一例外不带麦克风,我是强烈需要麦克风的,于是就考虑买个专业麦克风配监听耳机吧。 想到了很多年前想买的铁三角监听耳机,好像那时候还是M50X旗舰,现在都有M70X了。想着买了铁三角耳机,再买个对应的麦克风吧,于是就看到了ATR2500X,看着支架什么的很帅,加了购物车,又对比了其他麦克风,看了些哔哩哔哩测评,总之那几天花了很多时间。
4 min read
javascript

unicode in JS

写的是unicode in JS,实际in js的部分不多,更多的是unicode原理。 两个重要概念 * code point:在Unicode空间中,一个具体的字符所在位置 * code unit:用来编码一个code point的数量,例如UTF8,使用1-4个code unit来编码一个Unicode code point。 Unicode now 现在的Unicode共占用21个二进制位,它们被分割成了17个plane,每个plane占用16个二进制位。举例几个plane: plane 0: 0x0000-0xFFFF,Base Multilingual Plane (BMP) plane 1: Supplementary Multilingual Plane (SMP) plane 2: Supplementary Ideographic Plane (SIP) UTF-x UTF-32,使用32个二进制位表示unicode code point,
1 min read
javascript

number in Javascript

最近在看《Impatient JS》,熟悉的地方快快略过,看到了JS中的数字,现在来看有: * number * bigint number number很神奇,可以是整数,也可以是浮点数,所以number的实现,其实是浮点数,而且是double类型的浮点数,范围是64个二进制位,符合IEEE 754……以前在看到float的时候基本都会带出来IEEE 754这个标准。这里面具体讲了什么我完全没看过,但今天在《impatient JS》中,简单了解到了一些。 说是64位,实际可用来表示数字的有53位,这53位中还有1位被用作表示符号(正负号);除了53位,剩下的11位被用作了指数部分(科学计数法),范围-1023~1024。 bigint Bigint is a new primitive data type for integers. Bigints don’t have a
1 min read