阅读视图

发现新文章,点击刷新页面。
🔲 ☆

在 Linux Router 上配置 Source-Based Routing 策略(源进源出)

近期从朋友手里嫖了一点带宽,但是上游的网络配置明显禁止了非对称路由,所以按照我们 AS47778 的骨干设计来讲,内网的路由不对称,会导致有些并非来自该上游的来向包被选路到该上游出口。

所以,我们接下来基于 nftables 和 iproute2 来配置了 Source-Based Routing,来保证仅有来自该上游的包可以选择该上游进行转发。

Netfilter 和 nftables

Netfilter 是 Linux 内核中的一个用于管理数据包的框架。一切数据包都从 Netfilter 经过,经历如下图所示的周期。在 prerouting、input、output、forward 和 postrouting 阶段,Netfilter 允许 iptables 和 nftables 这样的应用程序对数据包进行控制,这也正是防火墙的基础。

Netfilter-packet-flow

看起来很麻烦吧,所以我们来简化一下。

1
2
3
4
5
(NETIN) -> PREROUTING -> <ROUTING> -> FOWARD -> POSTROUTING -> (NETOUT)
                             |                       ↑
                             |                   <ROUTING>
                             ↓                       ↑
                           INPUT   -> [LOCAL]  ->  OUTPUT

对于到本地的包 A,从 NETIN 进入之后,会通过 PREROUTING 链,到达 ROUTING 进行路由决策,检查到是本机包后进入 INPUT 链,然后被实际的发送给本地的程序。
本地的程序处理后,发送向外部的包 B,从 LOCAL 进入后到达 OUTPUT 链,再次到达 ROUTING 进行路由决策,通过 POSTROUTING 链后最终从 NETOUT 离开本机。

对于需要转发的包 C,从 NETIN 进入之后,通过 PREROUINTG 链,到达 ROUTING 进行路由决策,检查到需要转发,进入 FORWARD 链,通过 POSTROUTING 链后最终从 NETOUT 离开本机。

对于我们目前的情况而言,我们来分析以下不同包的情况:

  1. 去包从该上游进入网络内部,在本节点需要转发到网内的去包:正常转发。
  2. 去包从该上游进入网络内部,在本节点需要响应回包:回包正常按照选路离开节点或收到回包后源进源出即可。
  3. 去包从其他节点进入网络内部,在本节点需要继续转发在网内的去包:正常按照选路离开节点即可。
  4. 去包从其他节点进入网络内部,在本节点需要响应回包:回包不可以从该上游离开网络,需要源进源出。

在 Linux 的网络栈中,我们可以通过向包添加 fwmark (通常是一个 32bit 的无符号证书) 的方式来为数据包添加 tag,通过这个 tag 来在路由决策里将路由导向不同的 NETOUT。

同时也存在着一个 conntrack 机制和对应的 conntrack 表,用来追踪整个连接,通常被用于 NAT 环境中方便维护转发关系,我们在这里也会使用用来解决 2 的回包进行源进源出问题。

对于我们的场景而言,我们主要需要以上的 2 和 3 两个情况进行源进源出策略。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/sbin/nft -f

table inet source_routing {
    chain prerouting {
        type filter hook prerouting priority mangle; policy accept;

        iifname "up1" ct mark set 0x00000001
        iifname "node1" ct mark set 0x00000002
        iifname "node2" ct mark set 0x00000003

        ct state {established, related} meta mark set ct mark
    }

    chain output {
        type route hook output priority mangle; policy accept;
        meta mark set ct mark
    }
}

我们在这里创建一个名为 source_routing 的表,同时为 IPv4 和 IPv6 应用 (inet)。

PREROUTING 链上,为来自不同接口的 packet 的连接打上了 ct mark,用来追踪连接。
对于已经被 ct mark 匹配并追踪的既有连接的包,我们直接将 ct mark 作为 fwmark 的值复制。
通过PREROUTING 链和 conntrack,我们给符合 2 条件的包打上了 fwmark。

OUTPUT 链上,是本地程序响应的包,符合 4 条件。我们直接 copy ct mark 到 fwmark。

iproute2、路由分表和策略路由

在 Linux 中,最多可以存在 255 (1-255) 个路由表,系统默认为我们配置 255 (local) / 254 (main) / 253 (default) 三个路由表。

local 表中包含本机路由和广播信息,127.0.0.1/8 的路由就来自该路由表,该表的内容由内核主动维护,理论来讲不需要额外的修改。

main 表中包含默认配置的路由信息,是默认使用工具添加的表格,正常的 ip route add 就会将路由添加到该表。

default 表默认内容为空,可以手动指明向该表写路由。

对于我们需求而言,我们需要创造 N 个表(N 即该节点的外联节点+上游个数),并给对应的表添加路由来。

在 Linux with iproute2,我们需要在 /etc/iproute2/rt_tables 维护表格配置。

1
2
3
4
5
6
7
8
9
255     local
254     main
253     default
0       unspec

# Following is what we modified.
100 up1_table
101 node1_table
102 node2_table

我们在这里添加了 100 101 102 三个表,分别 mapping 到 up1_table node1_table node2_table 上。

对于我们的要求,可以直接添加 default via $gateway dev $device 到各个路由上。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash
# policy.sh
export src="fe80::2" # 通过该变量来保证不同 interface 上出包 src 的 IP 一致。

while IFS='|' read -r fwmark device table gateway; do
    fwmark=$(echo "$fwmark" | tr -d '[:space:]')
    device=$(echo "$device" | tr -d '[:space:]')
    table=$(echo "$table" | tr -d '[:space:]')
    gateway=$(echo "$gateway" | tr -d '[:space:]')

    sudo ip route add default via "$gateway" dev "$device" src "$src" table "$table"
    sudo ip rule add fwmark "$fwmark" lookup "$table"
done
1
2
3
4
5
# policy.conf
# fwmark|device|table|gateway
0x1|up1|up1_table|fe80::1
0x2|node1|node1_table|fe80::1
0x3|node2|node2_table|fe80::1
1
cat policy.conf | sudo policy.sh

通过这个小脚本,我们分别给每个表都按照配置加入了对应的到 gateway 的默认路由,然后配置了包含 fwmark 的包都按照对应的 fwmark 命中到表上。

此时对于来自该上游并需要在本地响应的回包:

  1. 入包命中 PREROUTING 链,并被打上 ct mark
  2. 回包进入 OUTPUT 链,将 ct mark 复制到 fwmark 上
  3. 回包进入 ROUTING 路由决策,匹配 fwmark 到对应的仅默认路由路由表上
  4. 回包离开本机

以上,我们成功配置了源进源出的网络路由方案,顺带对 fwmark 和 nftables 等有了初步的了解。若要进一步了解 nftables 及其配置, 官方 wiki 是个不错的选择,无论是配置过程中遇到问题还是希望进行更复杂的配置,都能在官方 wiki 找到详尽的说明。总之,配网愉快~

🔲 ☆

辛德瑞拉。

第一次看到灰姑娘这个故事是在我小的时候,大概是两岁的时候?具体的时间什么的已经忘记了。

当时觉得,即使灰姑娘再如何落魄,只要能穿上水晶鞋登上舞会,王子就一定能够找到她的。

只要等待就能获得幸福,或许我也是这样的辛德瑞拉吧。

于是就带着这样的愿望期待着快点长大,自己也能如辛德瑞拉一样获得幸福。


直到长大了之后进入学校,考试前的复习课上,出神的望着窗外。

原来,就算看着蓝天也是一种奢望啊。

世界确实是这样的,没法继续产生价值了就要被当成垃圾扔掉。

小孩子总是期望着长大,但等到长大了,才发现我们都只是,只有等待没有幸运的辛德瑞拉。

看着他人的幸福,像是自己也能把这份幸福偷走一样。

原来我也是这样的小偷啊。

明明自己已经破损不堪了,也按压不住自己逐渐增强的分享欲。最后发现,原来没有人想听我说话啊。

就算一次次落败,也觉得自己绝对不会哭出来的。

直到真的有眼泪落到手上,也只会苦笑一声,原来自己也会哭啊。

说着想要杀死某些人的话,但实际自己想要杀死的人是自己啊。

我大可劝告自己,说什么: 人生的主旋律就是失败和不得志。

但,听惯了正拍的人们啊,又怎会接受他们口中不调谐的反拍。

我们是东食西宿的大猩猩,既想得到鱼又想得到熊掌,实际比这还要愚蠢,宛若伊索寓言里的傻狐狸,丢掉嘴边的肉去追求虚无缥缈的泡影。

