Posted in: Japan, Mobile/iOS

RCS 短信使用体会

3 月 31 日发布了 iOS 18.4 之后,4 月 1 日开始日本 au 运营商宣布开启 RCS 短信服务

开启方法很有意思

RCS 是运营商的服务,开启方法依据运营商不同差异很大。例如 au 要求 iOS 用户需要通过网页申请开通(无需人工审批,只是按一个按钮,确认后立即生效),安卓用户就不需要。申请成功之后,再去 iOS 的 message 设置页面点击几下,就搞定了。

Posted in: PC/macOS

微型 VPN

起源

作为一个(贫穷的)润人,生活在没有墙的地区,为什么还要用 VPN 呢?这才是 VPN 的本意:虚拟局域网,目标一定是少数网址。例如第一种情况:远程访问家里的 NAS 资源,则目标就是家庭的局域网 IP。此时需要在家庭的设备上搭建服务。

第二种情况是远程访问单位的内网资源,此时需要在单位的设备上搭建服务。由于单位的设备管控比家庭更加严格一些,所以就需要动动脑筋。

无论是哪种模式,因为目标网址都很少,所以在规则判断上比较简单,这与东方某大陆把物理因特网变成物理局域网,迫使程序员把虚拟局域网改造成虚拟因特网的情况截然不同。

现状

单位提供官方的 VPN 客户端,但使用起来不太方便。单位还有一台性能不错的服务器仅供我一人使用,但是只能暴露80、443 端口和一个 SSH 端口。除此之外不能暴露别的端口。

放弃 WireGuard

开始的设想是:因为访问家庭资源用 WireGuard,那么在单位的服务器上也搭建一个 WireGuard 服务器,然后自己设备上用 WireGuard 客户端就能一举两用了。但是仅有的三个端口已经全部使用完毕,不能暴露别的端口,就无法直接搭建 WireGuard 服务。另外也不能使用 cloudflared 来曲线救国,因为 WireGuard 是使用 UDP 的,与 cloudflared 的 TCP 不太合得来,而且 QUIC 流量通过单位的防火墙时有问题。

SOCKS 5 代理

因为访问单位内网仅仅是一些很轻量的数据浏览,ChatGPT 给出的方案是 SOCKS 5 代理(没错,在润之前也经常听过这个词)。

首先在自己电脑上(以我的 macOS 为例)的终端运行:

ssh -D 1080 -C -q -N [email protected]

这时就创建了一个微型 VPN:地址是 localhost 即 127.0.0.1,端口号是 1080。

由于我平时使用 Safari 浏览器,没有专门的扩展来给浏览器自己设置代理,而是需要在系统网络里面设置。首先我设置了全局代理,如右图所示。设置之后测试成功。

但因为并不需要全局代理,只是针对少数几个网址进行代理,ChatGPT 给出了 PAC 方案。即写一个名字叫做 proxy.pac 的文件,代码如下:

macOS 设置全局代理的方法
function FindProxyForURL(url, host) {
    if (shExpMatch(host, "*.example.com") || shExpMatch(host, "another-site.com")) {
        return "SOCKS5 127.0.0.1:1080";
    }
    return "DIRECT";
}

然后把文件地址 file:///path/to/proxy.pac 填入设置区域即可。(当然需要把之前测试用的全局代理取消)

以上是 ChatGPT 宣称的。然而填入之后发现完全没有任何效果,说明要么是 PAC 文件有问题,要么是 URL 填写有问题。

到此为止 ChatGPT 就无法进一步解释了,开始胡说八道了。最后是自己去网上搜到的两个坑。

macOS 设置 PAC 的方法

小坑:macOS 已经不再支持填写本地的 PAC 文件

