在三年防疫结束之际,我也不能逃脱,感染新冠病毒。具体感染渠道已经不可考,猜测有二:其一为戴着口罩与阳性人员沟通(送东西),此可能性较小; 其二为楼上楼下通过排风下水系统空气传播,个人倾向于该渠道。
早起嗓子疼,鼻塞,以为是最近北京空气太差,嗓子因为干燥而疼痛,正常上班。中午回来午休的时候畏冷,在被窝里双脚冰凉,轻微鼻塞,测体温38.0度,此时怀疑中招,结束午休前往办公室准备工作交接的材料,避免耽误后面工作。15:47办公室抗原测试阳性。
立刻回宿舍躺着,体温渐升,15:49 38.8度,躺了一小时多一点,试图睡觉,心率超过70,被尿憋醒,起来把电解质水拿出来加热,发热初期不要喝太冰的饮品。17:22 体温38.5度,19:40 体温38.9度,布洛芬缓释片2片,之后继续躺着休息至21:57,2207体温38.9度,躺着看视频,凌晨00:13 体温37.8度,体温终于降下来,之后休息。后续皆为居家休息。
08:56醒来,36.5度,有出汗感,体温完全降下来,上午10:06 体温36.5度,此时基本无任何不适症状,轻微鼻塞。
下午躺着休息,但是由于鼻塞加重,导致无法入睡。17:00开始畏寒,寒颤。17:36 体温 38.7度,晚饭后洗澡,18:36 服用一片乐松退烧,18:49 体温 39.3度,看来洗澡后有助于升温?躺着休息,同时配合毛巾+冰块的物理降温,20:52 体温下降,大量出汗,37.8度,此后精神状态较好,可以看视频做笔记等。凌晨02:30入睡。
08:37醒来,09:27体温37.7度,下午14:49体温36.9度,白天体温都比较正常。晚上17:46体温38.2度,开始升温,同时严重闭塞,晚饭后 洗澡,18:26服用酚麻美敏2片休息,21:23睡醒,鼻子通畅了。22:18体温37.5度。
醒的比较早,未测体温,之后回笼觉,11:25醒来。睡眠质量很差,回笼觉倒还行,咽痛严重。下午13:29体温36.3度,21:05 体温36.5度,今天未服用任何药物,开始出现咳嗽和咳痰症状,同时鼻塞依旧较为严重,不过不需要服用缓解药物。
轻微鼻塞,咳痰。
晚外出就餐,冷风受寒,咳嗽出现流血症状,好在并非一直咳嗽,鼻塞依旧。
本日上午进行核酸检测,直到第二天都未出结果,应为阳性。本日注意到嗅觉丧失,味觉部分丧失。
鼻塞,咳痰。抗原转阴。
鼻塞,大量擤鼻涕。
鼻塞有缓解,几乎无鼻塞,擤鼻涕有缓解。
我的症状为前三天晚上反复高烧,最高测得的温度为39.3度,服用布洛芬/洛索洛芬/对乙酰氨基酚等药物配合物理降温都可以在几个小时内退烧,前三天共服用3次、5片药物(2布洛芬,1乐松,2酚麻美敏),后续最难受症状为鼻塞,其他出现症状包括咳痰,咽痛,咳嗽,味觉/嗅觉部分丧失。
免疫方面,我接种了三针科兴疫苗,最后一针为2021年12月接种。总体的个人体验类似于一个偏长的重感冒病程。
药物方面,推荐在备好布洛芬/对乙酰氨基酚等退烧药的基础上,可以酌情备上缓解鼻塞/止咳等药物,这类症状出现比起发烧更影响生活质量。
新冠病毒感染的个体差异性较大,以上个人体验仅供参考。
偶尔在网上会碰到有意思的个人博客,欣喜之余第一件事情便是寻找 RSS 链接添加到 miniflux 订阅中,但是对于历史文章怎么解决呢?毕竟 RSS 阅读器一般只会抓取最近几十条。正常情况下,我是一般会翻上个几页看看,把感兴趣的添加到 Instapaper 等服务中稍后阅读,或者直接把网页保存到方便的地方,有空的时候在手机上用浏览器翻阅。但是对于历史文章多的博客,这么操作总会遗漏可能感兴趣的文章。最近又遇到这个问题,便准备找方案将历史博文打包成电子书放到 Kindle 上阅读。依稀记得很久之前看到过类似的需求,但是没有找到,搜索后发现找到的大部分方案都是基于 Calibre 的新闻抓取功能。
Calibre 是知名的电子书管理软件,且有抓取新闻的功能,自带了不少新闻网站,还可以添加自定义的新闻来源。正是利用其自定义新闻来源的功能,我们可以添加自己的 Python 脚本,在 Calibre 中称为 recipe,进去文章的抓取并制作成 mobi 格式的电子书,之后需要 epub 直接利用 Calibre 强大的转换功能即可。
Recipe 的编写主要是编写继承自 BasicNewsRecipe
的类,主要需要修改的函数为 parse_index()
,该函数抓取索引页,返回文章的名称及链接,这里用到的主要是 BeautifulSoup 这个类,观察分析网站源码的 html 结构即可自定义出自己需要的 recipe。我将自己抓的两个博客使用的 recipe 放到 Github 上的 blog-to-ebook 仓库了,有兴趣可以参考修改使用。为了方便调试,在上面的代码仓库中还有不依赖 Calibre 函数库的测试文件 test.recipe.py
。
下面的参考链接包括 Calibre 的文档和 recipe 继承类的源代码,以及其他相关文章,供参考。相似项目是 Github 上其他 recipe 的仓库。
原文地址:https://www.laroberto.com/remote-lan-access-with-wireguard/
本文中,让我们来看看如何使用WireGuard建立一个简单而安全的隧道(VPN)到你的本地局域网(homelab)。我们将采用VPS的方式,这样我们就不必向互联网暴露任何端口。
我们将模拟以下设置
角色:
注意:所有的机器都基于 Ubuntu,根据你选择的 Linux 发行版调整设置
对于Server 和Router执行以下操作
sudo apt update && sudo apt upgrade
sudo apt install wireguard
wg genkey | tee privatekey | wg pubkey > publickey
sudo sysctl net.ipv4.ip_forward=1
注意:要持久化 IP 转发,编辑 /etc/sysctl.conf
,添加 net.ipv4.ip_forward=1
对于Server,创建 /etc/wireguard/wg0.conf
:
```plain text [Interface] Address = 192.168.10.1/32 ListenPort = 51820 PrivateKey = <Server’s Private Key>
[Peer] PublicKey = <Router’s Public Key> AllowedIPs = 192.168.10.0/24, 10.0.20.0/24
对于Router,创建 `/etc/wireguard/wg0.conf`:
```plain text
[Interface]
Address = 192.168.10.3/32
PrivateKey = <Router's Private Key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE
# Server
[Peer]
PublicKey = <Server's Public Key>
Endpoint = <Server's Public IP>:51820
AllowedIPs = 192.168.10.0/24
PersistentKeepalive = 25
注意:根据你的接口实际情况替换 ens18
通过 wg-quick up wg0
启用该接口,然后通过wg show
检查状态。
在这一步,我们可以进行一次快速的检查。在我的设置中,在Server上运行 mtr 10.0.20.1
会产生如下输入
```plain text Packets Pings Host Loss% Snt Last Avg Best Wrst StDev
Client 进行如下操作
sudo apt update && sudo apt upgrade
sudo apt install wireguard
wg genkey | tee privatekey | wg pubkey > publickey
创建 /etc/wireguard/wg0.conf
:
[Interface]
Address = 192.168.10.2/32
PrivateKey = <Client's Private Key>
[Peer]
PublicKey = <Server's Public Key>
Endpoint = <Server's Public IP>:51820
AllowedIPs = 10.0.20.0/24
PersistentKeepalive = 25
通过 wg-quick up wg0
启用该接口,然后通过 wg show
检查状态。我们还需要更新 Server 的 wg0.conf,将 Client 作为一个新的 Peer。
更新 Server的配置内容
[Interface]
Address = 192.168.10.1/32
ListenPort = 51820
PrivateKey = <Server's Private Key>
# Router LAN
[Peer]
PublicKey = <Router's Public Key>
AllowedIPs = 192.168.10.0/24, 10.0.20.0/24
# Client
[Peer]
PublicKey = <Client's Public Key>
AllowedIPs = 192.168.10.2/32
注意:更新后别忘记重启 Server 上的 wg,命令为 wg-quick down wg0 && wg-quick up wg0
现在,在Client上运行mtr 10.0.20.1
产生
```plain text Packets Pings Host Loss% Snt Last Avg Best Wrst StDev
这符合我们想要的 Client->Server->Router 流程。
大部分的路由是由 [Peer] 和 AllowedIPs 配置决定的。它规定了什么可以进入和离开隧道。例如,对于以下设置。
Peer A
```plain text [Interface] Address = 192.168.10.1/32 …snip…
[Peer] PublicKey = <Peer B’s public key> AllowedIPs = 192.168.10.0/24```
Peer B
```plain text [Interface] Address = 192.168.10.2/32 …snip…
[Peer] PublicKey = <Peer A’s public key> AllowedIPs = 192.168.20.0/24
如果Peer A试图连接到(例如)`192.168.10.11`,由于该地址在`192.168.10.0/24`之内,它将被允许 进入 Peer A 的一侧。当它从Peer B那边出来时,由于它不在`192.168.20.0/24`范围内,它将被放弃。当[Interface]中Address含有网络掩码时(即`192.168.10.1/32`变更为`192.168.10.1/24`),就会变得有点混乱。虽然[Interface]中Address也可以影响路由(如果有网络掩码),但最终决定总是由[Peer] AllowedIPs 决定。例如
Peer A
```plain text
[Interface]
Address = 192.168.10.1/24
...snip...
[Peer]
PublicKey = <Peer B's public key>
AllowedIPs = 192.168.20.0/24
如果我们试图连接到192.168.10.11
,由于192.168.10.1/24
,它将被路由到这个接口,但由于它不在192.168.20.0/24
范围内,它将不被允许进入隧道(丢弃)。
为了进一步证明,使用我们开头案例中的设置。
将Router的 [Peer] AllowedIPs 字段从 ` AllowedIPs = 192.168.10.0/24 变更为
AllowedIPs = 192.168.10.2/32`
此时,尽管Server已经不能访问10.0.20.1/24,但Client仍然可以访问。
将Client的 [Peer] AllowedIPs = 10.0.20.0/24, 192.168.10.0/24
更新为 AllowedIPs = 10.0.20.0/24
Client仍然能够到达 10.0.20.1/24,但是 mtr
不再显示链上主机的IP了(如下)
```plain text Packets Pings Host Loss% Snt Last Avg Best Wrst StDev
原因是,当主机试图回复 mtr
时,数据包被丢弃。毕竟,Server(192.168.10.1)和 Router(192.168.10.3)不在 Client 的新 [Peer] AllowedIPs 范围内。