所以啊,梦想和希望什么的,不如拿去换成钱,把账单什么的交交就好了。


然后走在路上又一次看到了樱花,风很大,花瓣在空中不断飘落。

像是那天的蓝天一样,我看的很出神。

就在家的附近,是很常见的东西。

突然意识到,原来樱花也可以这么漂亮啊。

像是小时那个冬天,落尽了叶子的行道树,透出其后被遮挡的天空,和深绿的让人心慌的叶子相比,显得格外湛蓝。

想起来他之前所说的,“如果在八十岁死去的话,就只能看五十多次樱花了,那该多寂寞啊。” 的话。

莫名想起 “正是江南好风景,落花时节又逢君”。

虽然不是很应景。

但是,在生命最后的春天里赏花的心情;在落难时,远离繁华的长安,怀念着过去绚烂的年轻日子的心情;这样的光景里,如此难得的,与故人相遇的幸运。

大概也可以算是 “在回忆中救赎今后的人生,在未来中填补过去的遗憾” 了吧。

已经很晚了,等我喝杯速溶咖啡接着写。

嗯,忘记加糖的咖啡挺苦的,和我的人生一样苦。

要是能记得加糖就好了。

像是辛德瑞拉那般。

🔲 ☆

パレード (Parade 游行)—— 请不要忘记我孤身一人的盛装游行。

このまま夜が明けたら,
若就这样迎来黎明,

乾かないように想い出を,
为了不让这份回忆淡去,

失くさないようにこの歌を,
为了不让这首歌荡然无遗,

忘れないで もうちょっとだけでいい,
请你不要忘记 再铭记一小会儿就可以,

一人ぼっちのパレードを,
请不要忘记我独身一人的游行。

Yorushika (n-buna & suis), パレード

「パレード」一词来源自英语中的 Parade,但和英语中的 Parade 带有反抗的游行一意所不同的是,日语中的パレード一词是更加娱乐化的,就像迪士尼乐园中的游行一样,美好的,盛大的,快乐的东西。

而在 Yorushika 的专辑「だから僕は音楽を辞めた (所以我放弃了音乐)」之下,如此盛大的游行,却是通往死亡的道路。

我们常去描写死亡的结果,死亡的原因,却缺少人去描写这美丽而盛大的凋亡。

如果死亡是必然的话,那一定要让这过程显得华丽一点吧。

游行嘛,本身是更多人胸怀共同的志向,有了想法才会去干的事情,如此这样,孤身一人的游行才更显得可贵。

有人说 「间奏的小提琴一出,就满是灿烂的悲伤了」,相较于悲伤本身,我更愿意说,小提琴相较于悲伤,更应该是灿烂。毕竟,灿烂的事物变得凋亡更令人心碎啊。

纵使心中有万马奔腾,蓦然回首,却还只是孑然一身。
正因有这这样灿烂的回忆,如今的人生才显得如此不堪入目。
有着如此回忆的我,又怎能忘掉这些。
与生活的抗争显得无力而可悲。
嘴上说着想死的人,其实内心只是想被爱而已。

即便是这份没有你在的孤独啊,也化作写在纸上抹不去的回忆,化作绝不会遗失的回忆的歌。
就算持续着如此样的游行,也依然无力改变什么,只望你能记住我。


n-buna 在 「だから僕は音楽を辞めた」一专的特典信纸上关于 「你的笔尖一定寄居着神明大人」这样说:

每个创作者都是受到神明所眷顾的,笔下的一切都是有着神明的力量。

作者本身不是神明,作品本身才是神明所在。

开始专辑的时候,Amy 的人生还有一年,当他写下 「パレード」的时候,生命只剩下那一小段时间了。

当然,我们可以说 Amy 的死是必然的结局,是 n-buna 心中的另一个自己为了作品的献身,也就是所谓的 「艺术至上主义」。

那,该如何去面对死亡呢?

不同的人或许会有不同的答案吧。

有的人会写出那些玩世不恭,仇恨世界给了自己悲惨命运的句子。

而在「パレード」中,选择死亡如同人去选择呼吸一样自然,带着宗教一样的宿命感,我们当然可以简单的归于「艺术至上主义」,但是回看歌曲本身,Amy 选择死亡一定是经过深思熟虑的,一遍遍在脑中预演着,算尽了一切的可能,才会有着如此般的执念。

如同在「八月、某、月明かり」中一样,如果不是没有解决的办法,谁会愿意去选择死亡。

于是 Amy 选择在孤身一人的旅途中寻找离天堂最近的地方,写下书信,喝下花绿青,跳海自尽,更显着悲壮和坚定,更有对生命不幸的妥协。

宿命或许终究还是击败了他,写下的诗歌是他留在这世上最后的印证了。

如此宏大的、孑然一人的游行下,死亡的道路和死亡本身也显得没有那么恐怖了,Amy 像是看到了死亡的美丽。

再等一下就好,

请让我继续这孤身一人的盛装游行。
请不要忘记我孤身一人的盛装游行。

以上,
2024 年 5 月 27 日。

🔲 ⭐

Shut Up and Take My Card - 奇特的大陆银行卡外刷小 Tips

Suicard

如你所见,这是一篇对大陆银行外刷的情况的简单介绍。
顺带介绍一些奇奇怪怪但是莫名在境外很好用的借记卡。

于是,你登上了前往日本的飞机

然后发现只带了工商银行的银联复合借记卡,还把所有的出行资金在工商银行系统购买了日元现汇。

全剧终。

中国工商银行作为你国最大的银行 (同时也应该是最抠门的),新发行的银联复合借记卡,均是纯芯片卡(磁条未写)。
在日本和东南亚等国家,ATM 尚未支持纯芯片卡,就会无法取款。 工商银行的银联借记卡不支持外币原币种入账,只能扣人民币户口。

经验与教训:永远不要相信卡组织,尤其是银联宣称自己在海外的网络有多发达,无论如何也要备好现金,或者一张确认可以提款的银行卡。

所以,言归正传,现在让我们简单提及一些概念。

现钞与现汇

顾名思义,现钞就是钞票,cash,也就是现金账户。
现汇也一样,remit,为以外币表示的各种支付凭证。

对于大陆银行,现汇/现钞是你在涉及外汇业务时必须清楚的两个点,我们简单展开说一下。

功能 现钞 现汇
大陆银行柜面取/存款
大陆银行汇出到海外
外币信用卡使用外币还款 大部分银行可以使用现钞 大部分银行不允许使用现汇
海外银行汇入
人民币购汇价格 较高(对小币种) 较低 (对小币种)
人民币结汇价格 较低 较高
持卡是否能在海外以原币种提款/消费 取决于银行,绝大部分不支持 取决于银行,绝大部分不支持
是否可在境内银行跨行划转

对于绝大部分银行,在现钞和现汇之间转化会收取一定的钞汇互转费,有一些银行不存在该费用(如:厦门国际银行)。

对于绝大部分银行的核心系统来讲,对于外币而言,现钞和现汇是区分的,也存在一些银行系统内并不存在现钞现汇概念,即同时具有钞和汇的性质,也就是钞汇合一。
对于大陆银行而言,所有人民币账户都是钞汇合一账户。

提款,结售汇与外汇管制

众所周知,大陆存在外管局,于是就有了外汇管制。

作为一名中国大陆公民,你应该知道:

  1. 在每个自然年,你可以持身份证或其他有效证件(如未成年使用户口本),以便利化(无须提交实际证明材料)的形式,在各大银行购买 50000 USD 等额人民币的外汇。
  2. 在每个自然年,你可以持有效身份证件,以便利化形式售出 50000 USD 等额的外汇。
  3. 在每个自然年,你可以银行卡,在海外每日提款 10000 CNY 等额外币,每年可提款 100000 CNY 等额外币,本人名下所有银行卡均共享该额度。
  4. 每次出境时,携带外币现钞总金额在等值 5000 美元以上,须到银行开具《外币携带证》。

对于结售汇的便利化额度,如果超过额度,银行会直接拒绝你的结售汇请求。

当然,如果你有合理的材料,是可以超过便利化额度的(需要提交到外管局审核),每年购买超过 50000 USD 的外汇的,但是对于只是出国旅游的你和我而言,这个显然是不可能的。

而银行卡提款这条比较麻烦,一般是在外管局和银行的日切时间才会更新,如果当年超过了 100000 CNY 限额,会导致当年和次年的取款额度被禁止使用,你就无法持卡在海外提款了。