这个在好几年前就是这样了(file:/// 无效),ChatGPT 却不知道。于是我用

python3 -m http.server 8000

搞一个本地 HTTP 服务器。但还是不行。

大坑:macOS/Safari 不认 SOCKS5 语法

要把 SOCKS5 127.0.0.1:1080 这句话里面的 5 去掉,变成 SOCKS 127.0.0.1:1080。这时就可以用了。

转移二线

这么一搞问题变复杂了,这意味着电脑上需要跑两个背景进程,一个是 ssh 的 SOCKS 服务器进程,一个是 python 的微型 http 服务器进程。可是我的是 macbook 笔记本电脑平时用完就合上盖子,此时系统进入睡眠状态,这些网络进程一定会断掉。每次都要重新开启太麻烦了。于是我就想把两个进程转移到 VPS 上。

在 VPS 上设置好这两个进程之后,首先仍然在电脑上测试一下全局代理(把所有 127.0.0.1 换成 VPS 的 IP)。傻眼了,所有的网站都上不去了,说明 SOCKS 服务设置不对。

再次询问 ChatGPT,这回没有胡说八道:ssh -D 默认只认本地的 SOCKS,想要让它侦听远程来源的 SOCKS 访问请求,需要给 SOCKS 命令加上 0.0.0.0,即 ssh -D 0.0.0.0:1080,此时就可以侦听远程来源的 SOCKS 访问请求。

设置之后,再测试全局代理成功。然后 VPS 本身有标准的 HTTP 服务,托管 proxy.pac 文件,把 URL 填入系统设置里面。测试成功。

转移三线

VPS 对外是公网 IPv4 的地址,如果被黑客扫到 SOCKS5 代理的端口号,那问题会非常严重,他们只需要用 IP + 端口号就可以无限制利用我的微型 VPN,不需要任何验证。

虽然 SOCKS5 代理也有用户名和密码验证机制,但是比较麻烦。所以我决定转移三线:把 VPS 换成我的 OpenWRT 路由器!

在 OpenWRT 上运行 ssh -D 0.0.0.0:1080 ….. 之类的命令,PAC文件则使用 OpenWRT 内置的 uhttpd 来进行托管。由于路由器在内网,虽然也写成了 0.0.0.0,但实际上只有自己能够访问,外面的人无法访问。如果自己不在家里而是在外面,则用 WireGuard 翻回家里即可。

黑客攻破 WireGuard 密钥的概率基本为0,这下子应该安全了。

二线 + 三线

虽然 PAC 文件是在当前某个 Wi-Fi 的菜单里面点进去设置的,但是它对所有 Wi-Fi 都是默认生效的,和我预期的不同。因此在外面网络环境下,需要一直连着 WireGuard 才行,否则系统无法从内网 IP 获取 PAC 文件,就不能正常上网。这也太浪费了吧!我只是偶尔用到这个 VPN 而已,就要一直开着 WireGuard?

于是就想出了 二线 + 三线的策略:PAC 文件放在 VPS 上,采用 https://mydomain.com/proxy.pac 的 URL,填入 macOS 系统的网络设置里面。而 proxy.pac 的文件的 SOCKS 代理地址则写路由器的内网地址。这样子就算是即方便又安全了。无论是在家里还是在外面,PAC 文件都能访问到,因此不影响正常上网。需要访问 VPN 时,就连上 WireGuard 进入家庭局域网,即可连接 SOCKS 代理。

Posted in: Japan, Life

家庭燃气发电

太阳能发电很多人都熟悉,发的电可以:

  • 给自家免费使用
  • 卖给电力公司
  • 存在蓄电池里面给夜里用电时使用。
  • 停电时,作为应急电源来使用(当然如果没有蓄电池的话,那仅限于有太阳的白天)

但是燃气发电就相对来说比较罕见了。

由来

燃气发电(日语:エネファーム)的设计理由是:太阳能发电只能在阳光充足的时候起作用,如果遇到连续的阴雨天(在特定季节很常见),发电量就会大打折扣,无用武之地了。相比较而言,燃气供应是全天候的,不受天气的影响,所以相对来说比较稳定。但是——且慢!

价格

可能你很快就会提出反驳意见:太阳光是不要钱的,可是燃气是要钱的啊!那等于原来交给电力公司的电费现在变成了交给燃气公司的燃气费,有什么区别?而且多了一道转换手续,能量不是损失更多了吗?所以设计者就提出了如下方案:

  1. 对于安装了燃气发电设备的用户,燃气公司有优惠套餐,每月燃气用量超过一定数额之后会有优惠,在冬季的优惠力度更大。一般安装了燃气发电设备的用户,冬季每个月燃气用量是100m3以上。
  2. 燃气发电可以产生热水。这里就比较有意思。

热水

上图是我家的燃气发电设备,由两台机器组成。左边是发电机和热水罐,右边是燃气热水器。因此就得提一下热水的问题。

普通家庭用的燃气热水器,如果把终端的水龙头(例如浴室的花洒🚿、厨房或洗脸台的热水龙头🚰)调到最热的一档,会感觉非常烫手,因为水温太高了。然而事实上对于洗热水澡、洗脸、以及冬天厨房洗碗洗菜来说,并不需要这么高的水温,令人感觉不冷就可以了,还能避免小孩子烫伤。因此,带有燃气发电设备的燃气热水器,其默认设置的最高水温是 40℃,这是令人感觉暖和而完全不烫手的温度。

冬天,自来水的温度接近 0 ℃,由于燃气发电时会产生热量和水(燃气中的氢元素和空气中的氧反应),这些热水和一部分自来水混合后形成温度大约为 20℃ 的温水,储存在左边发电机内部的热水罐里。等到用户需要用热水、打开终端的热水龙头后,右边的燃气热水器开始工作,把水继续从 20℃ 加热到 40℃。这样所消耗的燃气量,比起普通的燃气热水器一下子把水从 0 ℃ 加热到 60 ℃(烫!)要少得多。夏天由于自来水本身接近 20℃,则发电热量会把水温加热到 30℃ 左右保存起来。此时用户开热水时消耗的燃气量会更少(只需要从 30℃ 加热到40℃)。当然夏天洗菜洗碗洗脸不需要热水,但洗澡还是要用的。

我家的燃气发电最高功率是 700W。家庭总用电功率低于 700W时,它的发电量会随着用电功率动态变化,用多少电发多少电,这意味着完全不会再消耗额外的电力。超过 700W 时再用电力公司提供的额外的电。当然这个最高功率也不是恒定不变的,有时也会遇到发电只有 200W,剩余的电都走电力公司的现象。

太阳能 – 燃气双发电

我家是同时安装了太阳能发电和燃气发电。如果是晴天的白天,两者一起工作时,家庭用电会首先走燃气发电,超过部分(一般是超过 700W 时)再走太阳能发电。再超过时才走电力公司的电。由于太阳能发电功率高达 5000W,叠加燃气发电就是 5700W,对于我家来说是一个永远也达不到的值,所以晴天的早上7点到下午6点基本不会消耗额外的电。

然而燃气发电毕竟是消耗燃气费的,太阳充足的前提下我还是希望尽可能用太阳能发电,所以就学会了一招 —— 看天气预报行事。例如,晴天就开空调取暖、用电磁灶烧菜,阴雨天就开地暖来取暖、用燃气烧菜。有效利用天气之后,冬季一个月的“自费用电量”可以压缩到 70 度以内,这对于两层楼的独栋房子来说还是能接受的。

Posted in: IT, PC/macOS, Ubuntu/Linux

cloudflared 用起来爽歪歪😊

工作用的服务器不能远程登陆 SSH,这是为了安全考虑大部分机构都会这么做。想要远程登陆,我们的做法是专门设置一台“跳板机”进行中转登陆。可惜昨天“跳板机”出故障坏掉了,自然无法远程登陆了,维修需要在下周进行。那么我是不是只能到现场上班、无法远程工作了呢?当然不是,我想到了 cloudflared。

操作方法很简单,问 ChatGPT 就可以了。用英文提问会得到更加准确的回答。在提问时要指出来自己没有 root 权限,它就会告诉你每一步的操作步骤。简单来说就是:

Posted in: IT, Japan

申请免费使用教育版 GitHub Copilot Pro

VS Code 上自从有了 AI 辅助编程(代码补全)之后确实方便了很多。但也许是用的人多了,供应方觉得被薅羊毛太狠了,就开始对免费用户下手了。

我最开始使用的是 Codeium,大约用了半年还是一年(忘了)没出过问题,但就在最近一个月频繁出现 snoozing 错误。snoozing 这个单词查了才知道是“打盹💤”的意思。问题是你这是💤吗?这明明就是一睡不醒了。

Back to Top