• 在Kubernetes中部署Cloudflare Tunnel

    English Version: Deploy Cloudflare Tunnel on Kubernetes – Frank’s Weblog

    Cloudflare Tunnel 是一个隧道服务,通过Cloudflare Tunnel可以无需在服务器上暴露任何端口的情况下将源站连接到Cloudflare并提供服务,从而降低攻击面。

    Cloudflare Tunnel以前叫Cloudflare Argo Tunnel。后来Cloudflare Tunnel成为了Cloudflare Zero Trust的一部分,并向所有用户免费提供[1]

    Cloudflare Tunnel

    Cloudflare Tunnel在过去两年经过了大量迭代,网络上的很多教程,甚至包括官方的教程都已经过时。最新的Cloudflare Tunnel无需在客户端(Cloudflared)上做除了token之外的任何配置,所有网站(服务)配置都可以通过Cloudflare Web控制台进行。如果一篇教程让你在Cloudflared上通过yaml来配置网站,那么这篇教程大概率是过时的。

    本文将以httpbin为例,介绍如何在Kubernetes上部署Cloudflared并路由Kubernetes上部署的其他服务。

    (more…)
    Read more: 在Kubernetes中部署Cloudflare Tunnel
  • 修复车身的锈迹及喷漆

    由于融雪剂的侵蚀,汽车后轮上方生锈在美国东北部是很常见的现象。我的这辆车从两年前开始,后轮上方出现了一个小锈斑,从去年冬天开始,这块锈开始扩大。如果放任不管的话,它会更快地蔓延,最终变得无法修复。所以我决定修复它。

    其中大部分的步骤参照了ChrisFix的视频,Chris的视频已经讲得很全面了。本文中我将介绍Chris在视频中没有涉及的一些细节,以及一些个人技巧。

    (more…)
    Read more: 修复车身的锈迹及喷漆
  • Troubleshooting Tailscale Exit Node no Internet Issue

    中文版:Tailscale出口节点无网络问题的调试与分析 – Frank’s Weblog

    As mentioned in an earlier post, I used Tailscale to create a mesh network that connects all of my devices, and I used a cloud server located in AliCloud Beijing as an exit node, in order to access geographically restricted internet services.

    However, I noticed that I could not access the Internet at all when using that exit node. I thought it was a network connectivity issue with the relays, so I didn’t worry too much about it. But afterward, I noticed some other services on that server stopped functioning, so I looked into it and found out that the problem was not that simple.

    First I noticed that I couldn’t access the internet at all from the server, but curl the IP address was working, which indicated the problem with DNS resolution. resolvectl status showed that there were two DNS servers. I assumed this was the DNS server for the Tailscale internal network (actually not, will elaborate later) since the IPs started with 100.100[1],

    Link 2 (eth0)
    ......
      Current DNS Server: 100.100.2.136
             DNS Servers: 100.100.2.136
                          100.100.2.138

    I tried dig @100.100.2.136 baidu.com to check the response from the DNS server and got connection timed out: no servers could be reached. The response from the command became normal after shutting down Tailscale. So probably Tailscale somehow affected the DNS resolution on the system.

    (more…)
    Read more: Troubleshooting Tailscale Exit Node no Internet Issue
  • Tailscale出口节点无网络问题的调试与分析

    English version: Troubleshooting Tailscale Exit Node no Internet Issue – Frank’s Weblog

    前文提到,我使用Tailscale将我的所有设备组成了一个Mesh网络,并且将位于阿里云北京的轻量应用服务器作为出口节点用于访问一些限制地理位置的网络服务。

    然而我却发现在使用该出口节点时完全无法访问互联网。我本以为是Relay的网络质量问题就没有在意。但是后来陆续发现该服务器上的其他一些服务都出现了问题,于是进行了一番检查,结果发现问题并没有这么简单。

    首先我发现从服务器上完全无法访问互联网,但是直接curl IP地址是可以的,这样就基本上将问题定位到了DNS上。resolvectl status显示有两个DNS服务器,因为IP以100.100打头[1],我以为这是Tailscale内网的DNS服务器(实际上不是,请看后文)。

    Link 2 (eth0)
    ......
      Current DNS Server: 100.100.2.136
             DNS Servers: 100.100.2.136
                          100.100.2.138

    我试图dig @100.100.2.136 baidu.com来检查DNS服务器的回应,得到connection timed out: no servers could be reached.。关掉Tailscale之后,上述命令的回应则正常。因此我认为问题在于Tailscale从某种形式上影响了系统的DNS解析。

    (more…)
    Read more: Tailscale出口节点无网络问题的调试与分析
  • 使用Tailscale组网

    前段时间无意中了解到了Tailscale这个产品。Tailscale是一个基于WireGuard的Mesh组网工具,可以将所有设备连接起来,组成一个大内网。Tailscale是商业软件,免费版最多支持20个设备和一个子网路由,对大多数家用需求来说应该够用了。

    我的需求主要有如下几点:

    外出时访问NAS

    家里的Spectrum网络虽然有公网IP,但是我并没有将NAS的文件服务暴露到公网。我目前使用的是通过端口转发暴露的群晖上自带的OpenVPN,能用但是体验并不好。

    安全访问

    在不安全的网络(如酒店/机场)中加密通讯以保证安全。

    地理位置

    用于访问一些有地域限制的网络服务,比如网易云或B站。

    (more…)
    Read more: 使用Tailscale组网
  • F-1 NRA投资股票帐户/High Yield Saving帐户的税务身份及报税问题

    本文仅作为经验分享,不构成任何税务或法律建议。

    大家都知道F1身份的前五年属于非税务居民(Non-resident Alien, NRA)。但是在券商和银行那里,对于NRA身份往往处理得很混乱。尤其是居住在美国,但又不是税务上的居民,就成了一个很tricky的点,需要在开户和报税时正确处理。

    开户

    通常来说,NRA不能在券商或银行在线开户,必须要去线下。如果在线开户的话,券商通常会默认你是税务居民(Resident Alien, RA),并要求你填写W9表格,所有税表也都会按照RA来处理。

    正确的做法应该是去线下开户,或线上开户后提交W8-BEN表格声明自己的NRA身份。有少量DP表示有些券商不给有美国地址的NRA开户,但是实际执行起来YMMV,如果一家不行,可以换一家。提交W9来“冒充“自己是RA虽然理论上不合规,但实际操作起来也没什么问题。[1][2]

    对于Robinhood, Marcus, SoFi这样的纯线上券商/银行,我们显然没有线下开户的选项。Robinhood一开始注册的时候只需SSN即可,不需要确认税务身份,Robinhood同样会默认你是RA。可能由于Robinhood上市之后的合规需要,去年8月我收到了来自Robinhood的邮件要求确认税务身份,如果是NRA则需要填写W8-BEN表格。[3]

    (more…)
    Read more: F-1 NRA投资股票帐户/High Yield Saving帐户的税务身份及报税问题
  • P0171/P0174燃油系统过稀(System too lean)问题

    前一段时间因为年检要due了,花了一些时间在试图troubleshoot我的2009 Hyundai Santa Fe上的P0171/P0174故障。在这个过程中查找了一些资料,了解了一些发动机燃油系统的工作原理。

    问题

    去年年底,我在用OBDII Scanner检查EVAP问题(图中的P0442)时,发现出现了另外两个故障码P0171和P0174,除了故障码本身之外没有任何症状。这两个故障码表示引擎中燃烧的混合气过稀,也就是空气太多,或汽油太少。

    在开始解决问题之前,我们首先需要了解一些背景知识。

    (more…)
    Read more: P0171/P0174燃油系统过稀(System too lean)问题
  • GitHub Pull Request Diff中的诡异行为

    去年我负责开发了产品中的一个大型feature,这个feature被分解成了A, B两个小feature。大致的工作流程是这样的:

    我从master branch out出分支feature-a,在分支feature-a上开发;然后从feature-a branch out出feature-b,在feature-b上开发;最后创建feature-b -> feature-afeature-a -> master 两个PR分别进行code review并依次合并进master。

    当我在开发feature-b时由于master上有了很多更新,于是我将master分别merge进了feature-afeature-b。整个流程的简化版大致如下:

    (more…)
    Read more: GitHub Pull Request Diff中的诡异行为
  • 2021年终总结

    ,

    2021年,虽然疫情并没有像大家期望的那样随着疫苗接种而消失,但是生活多少走上了正轨。

    学业

    二月,我开始了在雪城大学的最后一学期,我最后一学期只需要修一门课,并且因为系里的选课限制把我可选的课压缩到近乎没有,于是最后一学期在一门水课加每周20小时的实习中度过。

    今年学校恢复了线下的毕业典礼,在铺天盖地的Congratulations中感到有些恍惚,在居家隔离和网课中,两年时间似乎一转眼就过去了。

    (more…)
    Read more: 2021年终总结
  • 如何更换锈死的雨刷臂(Wiper Arm)

    今年3月,我在清理车顶上的积雪的时候,一大块结成冰的积雪顺着后挡风玻璃滑下来,把后玻璃的雨刷臂砸断了。

    雨刷臂的更换其实很简单,雨刷只有一个螺母固定,只需要把螺母拧掉,把旧的雨刷臂拿下来,再把新的装上去即可。但是问题是,经过纽约上州的大雪加上融雪剂的十几年的洗礼,雨刷臂的金属部分已经完全锈死在spindle上面了。我一开始按照YouTube上的视频,购买了一个如下图所示的工具试图把旧雨刷拔下来。

    然而雨刷的剩余部分实在锈得太死了,加上工具本身不好用并且操作不当(没有把螺母装在螺丝上),导致雨刷的塑料部分下来了,但金属部分还在上面,还把螺丝的螺纹搞坏了(大无语)。

    (more…)
    Read more: 如何更换锈死的雨刷臂(Wiper Arm)