所以,以下这些形式都会耗费你的便利化/提款额度:

  1. 在国内银行 App 渠道购买 100 USD 现汇 (便利化购汇额度 -100 USD)
  2. 持国内银行发行的人民币单币卡,以卡组织汇率扣除卡内人民币账户在美国取现 100 USD (取现额度 -100 USD)
  3. 持国内银行发行的外币信用卡,在海外消费完手动以外币购汇形式还款 (便利化购汇额度–)
  4. 在国内银行电子渠道购买 100 USD 现汇,并转入国内银行发行的外币借记卡,在海外 ATM 提款 100 USD (便利化购汇和取现额度双双扣除 100 USD)

以下的形式不会耗费你的便利化/提款额度:

  1. 持国内银行发行的人民币单币卡,以卡组织汇率在海外商户的 POS 消费外币
  2. 持国内银行发行的外币信用卡,在海外消费完直接银行转人民币出账单还款
  3. 用微信/支付宝在海外商户消费

所以,对于任何海外商户,我们优先选择刷卡的形式进行消费,如果实在不能刷卡,才推荐使用现金的方式进行支付。

一卡一户、一卡多户、无卡有户

中国大陆和海外银行户口最大的差别大概就在这里。

在中国大陆,往往在开户的时候银行会给你一个卡,我们这里称呼他为凭证。
存折、银行卡都是凭证的一种。

对于银行而言,凭证并非是账户,而是一个到 link 到账户的钥匙。

在中国大陆,银行卡和账户基本遵守一卡一户(也存在多卡一户)的对应情况。 同时,银联作为大陆银行的行间网络之一,也为每个银行发行的银联卡分配了一个唯一的 BIN 标识符(银行卡号前 6-8 位)。

于是,你的银行卡号(也就是凭证号),就可以作为账户号在银行系统中成为账户的标识符。

人行的支付系统里也通过银行卡号的 BIN 码来确认你的账户开户行是哪个银行。

在绝大部分大陆银行的系统(专业一点讲叫接入人行二代支付系统的核心记账)里,银行卡号和账户号都可以作为转入账号使用。 当然,银行也并没有取消账户号的概念,在工商银行的手机银行里,你可以看到一个基本账户号,这个就是账户号。

中国银行的个人银行基本账户号为 12 位。

在海外的银行,由于不存在银联这样的行间网络,同时也不一定遵守一卡一户的原则。 一般卡号是不能够作为账户号使用的。

当然,也存在卡组织的转账网络,例如 Visa Direct,暂不在这篇文章的讨论范围中。

无卡支付、微信和支付宝

微信和支付宝的海外消费

当然,在境内消费有微信和支付宝,在海外依然也有微信和支付宝,多在旅游景点/商圈出现。

微信和支付宝是典型大陆第三方电子钱包,我们在这里统一称为非银第三方支付机构。

非银第三方支付机构通过网联清算直连二代支付系统,无卡交易一般的模型是这样的:

  1. 非银支付机构连接网联清算,通过银行和非银支付机构签约的快捷支付协议,请求银行打款
  2. 网联清算请求银行打款
  3. 银行以你账户的名义,向非银支付机构在人行/人行指定的商业银行的备付金账户进行打款
  4. 完成交易

所以我们可以看到,实际上完成交易的不是卡组织,而是银行账户。

某些银行的账户,即使凭证不是卡,依然可以绑定快捷支付。 如建设银行的结算类型存折。

所以在海外,微信/支付宝这类机构都是通过自己的汇率,将外币账单转入人民币,并通过网联清算收款的。

贯彻朴素的价值观,我推荐在支付前查询汇率,哪个汇率低用哪个。

无卡支付和 3DS

3DS 全称 3-D Secure。

为了保证信用卡和借记卡在线无卡支付时的安全性,部分商家和收单平台和发卡银行会要求进行 3DS 验证,而这个特性需要银行和卡组织进行支持,主要通过短信验证码、手机 App 授权、邮箱验证码等方式实现身份验证。

如果银行不支持 3DS 或者用户没能通过 3DS 验证,交易将会失败。

对于大陆发行的银联卡,3DS 是由银联进行进行验证的,基本所有银行的银联卡都支持 3DS。

所以,如果在海外进行消费,是否支持 3DS 是非常重要的一点。

如果没有完成 3DS 验证,如果发生盗刷,盗刷的资金将由收单平台和商家承担。
如果通过了 3DS 验证,如果发生盗刷,资金将由发卡银行进行偿付。
我们把这个过程称为责任转移。

大陆银联的无卡消费

银联在海外也有无卡消费情况,一般出现在你在海外网购东西时。

例如某知名支付网关 Stripe 就支持银联的无卡交易。

大陆银联的借记卡无卡交易时,不校验你输入的 CVV 和有效期,强制跳转到银联在线支付网关(无需银行发起适配,由银联负责,大陆所有银联借记卡全部支持),也就是银联风格的 3DS 实现,由银联短信到你在银行预留的手机号来完成验证。

大陆银联的信用卡无卡交易时,由商家/收单平台/发卡行三方决定是否跳转到 3DS 完成验证。

外币支付和单双标卡

外币转换手续费 FTF 和动态货币转换 DCC

银行和卡组织作为商业组织,当涉及到记账货币和账户实际货币不同存在转换时,一般会对持卡人收取一定的转换手续费,称为 FTF (即 Foreign Transaction Fee)。

Notice:
对于 FTF 的收取情形,不同的银行存在不同的看法。 大陆银行一般认为:发生的非卡基准货币计价的交易,均符合 FTF 收取情况。 某些银行仍会在海外进行卡基准货币交易时,扣取 FTF。 如此进行操作的银行例如 ZA Bank,在港外进行以 HKD 计价的交易时,仍会收取 FTF。

国内发行的银联卡基本免除 FTF 费用。 双标卡可能存在 FTF 费用。 外币单标卡一般免除 FTF 费用。


DCC 是指 Dynamic Currency Conversion,即动态货币转换。是由商户收单平台收取的费用。

目前 Visa 和 MasterCard 认可 DCC 并允许该操作,其他卡组织(银联、美国运通)禁止 DCC。

DCC 的原理是,在商户使用当地货币计价时,由商户的收单平台提供货币转换服务,将当地货币的计价转换为持卡人的卡使用的基准货币进行计价。

信用卡的消费并不是实时入账的,实际对于本币的消费金额只有等到入账才能看到,如果货币的汇率波动特别大,就会存在汇率风险,DCC 服务就将这个汇率风险转嫁给了提供 DCC 的服务的平台,平台也会收取一定量的 DCC 手续费来 cover 汇率风险,一般为 2.5% ~ 8%。

正常情况下一个成熟的货币汇率是不会有很大的波动的,所以一般而言 DCC 就成了商家和第三方公司的敛财工具。


我们来简单比较一下持大陆银行 Visa 美元信用卡在以 HKD 计价的商户进行消费的情况。

  • 我们不选择 DCC
    1. 商家以 HKD 计价,向卡组织请 HKD 款项
    2. Visa 将 HKD 款项转换为 USD,计入信用卡账户,期间会收取 FTF 费用
    3. 你以美元或者由银行转换为人民币出账后以人民币还款
  • 我们选择 DCC
    1. 商家以 HKD 计价,由收单平台将费用转换为 USD,向卡组织请 USD 款项
    2. Visa 直接将 USD 款项计入卡组织账
    3. 收单平台按照约定汇率(高于你 DCC 的实际汇率)将 HKD 款项打回给商户
    4. 你以美元或者由银行转换为人民币出账后以人民币还款

正常情况下货币转换是在卡组织发生的,而有 DCC 的交易中,货币转换是发生在 DCC 环节。

DCC 的交易过程,商家是有利率优惠的(收单平台会以高于 DCC 的实际汇率给商户结款),所以 DCC 是对商家有利益的,因此境外商家都会推广 DCC。

所以,我们优先选择以商户实际标价币种结算,一般是可以得到最好的汇率情况的。

人民币借记卡和原币支付

在中国大陆,目前由人行要求,所有绑定人民币个人结算账户的借记卡,必须是由颁发人民币清算牌照的卡组织完成。目前这个卡组织只有银联和杭州连通(也就是美国运通在华的合资公司)还有尚未实际目前已经发卡了的万事网联(万事达 MasterCard 和网联清算的合资公司)持有。

于是,目前国内发行的人民币借记卡均为人民币为基准货币的银联/美运人民币借记卡。

万事网联的人民币借记卡情况比较特殊。目前仅有信银一家发行,并且是一张比较特殊的双币种 (人民币/美元)借记卡。在以人民币计价的交易中,正常的扣取人民币账户,但是对于非人民币本币交易,MasterCard 会把交易货币转为美元后直接入账,如果账户美元余额不足,就会交易失败。我们这里暂时把万事网联的人民币借记卡视为一个外挂了人民币户口的美元单币借记卡看待即可。

更新 (2024.10) 信银通过 OTA 方式为万事网联借记卡添加了多币种记账,对于美元、港币、英镑、澳大利亚元、新加坡元、欧元、日元均可使用原币支付,但是依然不支持自动购汇。 邮政储蓄也同时期在部分试点区域发行了万事网联借记卡,为人民币/美元双账户,但支持海外消费时自动购汇美元扣款,暂不支持在线支付。

对于绝大部分借记卡而言,所有外币支付都是通过卡组织将外币转换为基准货币,然后扣款。于是,在大陆的绝大部分银联和美国运通借记卡而言,在境外的付款/提款只会透过卡组织转换汇率后扣款到人民币户口,卡上外挂的所谓 “外币子账户” 是作为仅储蓄账户存在的,不能参与到实际的支付任务中。我们这里简单的把这种模式概括为人民币单币种卡。

对于一小部分银行的银联人民币借记卡,因为银行的外币系统和银联进行了对接,在境外的付款/提款会优先扣除银行的对应外币子账户余额,若扣款失败才会使用卡组织汇率转换为人民币扣款,逻辑如下:

  1. 持卡人在境外商户消费 100 GBP,如果使用借记卡,此时银联会超出冻结 115%,即 115 GBP
  2. 银联查询持卡人 GBP 现钞户口,若现钞账户有 100 / 115 GBP 足额,扣除 GBP 现钞账户,交易完成
  3. 银联查询持卡人 GBP 现汇户口,若现汇账户有 100 / 115 GBP 足额,扣除 GBP 现汇账户,交易完成
  4. 银联将 100 / 115 GBP 按照汇率转换为人民币,若人民币账户有等额人民币,扣除人民币账户,交易成功
  5. 如果上边都不满足,则交易失败。

在这种情况下,交易最后会使用人民币尝试进行货币转换完成交易,人民币就是这里的基准货币。

我们简单的把这种模式概括为人民币多币种卡。

多币种借记卡可以进行囤汇后取汇/消费外汇的能力,对于在海外长期居住者来讲很有用。

美国运通人民币卡目前均为人民币单币种卡,包括信用卡。

对于中农工建交邮六大行和 99% 的其他银行而言,发行的银联卡均为人民币单币种卡。

中国银行的 BIN 621669 的银联借记卡(例如 长城环球通多币借记卡 / 长城冰雪借记卡 均为该卡头)和汇丰银行中国的借记卡均为人民币多币种卡。

双标信用卡

双标信用卡是银联早期网络在海外布局较差,过渡时期的产物。一般是 银联 + (Visa/MasterCard/AMEX/JCB)的卡组织形式出现,卡头均为外卡组织卡头。 目前人行已经不予批准新的双标信用卡发行,并且旧的双标信用卡基本只带磁条。

中国银行冬奥主题白金卡

中国银行在北京 2022 冬奥会期间通过特批方式,发行了一批银联 + Visa 的含芯片双标信用卡,芯片实现了一卡双应用 (Visa + 银联),现已停发。 可以正常以贴卡方式在境内银联和境外 Visa 交易,如果你手里有一张这个卡的话,先偷着乐吧。

非常不推荐使用仅带磁条的任何信用卡,磁条信息不加密,盗刷风险较高。

并且由于没有芯片,在部分已经淘汰磁条的地区交易非常麻烦。还不能够以非接的形式交易,速度会比贴卡慢很多,并且尚不支持乘坐公共交通。

由于外卡组织要求,在海外的交易一般只能够通过外卡组织,如果透过银联完成清算的话,外卡组织抓到了会罚商户和收单平台。

但一般双标信用卡可以绑定至手机 Pay 方式进行支付,但是绑定至手机 Pay 后,会被视为银联信用卡,手机 Pay 仅包含银联应用。

双标信用卡一般是银联为人民币单币结算,外卡组织为美元单币结算,并一般卡会带有 FTF。

真假多币信用卡

所以,让我们回到外币信用卡。

市面上很多银行都声称自己的外币信用卡是全币种,但实际上来看,这种全币种信用卡实际上是伪全币信用卡。

实际上讲,这种信用卡本质上是 USD 单币种信用卡,但是银行免除了 FTF 费用。在交易非 USD 币种的时候可以 0 手续费。

但是实际上,使用非 USD 币种例如 HKD 的消费,要透过卡组织先完成 HKD -> USD 的转换,再通过银行完成 USD -> CNY 的转换,实际的交易进行了两次币种转换,实际汇率并不一定有想象中理想。

Notice:
伪全币信用卡不一定意味着汇率较差,相反,全球 80% 左右的外汇交易都是其他币种和 USD 的交易,透过 USD 完成交易实际上可能可以取得更好的汇率,可以在交易前进行查询。

而真多币信用卡一般是卡组织直接以实际支付币种向银行请款,由银行完成 USD -> CNY 的转换。

当然,对于银行没有覆盖到的币种,依然会以卡组织汇率先转换为卡的基准货币,再以基准货币记账。

卡组织的外币汇率转换

Visa / MasterCard 的汇率实时更新,以消费时汇率为准。

银联的汇率是在工作日当天进行一次更新,法定节假日不进行更新。所以银联的汇率在境外货币相较人民币狂涨的时候会好看一点。

AMEX 美国运通的汇率数据不对外公开,但一般而言美国运通人民币卡的汇率会略优于银联。

借记卡的冻结比例

持国内银行发行的借记卡在境外交易时,为避免汇率/盗刷风险,一般银行会以超出一定额的比例进行冻结。

如果卡内余额不足以完成超出冻结,就会拒绝交易。 一般 ATM 取现不会超出冻结。

对于大陆的银联借记卡,这个比例一般是 115%。

有趣的小事实

不带钱包的手机 Pay

手机 Pay 通过和卡组织和银行的合作,通过令牌化技术为设备颁发一个唯一的设备卡号(与实体卡号不同,设备卡号对于本绑定中的所有交易唯一),再透过 EMV Contactless 完成交易。

对于大陆发行的银联卡,绝大部分银行都已经支持手机 Pay,银联中国通常以银联手机闪付这一品牌作为手机 Pay 的实际商标推广(一般包含 Apple Pay / Mi Pay / Huawei Pay / OPPO Pay / Vivo Pay 等,某些品牌会对支持银行进行阉割,通常是否接入银联闪付平台以 Apple Pay 支持情况为主),透过银联手机闪付品牌下发设备卡号时,按照银行支持情况会颁发不同的设备卡卡 BIN。

大部分银行都会直接透过银联的公用卡头 (即查询卡 BIN 发行者为 CUP Token)来完成手机闪付,透过这个卡头将无法进行 ATM 提款等操作,但正常的消费是可以完成的。

少部分银行(如中银、工银、建银)使用本行的卡头完成手机 Pay 设备卡颁发。但是对于中银支持多币记账的借记卡而言,因为设备卡头不支持多币记账,使用手机 Pay 在境外交易不能享受多币记账。

由大陆发行的外币卡 (Visa / MasterCard / AMEX / JCB 等)目前尚不支持手机内置的手机 Pay 完成交易。

但是对于中国银行和工商银行发行的外币信用卡,在 Android 设备上可以透过手机银行 HCE 卡模拟功能,完成外卡(对应闪付设备卡)的手机模拟,体验尚可。

卡组织和他们的互惠协议

AMEX 与日本 JCB 有互惠协议,持 AMEX 的卡在日本可以走 JCB 网络进行消费。

同样的,银联与 Discover (探索卡)有互惠协议,在北美地区持银联卡可作为 Discover 使用(实际体验比较糟糕,主要是北美地区基本不验密,而银联借记卡交易基本验密),Discover 可在大陆作为银联使用。

美国银行和中国建设银行有着互惠协议,中国建设银行的 Visa / MasterCard 理财卡(旧双标乐当家和新版外币借记卡)在 BofA 的 ATM 提款可以免手续费。

所以,你登上了返回大陆的飞机

然后在国内疯狂地开卡。

中国银行

你国全球服务覆盖最好的银行。

汇丰也就看个乐,真环球银行还得看我大中银。

中国银行的个人银行借记卡服务是所有银行里最有意思的,我们在这里简单介绍两张借记卡。

长城冰雪借记卡

长城冰雪借记卡

类型 详情
学名 长城冰雪借记卡
卡 BIN 码 621669
FTF 0%
卡组织 银联 - 借记卡
记账币种 人民币多币种借记卡 - 支持美元等 19 种币种原币支付
超出冻结 115%
年费 不适用
线上支付 可用,通过银联渠道
3DS 支持情况 支持,由银联在线支付网关进行验证,向柜面预留手机号发送验证码

这张卡支持 19 种币种原币支付 (美元、欧元、日元、港币、英镑、加拿大元、澳大利亚元、瑞士法朗、新加坡元、澳门元、韩国元、丹麦克朗、挪威克朗、新西兰元、菲律宾比索、俄罗斯卢布、瑞典克朗、泰国铢、南非兰特),是目前国内支持外币币种最多的人民币多币种借记卡。

目前本卡每月免除第 1 笔境外本行、跨行 ATM 取现费,在境外取现应该是最好用的那一批。

长城跨境通借记卡

长城跨境通

长城冬奥 Visa 借记卡

长城万事达世界借记卡

类型 详情
学名 长城跨境通借记卡
Visa 版本卡 BIN 码 Gold 400221 / Platinum 400292 / Signature 400515
MasterCard 版本卡 BIN 码 Gold 529774 / Platinum 538113 / World 533228
FTF 0%
卡组织 Visa / MasterCard - 外币借记卡
记账币种 美元 美元/英镑 双基准多币种借记卡 - 支持欧元、日元、港币等 19 种币种原币支付,不存在人民币账户
超出冻结 102%
年费 不适用
线上支付 可用,通过 Visa / MasterCard 渠道
3DS 支持情况 支持,由中行借记卡部进行验证,向柜面预留手机号发送验证码

笔者的第一张外币借记卡,估计也是很多人的第一张外币借记卡。

这张卡支持 19 种币种 (美元、欧元、日元、港币、英镑、加拿大元、澳大利亚元、瑞士法朗、新加坡元、澳门元、韩国元、丹麦克朗、挪威克朗、新西兰元、菲律宾比索、俄罗斯卢布、瑞典克朗、泰国铢、南非兰特),是目前国内支持币种数最多的外币借记卡。

具体详情可以参阅 跨境通 VISA/万事达借记卡介绍与网上支付体验 - poplite.xyz。这里不再赘述。

中国银行的外币借记卡拒付率较低,基本可以通刷。

Visa 冬奥款目前在大部分地区已经停发。

在中银的某次系统升级之后,本卡已经平滑升级为双基准(美元和英镑)多币借记卡。

目前的扣款模式是: 单一账户整额扣款。扣款的顺序是:当地货币现钞:当地货币现汇;美元现钞;美元现汇;英镑现钞;英镑现汇。

中行信用卡

中行的信用卡产品和借记卡相比就显得乏善可陈了,中行一切宣称全币种的 V/M 信用卡都是伪全币信用卡,本质上是 0 FTF 的美元信用卡。

中行的卓隽留学信用卡是以卡对应地区币种为基准货币的 V/M 信用卡,对于长期生活在该地区的留学生等体验尚可。

中行的 JCB 信用卡以 JPY 为基准货币,在日本实际消费效果尚可。

中行目前还没有发行 AMEX 人民币信用卡。

中国银行支持外币消费直接转换人民币出账单,不需要消耗便利化结汇额度来购买外汇还款。

中国银行信用卡客户可以在柜面申领 e-token (动态口令)来完成 3DS 验证,可以在境外避免遇到短信验证码收不到的情况。

工商银行

一般来讲,工商银行人民币对外币的汇率比中行稍优惠。

工行信用卡

工商银行的 V/M 多币均为真多币信用卡,支持十种外币入账 (美元、欧元、港币、英镑、日元、新加坡元、加拿大元、澳大利亚元、瑞士法郎和新西兰元)。

工商银行的 JCB 信用卡为 JPY 单币种。

工行目前发行的 AMEX 人民币信用卡均以人民币出账。

工商银行不支持外币消费转换人民币出账单,对于外币欠款,不需要消耗便利化结汇额度来购买外汇还款。

工行借记卡

工商银行的银联借记卡均为人民币单币种,并且一般磁条没有写数据,不支持在境外使用磁条交易 (如日本等国无法取现)。

牡丹国际借记卡(万事达品牌)

牡丹国际借记卡(万事达品牌)

类型 详情
学名 牡丹国际借记卡(万事达品牌)
卡 BIN 码 519928
FTF 1.1%,仅在交易非卡支持的 10 币种时扣除
卡组织 MasterCard - 外币借记卡 (工商银行信用卡部发行)
记账币种 美元多币种借记卡 - 支持欧元、日元、港币等 10 种币种原币支付,有人民币账户但无法实际支付
超出冻结 100%
年费 10 CNY
线上支付 可用,通过 MasterCard 渠道
3DS 支持情况 支持,由工行信用卡部进行验证,向柜面预留手机号发送验证码

虽然属于借记卡但归信用卡卡部发行,所以这张外币借记卡没有汇户只有钞户。

实际消费体验会比 BOC 的外币国际借记卡略好一点,银行拒付概率几乎为 0,也可以累计信用卡积分。

所有币种的消费都是 100% 的冻结,卡内设有人民币账户,但只可用于 ATM 存取款和结售汇使用。(1. 具体是否可以使用人民币账户消费取决于当地发卡分行卡部设置。2. 因为是信用卡部发行,卡内存款为信用卡预缴款,异地存取款可能收费。)

在消费这张卡所不具备的币种账户时会通过美元进行转换并扣除 1.1% FTF,而如果消费币种为 10 支持币种但户里没有足够余额的话会直接交易失败不回落到 USD 账户。

另外,另外一张红色的 Visa 牡丹国际借记卡和这张卡有较大差别,主要在那张卡仅为 USD 单币借记卡,并含有 1.0% 的 FTF。

目前来看,该卡仅有北京、上海、深圳、成都、沈阳等城市有少部分网点发行,相对而言,申办难度较大。

建设银行

建行信用卡

建设银行的 V/M 多币比较特殊,本质上是 USD 单币种卡,但是如果选择了转换人民币出账,那则会以建行汇率转换支持的自营币种的交易。

例如,在境外消费 100 EUR 以外币还款时,会以卡组织汇率转换 100 EUR 到 USD 出账,
但如果以人民币还款,则会以 CCB 自营汇率转换 100 EUR 到 CNY 出账,不会消耗便利化额度。

建行目前发行的 AMEX 人民币信用卡均以人民币出账。

建行 EMV 借记卡

EMV 国际借记卡 万事达版

类型 详情
学名 万事达 EMV 普卡
卡 BIN 码 517442
FTF 1.95%,非美元交易时扣除
卡组织 MasterCard - 外币借记卡
记账币种 美元单币种借记卡
超出冻结 100%
年费 10 CNY
线上支付 可用,通过 MasterCard 渠道
3DS 支持情况 尚不支持

笔者在 2024 年 5 月成功申请并核发了本卡,应该是北京首张 EMV 万事达持卡人,在这里向开户行的工作人员致谢。

本卡比较特殊,是一张由建设银行发行的美元单币种借记卡。 没有什么出彩的地方,如果硬要是说的话那就只有印制姓名了。

本卡的账户交易顺序是:美元现钞;美元现汇。

如果是扣除美元现汇的话,本卡会先将卡内的美元现汇自动转换为美元现钞再完成交易。

根据建行和 BofA 的互惠协议,本卡在北美的 BofA ATM 上应当可以享受双方手续费均互免(存疑,笔者拿到本卡后尚未实际在 BofA ATM 测试)。

如果常住美国,可以开一张本卡来进行 ATM 免费提款。

此外,本卡还存在 Visa 版,和 MasterCard 版大部分地方情况一致,但是不能进行网上三要素交易,不推荐开 Visa 版本。

当然,就建行当前的推广力度来看,该卡颇具收藏价值。

广发 & 兴业 & 中信银行的 AMEX 人民币借记卡

WIP

中银富登村镇银行和他的借记卡

WIP

招行和某些其他商业银行的信用卡

WIP

🔲 ☆

Markdown Syntax Guide

Sample article showcasing basic Markdown syntax and formatting for HTML elements.

This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.

Headings

The following HTML <h1><h6> elements represent six levels of section headings. <h1> is the highest section level while <h6> is the lowest.

H1

H2

H3

H4

H5
H6

Paragraph

Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.

Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.

Blockquotes

The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element, and optionally with in-line changes such as annotations and abbreviations.

Blockquote without attribution

Tiam, ad mint andaepu dandae nostion secatur sequo quae. Note that you can use Markdown syntax within a blockquote.

Blockquote with attribution

Don’t communicate by sharing memory, share memory by communicating.
Rob Pike1

Tables

Tables aren’t part of the core Markdown spec, but Hugo supports supports them out-of-the-box.

Name Age
Bob 27
Alice 23

Inline Markdown within tables

Italics Bold Code
italics bold code
A B C D E F
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ultricies, sapien non euismod aliquam, dui ligula tincidunt odio, at accumsan nulla sapien eget ex. Proin eleifend dictum ipsum, non euismod ipsum pulvinar et. Vivamus sollicitudin, quam in pulvinar aliquam, metus elit pretium purus Proin sit amet velit nec enim imperdiet vehicula. Ut bibendum vestibulum quam, eu egestas turpis gravida nec Sed scelerisque nec turpis vel viverra. Vivamus vitae pretium sapien

Code Blocks

Code block with backticks

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<title>Example HTML5 Document</title>
	</head>
	<body>
		<p>Test</p>
	</body>
</html>

Code block indented with four spaces

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Example HTML5 Document</title>
</head>
<body>
  <p>Test</p>
</body>
</html>

Code block with Hugo’s internal highlight shortcode

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Example HTML5 Document</title>
</head>
<body>
  <p>Test</p>
</body>
</html>

Diff code block

1
2
3
4
5
[dependencies.bevy]
git = "https://github.com/bevyengine/bevy"
rev = "11f52b8c72fc3a568e8bb4a4cd1f3eb025ac2e13"
- features = ["dynamic"]
+ features = ["jpeg", "dynamic"]

List Types

Ordered List

  1. First item
  2. Second item
  3. Third item

Unordered List

  • List item
  • Another item
  • And another item

Nested list

  • Fruit
    • Apple
    • Orange
    • Banana
  • Dairy
    • Milk
    • Cheese

Other Elements — abbr, sub, sup, kbd, mark

GIF is a bitmap image format.

H2O

Xn + Yn = Zn

Press CTRL + ALT + Delete to end the session.

Most salamanders are nocturnal, and hunt for insects, worms, and other small creatures.

Hyperlinked image

Google


  1. The above quote is excerpted from Rob Pike’s talk during Gopherfest, November 18, 2015. ↩︎

🔲 ☆

八月、某、月明かり(八月、某地、月光皎明)—— My whole life was saved by Rock & Roll.

人生、二十七で死ねるならロックンロールは僕を救った
人生,若是在 27 岁就死掉的话,那么是摇滚乐救了我

Yorushika (n-buna & suis), 八月、某、月明かり

那天因為犯了些粗心的錯誤而被店長罵到臭頭,但我那時一直想著別的事情。

羅伯 • 強森、吉米 • 亨德里克斯、布萊恩 • 瓊斯和吉米 • 莫里森,

這些當時很棒的音樂家,都是在 27 歲逝世的。

還有 27 俱樂部這樣觸霉頭,但卻挺有名的說法。

在我臨死之際,還會剩下所謂「這樣就滿足了」的事物嗎?

不用說 27 歲,如果壽命就這樣被限定著時,

那還不如拋開一切,全心全意地做音樂。

就這樣,如果那件事成了不可能,也只能繼續現在的生活,

到死都停滯不前,漫無目的地過著毫無意義的每一天了吧。

Yorushika (n-buna & suis), 八月、某、月明かり - From Youtube

27 Club

27 岁俱乐部,来自于一个奇怪的传言,有许多伟大的、富有才华的摇滚音乐人在 27 岁那年出乎意料的死去。

如果人生在 27 岁就会死去的话,那还需要什么别的呢?做好自己想要做的东西就可以了。逃避现实什么的,也无所谓了吧。

八月、某地

八月一直以来都是一个特别的月份。至于为什么特殊嘛?

那个八月的暑假格外的短,大概是因为那个暑假末尾被迫的强制补课吧。

八月,从教室向窗外看去,夏天的落日总是不同的。阴天下的落日是冷淡的,大风过后落日骤亮,是暖调的,雨后和烈日的夕阳是清爽的。

操场上也有学生在打球,似乎是八月末最后一丝青春感了。

那大概是我每天为数不多能发自内心开心的时候了吧。

等到夕阳落下,夜幕降临,教室里也会有一种阴沉、疏离的气氛再次出现。 如同机械般的再次投入到什么所谓的 “学习” 之中。

等到下了晚自习,走在回家的路上,独属于夏的微风吹过, 再次戴上耳机,站在十字路口上,等着绿灯亮起, 抬头只见朗朗月光,随机到了 「八月、某、月明かり」,听到那句:

何もいらない
什么都不需要

Yorushika (n-buna & suis), 八月、某、月明かり

突然觉得,

一切全都糟透了啊,快跑吧。

某地、月光皎明

初听 「八月、某、月明かり」 的时候,感觉副歌有一种奇奇怪怪的混乱感,匆匆忙忙的。

如同着急赶上回家的末班公交一样,总是感觉差一口气有话没说完。

现在一想,这应该就是 n-buna 的风格,也就是所谓的 —— 疾走感。

总体来看,「八月、某、月明かり」应该是一首相当愤世嫉俗的、偏激的、愤怒的歌。

简而言之介绍一下背景,「八月、某、月明かり」和同属专辑 「だから僕は音楽を辞めた (所以我放弃了音乐)」 的歌,都是由一名虚拟的音乐家角色 “Amy” (存在翻译 Eimy)创作,他怀才不遇、身患绝症,如果能用一个历史人物比喻成 Amy 的话,应该是屈原吧。

夏日未至,咖啡厅内,Amy 第一次遇到了 Elma,她同他一样,一个音乐家,于是第一眼之后就喜欢上了她。

在他 27 岁那年,八月末尾,他仿照自己的音乐,抛下 Elma,喝下花绿青(一种很美丽的、绿色的、剧毒的颜料)跳海,独自死在旅程中。

回到主题吧,在一句 “什么都不需要” 之后,就进入了吉他和鼓上气不接下气的演奏之中。

自行车上的飞奔

我一直是认为「八月、某、月明かり」这首歌应该是骑着自行车,在大街上飞奔的时候听的。

事实也是如此,这首歌的词曲作者 n-buna 也是这么想的。

便利店打工的过程中,因为和店长的不和,辞掉了这份工作。

把工作服洗完没晾干就装进纸袋里送回便利店之后,扭头骑着自行车一路狂奔。

初めてバイトを逃げ出した
初次逃掉打工

音楽も生活も、もうどうでもよかった
音乐也好生活也罢 怎样都无所谓了

ただ気に食わないものばかりが増えた
与本意背道而驰的事物不断增加

「八月、某、月明かり」、月明かり、自転車で飛んで
八月的某人 月光 自行车飞驶

東伏見の高架橋、小平、富士見通りと商店街
东伏见高架桥 小平 富士见大道与商店街

Yorushika (n-buna & suis), 八月、某、月明かり

骑着自行车飞奔,逃掉打工什么的,很反叛吧。

不想做的事情却会因为 “要填饱肚子” 这样残酷的理由不得不去做,所以就逃掉了打工。

这就是「八月、某、月明かり」中的第一个矛盾,即: 现实和理想的冲突。

生活一塌糊涂,令人感到无奈和厌烦。正因为生活如此糟糕,所以才要去发泄自己心中的愤怒。

摇滚的内核是反叛,反叛即为发泄。

但是「八月、某、月明かり」的发泄和例如真夜中的 「那些家伙们的校友会」 之类的歌也有不同 —— 「八月、某、月明かり」的发泄中明显带着一丝收敛,或者我们说的更简单一点,并没有说什么 “这个世界差极了,和这个世界爆了” 之类的话。

深究其原因,「八月、某、月明かり」中带着更多复杂的情感,不能用简单的一句 “和这个世界爆了” 带过吧。

我的人生只有糟糕透顶罢了

紧接着,进入副歌,矛盾继续延伸,即:我和理想的冲突。

最低だ 最低だ
糟糕透顶 糟糕透顶

僕の全部最低だ
我的全部都糟糕透顶

君を形に残したかった
想将你保存成形

想い出になんてしてやるもんか
怎样能将你化作回忆

Yorushika (n-buna & suis), 八月、某、月明かり

不断重复着什么 “糟透了” 之类的话,也应该是所谓摇滚中的反叛精神啊。

如果失去对于某物的逆反、宣泄,内心没有痛苦、挣扎的话就算不上是摇滚了吧,或许就是乐器音重的流行乐了。

初めて心を売り出した
初次售卖真心

狭心もプライドも、もうどうでもよかった
狭心也好自尊也罢 都已经无所谓了

気に食わない奴にも頭を下げた
即使对讨厌的傢伙也可放低身份

Yorushika (n-buna & suis), 八月、某、月明かり

自己和自己看不惯的现实也逐渐找不到差别,对自己也开始鄙夷起来,所以才把自己和理想交代给歌曲中的 “Elma”。

Elma 在这里如同是神明一般的人,是理想在现实中的化身。

但他也清楚,Elma 同他一样,也只是一个普通人,也有着贪婪的私心,自己也不能强求去改变她。

最低だ 傲慢だ 君もみんな貪欲だ
糟糕透顶 傲慢透顶 你也同大家一样 满是贪婪

君の全てに頷きたいんだ
我想点头赞同你的全部

そんなの欺瞞と同じだ、エルマ
可那样与欺瞒无异 Elma

Yorushika (n-buna & suis), 八月、某、月明かり

这样理想与现实,理想与自我,理想与平凡的三大冲突渲染了这整首歌的情感氛围,Amy 纠结于冲突之中,找不到宣泄的方法,使自己更加痛苦。

违背世俗去逃掉打工,却还是有着更多本意背道而驰的事物不断增加;
寄托于音乐之中,而无法相信纯粹的艺术之上;
将理想传递给 Elma,自己会身陷愧疚当中。

要顾虑的事情太多了,所以根本找不到发泄的道路啊。

有的时候觉得现实里的自己找到了答案,但追到最后,发现答案是牵强的。

相信宗教、相信世俗、相信摇滚、相信他人,无论是相信一切其他事物,亦或相信自己,似乎都不能让人心安吧。

所以是摇滚乐拯救了生命

而这个问题的答案,无论是「八月、某、月明かり」,还是专辑里的其他音乐,或许都没有对这个问题给出解答。

和 「だから僕は音楽を辞めた (所以我放弃了音乐)」 专辑中的其他歌曲相比,「八月、某、月明かり」更显得带着一丝狂风的感觉。

而这又可以回到开头所说的 —— 疾走感上。

乱花迷醉之夏

设身处地的想一下:

皎洁月光,凉爽夜风,路上街道无人无车,世界像是停下来了一样。

你一个人骑着自行车,飞驰在街道上,建筑和别的一切都闪过眼前的时候,

你还会想起还有这些烦恼的事情吗?

很明显,如此心旷神怡的时候,你会享受逃避烦恼的这段时间吧 —— 无论到底是多长,一分钟、一小时、一天都无所谓,需要的只是放松而已。

逃避作为宣泄来讲无疑是懦弱的、可耻的,改变不了什么,也传达不到什么,但究其根本,也是有效的、可用的。

即使你不相信什么 “爱能拯救世界” “现实什么的糟透了”,也总能在逃避中 have a break,选择去 “什么我都不管了”。

谁都有心累的时候,选择去逃避一下现实,或许也挺好的。

什么我都不需要

明明 Amy 要是能够信点什么的话,心里或许就不会这么拧巴和纠结了。

为什么所有的东西都要研究出个美恶善臭来,明明令人愤怒的事情永远都会存在,无法抹除。

看到过一个非常有意思的观点:

“尊严是我平庸身体的一剂毒药”

虽然无能的自己已经不能维护尊严了,但是还是不能允许他人、自己去践踏仅存的这一丝尊严。

在面对讨厌的人也要低下头颅的时候,Amy 也应该很难受吧。

尊严告诉我们说什么,人应该自由,应该平等,应该有高尚的情操。

但是回顾到现实,能做到的人又有多少呢?

如屈原一样壮烈投江的人并不多,大部分人都出于泥泞,而又和泥泞所不容。

或许是身体里寄身的神明促使我们这么干的吧。有着这样本应高洁的神明存在,所以我们才不能忍受如此泥泞的人、事和自我。

与其说是和外物的不对付,其实是有着污秽内心的我们没有去见神明的胆量吧。

人生,即为妥协的延续吧。要想活得痛快,一定要与自己和解啊。

逃避的道路,也一定是妥协一切什么金钱、爱情、宗教、社会、他人、自我、价值观和时代论,和自我和解的道路。

所以选择摇滚,不是在相信摇滚和反叛能带给我们什么,而是在摇滚的愤世嫉俗得到妥协和和解,走向自我逃避罢了。

所以,Amy 最终选择了逃避,放弃了思考,张开手,去迎接即将到来的死亡。

今も、愛も、過去も、夢も、思い出も、鼻歌も、薄い目も、夜霞も、
现在也好 爱也好 过去也好 梦想也好 回忆也好 哼唱也好 冷漠的眼神也好 夜光也好

優しさも、苦しさも、花房も、憂鬱も、あの夏も、この歌も、
温柔也好 苦痛也好 花房也好 忧郁也好 那个夏日也好 这首歌也好

偽善も、夜風も、嘘も、君も、僕も、青天井も、何もいらない
伪善也好 夜风也好 谎言也好 你也好 我也好 蓝色天花板也好 什么都不需要

Yorushika (n-buna & suis), 八月、某、月明かり

所以,什么都不用管了,

现在也好,爱也好,过去也好,梦想也好,回忆也好,哼唱也好,冷漠地眼光也好,夜光也好,
温柔也好,苦痛也好,花房也好,忧郁也好,那个夏日也好,这首歌也好,
伪善也好,夜风也好,谎言也好,你也好,我也好,蓝色的天花板也好,

就是现在,什么都不需要了,就让耳机里的摇滚乐,飞驰的自行车,眼前闪过的景物带着我。

“一切全都糟透了啊,快跑吧。”

我、「八月、某、月明かり」和那个友人 A

东亚人总是含蓄的。正如夏目漱石把 “I love you” 翻译成 “今晚月色真美” 一样。

「八月、某、月明かり」也是如此样无声的告白吧。

八月、某地,骑着车飞奔在街道之上,抬头,月色一定是美丽的。


最低だ 最低だ
糟糕透顶 糟糕透顶

僕の全部最低だ
我的全部都糟糕透顶

Yorushika (n-buna & suis), 八月、某、月明かり

日语里,最低だ(最差劲了)咲いていた(绽放着) 同音,真是个美丽的巧合啊。

说起来很有意思,n-buna 在之前 VOCALOID 活动时期的一首曲子 「白ゆき」 中也提到了一样的 最低(さいて)/ 咲(さ)いて

即使是糟糕透顶如我,也想在你面前绽放呢。


从之前起,就无数次和友人 A 提过自己非常喜欢这首歌,也把「八月、某、月明かり」中的一句话也送给了她:

君の人生は月明かりだ
你的人生好似朗朗月光

有りがちだなんて言わせるものか
岂能让他人指手画脚什么“随处可见”

Yorushika (n-buna & suis), 八月、某、月明かり

是啊,你的人生好似朗朗月光,哪能容忍他人指手画脚呢,
她应该也明白了吧,
可惜 —— 自己还是没有珍惜啊。

只剩下被嘲笑的自己了。


可是,人生,若是现在就会迎来结局的话,那么一定、又一次、还是摇滚乐救了我吧。

My whole life was saved by Rock & Roll.

以上,
2024 年 4 月 18 日

🔲 ⭐

重新开始 - 所以我尝试了一下 Hugo

在疯狂的摆烂 n 年后,某个人终于想起来他还有个博客。经过好几分钟的思想斗争之后,他决定好好折腾它,以 Linux 为抓手,通过 Hugo 和 nginx 深度共建,对标 Hexo,打通原 Blog 与 Simple 之间的垂直领域屏障,实现多维矩阵闭环,为个人博客赋能(确信)。

Why

Why rebuild it?

相较重建而言,我个人感觉更应该称之为重启。

这个博客建立至今其主人都没好好写过几篇文。

更多意义上来,我更希望能写写一些有意思的东西,所以就重启了。

Why choose Hugo?

我使用 Hexo 驱动博客已经三年之久了,之前写过一个开源的 Hexo 主题(虽然没几个月就 make it Archived 了)。

Hexo 对我而言过于臃肿,每次部署都要抓取不少 NPM Package,并且主题依赖的 node-sass 安装依赖 python2,对于现代的发行版而言 python2 基本已经被弃用,甚至完全被移除。

反观 Hugo,作为 golang 编写的静态网站生成器,standalone 足够简单,并且基本满足我只需要关注于文本本身的要求。

So we start with Hugo

简单的配置 Hugo

我使用了 hugo-theme-stack 作为主题。

1
2
git submodule add https://github.com/CaiJimmy/hugo-theme-stack/ themes/stack
echo "theme = 'stack'" >> ./config/_default/config.toml

然后使用 DisqusJS 作为评论的实现方案。

1
2
3
4
5
6
7
# config/_default/params.toml
[comments.disqusjs]
shortname = "secret"
apiUrl = "https://disqus.skk.moe/disqus/"
apiKey = "secret"
admin = "real186526"
adminLabel = "Admin"

作为 RSS 用户,Hugo 默认内嵌的 RSS 实现根本不够看。我在这里使用了 hugo-atom-feed 来实现了 Atom。

1
2
hugo mod init github.com/186526/blog.186526.xyz
hugo mod get -u github.com/kaushalmodi/hugo-atom-feed
1
2
3
4
5
6
7
8
## ./config/_default/module.toml
[imports]
path = "github.com/kaushalmodi/hugo-atom-feed"

## ./config/_default/outputs.toml
home = ["HTML", "RSS", "ATOM"]
section = ["HTML", "RSS", "ATOM"]
taxonomy = ["HTML", "RSS", "ATOM"]

Atom 文件默认位于 /atom.xml 下。

🔲 ☆

「 Run short links service with aka 」- 如何部署aka

一个简单的 aka 部署教程。

警告

aka 已被弃用。

aka (Also Known As) 是一个简洁,快速,前后端分离,运行于 Cloudflare 的短网址服务。

Demo: 186.rip

aka 分别有两个 Worker 组成,分别是其的的前端以及后端,你需要在本地安装 node > 12 的环境来支持其部署。

本次部署所用环境

本次教程使用 node v12.19.0 wrangler 1.12.3 Debian GNU/Linux 10 (buster) in a Docker Container , The Host uses Archlinux

安装所需工具

你需要拥有一个良好的网络链接,并拥有一个可用的域名并已经绑定至 Cloudflare。

安装 wrangler

wrangler 是一个 Worker 部署工具,你可以使用其来部署 Worker

你可以和我一样,选择使用 npm 进行安装。

1
npm i @cloudflare/wrangler -g

如果你使用 Windows ,你可以选择下载并安装 wrangler二进制包

wrangler 中登陆帐号

使用 wrangler login 来进行授权。

下载本项目,并安装对应依赖

这里推荐使用 git 来拉取本项目,并使用 npm 作为包管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ git clone https://github.com/186526/aka.git

Cloning into 'aka'...
remote: Enumerating objects: 157, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (96/96), done.
remote: Total 157 (delta 63), reused 148 (delta 54), pack-reused 0
Receiving objects: 100% (157/157), 468.87 KiB | 23.00 KiB/s, done.
Resolving deltas: 100% (63/63), done.

$ cd aka

$ cd frontend

$ npm i

后端部署

修改配置

打开 aka/backend 文件夹,你可以找到一个名为 wrangler.example.toml 的文件。 该文件是 aka/backendwrangler 默认配置文件。

将其重命名为 wrangler.toml ,并修改其内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
## Worker名称
name = "aka"
## 项目配置信息,不要修改
type = "javascript"
## accound_id 必须修改 可以在 「 Domain - API - Account ID 」 找到
account_id = "<account_id>"
## worker.dev 域名分配,可关闭
workers_dev = true
## cloudflare route,若绑定自己域名需修改<domain>为自己域名
route = "<domain>/*"
## zone_id 只有在需要绑定域名时填写,可以在 「 Domain - API - Zone ID 」找到。
zone_id = "<zone_id>"
## <kv id> 填写为下文挂载的 kv
kv_namespaces = [
         { binding = "__aka__", id = "<kv id>" }
]

新建 KV 并挂载到对应项目

这里使用 wrangler 新建 kv

1
2
3
4
5
$ wrangler kv:namespace create __aka__
🌀  Creating namespace with title "aka-__aka__"
✨  Success!
Add the following to your configuration file in your kv_namespaces array:
{ binding = "__aka__", id = "*********" }

id 的内容复制到上处 wrangler.toml<kv id>

部署后端 🚀

当你已经确保本地的配置已经没有问题时,可以准备部署该项目了。

1
2
3
4
$ wrangler publish
✨  JavaScript project found. Skipping unnecessary build!
✨  Successfully published your script to
 16sl.ga/* => stayed the same

验证部署

这里使用 curl 请求 api 来测试部署是否成功

1
curl -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":3,"method":"create","params":{"name":"186rip","url":"https://186.rip"}}' https://<your_domain>/api/jsonrpc | jq

当返回值为下面这样时,表明你的后端安装没问题,快去安装前端吧(

1
2
3
4
5
{
 "jsonrpc": "2.0",
 "result": "/186rip",
 "id": 3
}

前端部署

修改配置文件

打开 aka/frontend 文件夹,你可以找到一个名为 wrangler.example.toml 的文件。 该文件是 aka/frontendwrangler 默认配置文件。

将其重命名为 wrangler.toml ,并修改其内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
## 项目名称
name = "aka_frontend"
## 项目类型 不要修改
type = "webpack"
## 用户ID 看上文如何获取
account_id = "<account_id>"
## worker.dev域名 可修改
workers_dev = true
## Clouflare Route,请将 <domain> 修改为上面所用域名
routes = [
    "<domain>/cdn-sources/*",
    "<domain>/sw.js",
    "<domain>/js/*",
    "<domain>/css/*",
    "<domain>/",
    "<domain>/index.html",
    "<domain>/assets/*",
    "<domain>/web_modules/*",
    "<domain>/_dist_/*",
    "<domain>/__snowpack__/*"
]
## zone_id 看上文进行修改
zone_id = "<zone_id>"

[site]
## Cloudflare Worker kv website的存储桶设置,不建议进行修改
bucket = "./build"
## 编译时所用worker,不要修改
entry-point = "workers-site"

部署前端 🚀

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$ npm run build

> @ build /workspaces/aka/frontend
> snowpack build;mv ./build/_dist_/sw.js ./build/sw.js;node ./build.mjs

[snowpack] ! building source files...
[snowpack] ✔ build complete [0.06s]
[snowpack] ! installing dependencies...
[snowpack] ✔ install complete! [2.76s]
[snowpack] ! verifying build...
[snowpack] ✔ verification complete [0.01s]
[snowpack] ! writing build to disk...
[snowpack] ! optimizing build...
                                       Asset       Size  Chunks                         Chunk Names
            js/index.026479135f133c2ca9ad.js    121 KiB       0  [emitted] [immutable]  index
js/index.026479135f133c2ca9ad.js.LICENSE.txt   95 bytes          [emitted]
  js/webpack-runtime.5072755c7971ba0e8aa3.js   1.46 KiB       1  [emitted] [immutable]  webpack-runtime
                               manifest.json  223 bytes          [emitted]
[snowpack] ✔ optimize complete [5.75s]
[snowpack] ▶ Build Complete! ## 当你看到该句时,表明编译成功


(node:16309) ExperimentalWarning: The ESM module loader is experimental.


$ wrangler publish

⚠️  The following routes in your configuration file should have a trailing * to apply the Worker on every path, otherwise your site will not behave as expected.
16sl.ga/sw.js
16sl.ga/
16sl.ga/index.html
✨  Built successfully, built project size is 13 KiB.
🌀  Using namespace for Workers Site "__aka_frontend-workers_sites_assets"
✨  Success
🌀  Uploading site files
✨  Successfully published your script to
 16sl.ga/cdn-sources/* => stayed the same
 16sl.ga/sw.js => stayed the same
 16sl.ga/js/* => stayed the same
 16sl.ga/css/* => stayed the same
 16sl.ga/ => stayed the same
 16sl.ga/index.html => stayed the same
 16sl.ga/assets/* => stayed the same
 16sl.ga/web_modules/* => stayed the same
 16sl.ga/_dist_/* => stayed the same
 16sl.ga/__snowpack__/* => stayed the same

至此,aka 的整个部署完成了。

❌