2022年的新马泰 之三

新加坡吃喝一番后就准备登机去吉隆坡。入境程序MySejahtera的坑上一篇已经提过了,另一个坑就是廉航Scoot。这是我第一次搭乘这家廉航去马来西亚。总而言之一句话,命只有一条,下次还是避免坐这家航司。

吉隆坡机场在IATA的代号是KUL,在本地一般会写成KLIA和KLIA2,其实就是一个Terminal 1一个是Terminal 2。这个KLIA2 是亚航Air Asia运营的,其中只有少量航班是Scoot酷航执飞。少到什么程度呢?就是机场里没有Scoot的Kiosk,在这个登机要检查疫苗证的年代就只能大排长龙去柜台checkin换登机牌了。

KLIA2作为廉航的航站楼自然从抵达就透露出一股廉价气质。机场大厅有空调,洗手间就靠一个大风扇降温。也不要指望有什么商店可以逛或者吃饭了。一旦过了出境检查基本上就只有一些廉价纪念品巧克力糖果柜台了。在出境前还有一家叻沙面店可以一吃。并且机场的安检水平让我脑子里只能飘过安拉胡阿克巴几个字。

从KLIA2到市区可以搭乘KL Express 也就是机场快线。但是,这个价格其实并不厚道。机场快线到市区终点站KL Sentral是55RM (令吉,下文同)一个人,Grab打车算上过路费一辆车也就75RM(其中车费65,过路费10)所以但凡有两个人的话肯定是打车划算。机场和KL Sentra有卖一种包含2天无限次地铁外加机场快线的乘车卡,单程机场快线是110RM,往返150RM。这个其实也不划算因为Grab打车实在太便宜了。

说到Grab打车,吉隆坡是我遇到的第一个必须支付方式选Cash才能打到车的东南亚国家。一旦选择了信用卡支付就会出现周围无车可用的窘境。反复A/B测试确认这一点后接下来的几天都是用的现金支付。Grab好处在于叫车的时候已经给了一个最终价格,哪怕中间遇到交通状况堵车也不会涨价。大多数情况下单程就8RM,极少数跑得远的才出现12RM。鉴于现在的美金汇率和7月份亚洲的炎热天气,实在是找不到不打车的理由。

吉隆坡吃了几家网上评价不错的馆子。其中Fish Market Restaurant是最贵的,这家我认为最值得的还是白灼虾,点了500克差不多是70RM。辣椒蟹有点贵并且口味上和新加坡的不一样,吃口更偏甜一点。我认为这家就盯着白灼虾点就行了。这家的消费水平肯定是远超当地平均饭局的(还是比美国便宜)

China Town的葡萄牙烤鱼 Portuguese Grill Fish 的鱼量并不是很大,虽然价格也不贵。属于尝鲜还可以(毕竟这鱼种在美国没见过)但是味道并没有特别突出。

蒥香海鲜饭店的菜很便宜,菜单直接写在墙上。不知道这个南乳佩佩猪会不会给小朋友带来心理阴影。虾酱炸鸡翅味道不错,铁板鱿鱼虾样子看起来乱糟糟但是味道挺好

铁板鱿鱼虾 样子挫但是味道挺好的

在Pudu附近的等记鱼头米粉 Little Eat Shop 是一个意外的亮点。本来并不在安排的吃单上,在看了一个马来本地华人的网页后决定去试一试,没想到意外地好吃。鱼汤底里加入了老姜和花雕酒 非常鲜美而且不腻。这家店周二至周六7am-2pm营业。鱼头米汤粉仅限周二,周五,周六。地址是 238, Jalan Beruang, Pudu, 55100 Kuala Lumpur, Wilayah Persekutuan Kuala Lumpur, Malaysia.

我吃过的最好吃的鱼汤米粉 没有之一

这次运气比较不好的地方在于附近的王美记 Restoran Wong Mei Kee 临时关门了,据说那家的脆皮烧肉很不错 需要开门就霸门的水平。

最后一天临走前去了ICC Pudu 这个大型室内food court。注意这边的商店大多数6am就开门然后下午1pm左右关门。要吃得趁早上来。这里列举几家吃过的觉得不错的摊位

G-20 档位的姜酒米。有点类似于之前的鱼汤米粉,不同之处在于加了大量的姜,煎鸡蛋和鲜虾。黄酒的味道会更重一些,头几口可能觉得口味太重,很快就适应了。感觉如果有点鼻塞感冒的话吃上一碗肯定能治好

姜酒米

G-29 档位的黄酒煎鸡包(此处无图)这个铺位也卖流沙包,可以和煎鸡包混着和买。一盒4个6 RM

档位忘记了的瓦堡咖啡 喝起来的感觉和越南咖啡很接近,偏甜,很香。这块牌子也是亮点

瓦煲咖啡

档位不明的特色潮州蒸大板 (是的,我没打错字,是板)是河粉加了鲜虾番茄,口感有点酸辣(但是不重)非常鲜美爽口

特色潮州蒸大板

一个人的胃口终究是有限的,网上其他人推荐的炸糕,咖喱云吞面就实在吃不下了。

最后需要吐槽下Scoot这个廉航(已经加入黑名单)一个小时不到飞机硬生生在线修飞机延误了两个小时。从登机完成开始修,一开始还没修好。广播让大家不要慌,表示已经从其他航站楼调了配件过来继续修一定能修好的。这时候我已经开始研究如果修不好了如何转乘地面交通回到SIN以赶上后续的飞机。最后两个小时才把飞机修好,直接导致我错过了Changi机场所有的正经饭点(10点基本上吃饭的地方都关了,只有24小时辣鸡快餐)

这个锈蚀斑驳的机翼就是我坐在座位上百无聊赖的时候透过舷窗拍的。这还是一架787,从上市时间来看能锈成这样得有多疏于保养。虽然这点锈迹不影响飞行,但是看得见的地方都这样马虎,你敢相信看不见的地方他们会做得更好?

Scoot一生黑,这机翼锈蚀成这样

2022年的新马泰 之二

一方面是为了今年的保级任务,另一方面也是为了尽快在7月底之前用掉UA的升舱点(没想到后来UA非常厚道地给延期到了明年1月)订了去SIN的机票,又因为考虑到新加坡的食宿价格略贵(尤其是这个夏天)中间去了吉隆坡“避难”了几天。

航线还是经典的SFO-NRT-SIN 因为日本疫情管制继续无法入境日本,成田机场的餐馆和商店关了一大半。机场卖写真集的书店和京辰寿司店都关门了,最后只能在ANA lounge吃个免费拉面和咖喱饭。

SIN入境需要提前填写SG Arrival Card (替代了传统的纸质入境卡)可以在网页或者MyICA Mobile这个iOS/Android App上填写。手机软件的好处就是可以保存个profile方便下次再填写的时候少输入一些个人信息。这个系统一次性允许添加3段trip,但这个功能毫无用处 因为只能选择入境前3天的时间。正常人谁会在3天里反复入境(后来还真的差点发生了,下文再叙)填写SG Arrival Card后会收到移民局ICA发来的确认信,登机前值机柜台会要求看一下这个确认信。入境的时候并不要求出示,入境也不再有入境章。在这本护照第一次入境时会被要求录入指纹和照片。在此之后可以使用自动门来自助出入境新加坡。(仅限发达国家护照,猪肝红需要有5年多次往返签证才能用自动门)这个自助出入境的设备反应速度有点慢,每次扫描护照后要有一个明显的查询等待时间,之后拍照人脸识别的过程也有明显的迟滞。和Global Entry比起来差距不止五倍。

马来西亚方面入境有点坑,按照移民局的guideline需要在MySejahtera这个手机App上填写一大堆的信息包括上传疫苗证明。但是在实际操作中不管是值机还是入境都没有任何人过问这东西。我不认为政府的系统先进到直接按照护照号自动绑定,唯一的解释应该就是这系统已经不强制了。另外马来西亚有没有对猪肝红恢复落地签还有争议,建议猪肝红持有者不要挑战还是提前办好签证。

另外一个插曲就是成田飞新加坡的航班上感觉加拿大和美国护照持有者占了一大半,数量上远超新加坡护照。(登机前排队挨个检查护照和疫苗证明大家都把护照拿在手里,通过封面颜色上很容易判断)

在新加坡的几天里总算吃到了2017年就列入吃单的永成餐室和天天海南鸡饭。两家都只收现金(和本地扫码支付,游客没法用)永成附近有一家医院有提供ATM机,但是那台机器强制收取6%的汇率转换费比较坑。建议提前换好足够现金。

黑胡椒蟹 两只起售 胃口小的建议呼朋唤友一起来

天天海南鸡饭在Maxwell food center 这地方靠近China Town,可以吃完在附近顺便再吃个田鸡粥。

吃完后还有余力于是走到China Town后门的长城砂煲田鸡粥又来了一份田鸡。

吃完田鸡粥出门又在转角发现了“了凡油鸡饭”,就是那家被亚洲米其林褒奖的油鸡饭(在曼谷Terminal 21里也有分店)但实在无力继续吃了

酒足饭饱之际也就差不多要登机去吉隆坡了

2022年的新马泰 之一

疫情在家待了2年多没有坐飞机,一度发展到在家播放ANA登机音乐 Another Sky 和United的 Rhapsody in Blue 来平衡情绪。随着今年夏天各国逐渐放松入境管制,一年一度的1K保级任务又重新提上了日程。随着UA的定级标准从PQM改成PQP 难度也上升了不少。当年那种PVG-BOS 4个往返即可1K的日子再也不复返了。现在比较经济的做法只有从北美绕着飞去亚洲Hub往返,最好还得找PE的仓位。于是就有了这个90年代出国旅游大热目的地“新马泰”的安排。

首先是5月飞的泰国,还是BKK机场。飞机降落入境就感觉到了萧条。本来是人挤人的落地签证处门可罗雀。主要原因是主力落地签游客来源中国大陆的防疫管制导致大陆人无法方便出游,而欧美游客又不需要签证于是这个落地签窗口就根本没人排队。这段线路是用了AA里程兑换的Japan Airline头等舱。这次JAL的头等缩水很严重,餐食水平下降连带着服务也下降了(酒杯的酒每次都要提醒了才会给续杯)因为有头等的登机牌所以落地后直接走了priority lane来快速入境。现在商务头等已经不发快速入境卡了,靠登机牌可以走priority lane。

泰国的入境政策在5月还需要提前填写Thai Pass并且等一两天审核后给发个二维码的确认信。这个确认信在登机和入境的时候都有人检查,疫苗记录在填Thai Pass的时候需要上传。对于完全接种(两针pfizer)人士不需要隔离(5月之前第一晚需要在隔离酒店等待PCR测试结果确认negative前不能出去)

抵达BKK入境然后照常grab打车去酒店,一切安顿好后已经是半夜了。出门想去找点吃的结果无功而返。曼谷市的Covid政策规定酒吧11点关门,饭店2am关门。路边的移动摊贩也早就收摊了,于是第一晚就在饥饿中度过。

在曼谷的几天因为还是照常上班,所以上午除了吃个早饭外基本就是补觉休息。5月的曼谷还需要在室外也长期佩戴口罩。这个季节的亚洲这样做还是非常闷热,路上行人大多遵守规定,只有欧美游客不以为然。几天的时间里给人的感觉就是一片萧条,路上的人少了,商店里的购物客少了,就连四面佛那个路口都冷清了起来。这次完全没有参观任何的景点,只是照常吃了固定项目 辣椒腔骨和猪手饭。腔骨那个火车市场还搬了个地方。

新地址在 Jodd Fairs
+66 92 713 5599
https://maps.app.goo.gl/LuSwMcj3DJEVeuG1A

这次吸取教训没有要最大份的

猪手饭换了新的桥洞下的餐厅

回美国的时候因为当时美国入境还需要当天或-1 天的Antigen测试报告 于是在机场门口找了个相对便宜的测试点,报价550泰铢 (同样内容在市中心是2000泰铢)测试点门口写着up to 1小时出结果着实把我吓了一跳,还好最后差不多10分钟就给了盖章的纸质证明。上面还带一个QR code 扫描后是链接到医院的一个网页 证明这个姓名+护照的人的确得到了一个阴性结果。

2天快闪巴西圣保罗 – 第二天

第二天首先去的是本地的大市场,葡语 Mercadão Municipal de São Paulo 可以理解为一个自带大食代Food Court的大型农贸市场。作为一个农牧业大国,市场里的瓜果蔬菜和生鲜肉类看上去很不错

卖水果的小贩会热情地给你水果试吃。市场一楼基本都是水果和生鲜,偶尔有一些手工艺品。二楼就是大食代广场。从上往下看一楼的格局和中国的农贸市场并无两样。

即使是巴西大食代肯定也要吃肉,下面一大盆肉加上两瓶啤酒的价格是$192 巴西里拉,看过第一天游记可能还记得,我们第一顿饭一个人就要这个价。当然坐在Food Court里吃肯定和有统一着装的饭店不一样。

这份肉的分量非常到位,也没有出现肉下面铺满萝卜丝把食物垫高显得分量多的伎俩。两个成年人勉强吃完后表示已经没有能力再弄点烤串。此处应有肉的特写。

又一顿酒足饭饱之际开始了新一轮的散步消食。闲逛了下圣保罗的商场,总体上非生活必须品的物价并不便宜。商家愿意收美金现钞,就是汇率惨淡了点。在街头和商场里都发现了一些类似于豹子变形体的雕像,不知道有什么寓意。(第二张感觉像占满了花生碎应该挺好吃的)

超市和街头便利店看起来和中国大街小巷上的并无不同。但是仔细一看他们都有个共同点,就是有足球卖。随到随买随踢。

很快就到了第二天夜晚的飞机时间,临行之前肯定又是一顿巴西烤肉。这次找的自助烤肉店价格正在搞活动,价格对折后只要 $74 巴西里拉一个人,也就是 USD $13。

圣保罗总计逗留两个白天,吃了4顿巴西烤肉。飞行时间远大于在巴西境内的时间。考虑到他们给了我5年多次往返签证,应该在将来的某一天还会回去继续吃肉。

2天快闪巴西圣保罗 – 第一天

这是一篇拖了有半年多的游记,如果不是Covid19把所有人困在家里的话更不知道什么时候能够完成。一切都源于去年搜到的一张从温哥华出发去圣保罗的机票,大概就500加币的样子。考虑到从来没去过南美洲外加一圈mileage run下来里程不少就愉快订票。

订票后因为航空公司行程变化前后改动了几次。最终飞行路线是YVR-ORD-GRU 比原先的 YVR-DEN-IAD-GRU 少了一跳。当然我还要自己解决SFO-YVR这一段,就直接买了一个便宜单程接上。事后回程的SFO-YVR还被意外改成了SFO-LAX-YVR替我补上了后一次航班缺失的一段。

因为UA国际航线从加拿大出发比从美国出发便宜的缘故经常在YVR机场转机。这次找到了一家早餐店不错。名字叫“天津味 牛羊肉粉面” 英文名“O’Tray Noodle” 坐标在Aberdeen Plaza隔壁一幢看起来不怎么样的建筑。从机场有轻轨可以坐到Aberdeen Plaza步行几分钟就到。煎饼果子经天津的朋友远程图片鉴定表示质量不错。

抵达圣保罗机场已经是第二天清晨,机场入境排队感觉亚洲面孔寥寥无几。入境检察官问的都是常规问题。入境章上的停留日期是手写的90天。入境管对我飞24小时就为了待一个晚上就走有点将信将疑。这个跨越了半个地球的中国护照持有人究竟想来做什么?答案当然是烤肉

机场入境后第一感觉就是热,10月下旬还是南半球的夏天。抵达酒店checkin后第一件事就是找烤肉吃。手机上找了附近评价最高的自助烤肉店,过程就和平时常见的巴西烤肉一样。桌上有块牌子红或绿,绿色代表你还能吃,会有服务生不断带着新出炉的烤肉到你面前切给你。等到实在吃不下了就把牌子翻红就不来问你。烤肉店还有一个巨大的沙拉吧,里面居然还有不少三文鱼寿司。因为实在太饿了所以这顿饭并没有图。最后两个人的自助餐还带两瓶啤酒差不多$190 巴西里拉一个人,折合USD $35。和之后吃过的几家烤肉店比起来这家还算是档次高的,从服务生统一的着装和价格上可以看得出。

吃饱后自然要外出闲逛消食。鉴于之前在网上的阅读结果对圣保罗街头本地治安并没有太多信心,把钱包和iPhone护照都锁在酒店保险箱后就带着一张信用卡, 一张20美金现钞和一部Android手机出门。第一个目的地是圣保罗大教堂。Uber在圣保罗本地能正常用,而且车辆也不算少。

圣保罗大教堂本身相比在北美可以看到的各种教堂并没有给我留下特别深刻的印象。倒是教堂门前广场上形形色色的小生意人和随处可见的流浪汉让人叹为观止。旧金山人对于满街的流浪汉也已经习以为常,但这个密度和闲散人员的数量还是让人不由自主的捂紧钱包提高警惕。但从另一方面来说,没有警力或城管驱赶也说明了社会的和谐,流浪汉本身并不可耻,但为了国家/城市形象非要做出掩耳盗铃驱赶就没有必要了。

除了流浪汉外,广场上各种卖大力丸的生意人也不少。这位看了半天感觉应该是卖某种壮阳药物之类的。

广场上还发现了很多人围着看一个木板钉起来的大箱子。研究了一圈后发现是Netflix在播放电视Trailer。别看箱体巨大实际屏幕也就比手机屏幕大不了多少。

高架桥下的空间被建成一个个小型足球场,一群小孩在里面踢球。相比中国的高架桥下基本都是自行车停车场或是堆放杂物。中国的家长也未必会愿意让小孩在汽车尾气的环绕中踢球吧。没有足够的设施让大多数人能够参与又如何提高竞技水平呢?

Traefik v2 下设置反向代理及https redirect

为了解决docker前端的反向代理,在尝试了传统的haproxy后打算试一试新产品。Traefik的吸引力在于

  • v1和v2版本的配置语法不一样,阅读文档需注意
  • 配置可以通过启动参数或配置文件传入,但前者并没有完全实现后者的功能
  • 文档过于简陋
  • 可以自行更新 Let’s encrypt证书,避免3个月手工操作(即使用acme.sh 还是需要配置cron job)
  • 自动发现同一个docker instance上的服务并通过label来定义route/service
  • 多种多样的middleware 可以简单实现ratelimit或者replace path

缺点在于

下面是一个简单例子。docker-compose.yml 中有2个container,其中trafik找到了nginx的服务并且自动issue/renew了证书。

nginx:
    command: nginx -c /etc/netbox-nginx/nginx.conf
    image: nginx:1.17-alpine
    depends_on:
    - netbox
      #ports:
    expose:
      - 8080
    volumes:
    - netbox-static-files:/opt/netbox/netbox/static:ro
    - netbox-nginx-config:/etc/netbox-nginx/:ro
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.netbox_http.rule=Host(`netbox.fastobject.net`)"
      - "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
      - "traefik.http.middlewares.https-redirect.redirectscheme.permanent=true"
      - "traefik.http.routers.netbox_http.middlewares=https-redirect"
      - "traefik.http.routers.netbox_https.rule=Host(`netbox.fastobject.net`)"
      - "traefik.http.routers.netbox_https.tls=true"
      - "traefik.http.routers.netbox_https.tls.certresolver=le"
      - "traefik.http.services.netbox-service.loadbalancer.server.port=8080"
  traefik:
    image: traefik:v2.1
    container_name: "traefik"
    command:
      --log.level=INFO
      --providers.docker=true
      --providers.docker.exposedbydefault=false
      --entryPoints.web.address=:80
      --entryPoints.websecure.address=:443
      --certificatesResolvers.le.acme.email=henryxxxxx@gmail.com
      --certificatesResolvers.le.acme.storage=acme.json
      --certificatesResolvers.le.acme.httpChallenge.entryPoint=web
    ports:
      - 443:443
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

这里还实现了http 80 -> http 443 的自动302跳转。这个配置通过middleware实现,坑点在于需要配置2个route,分别针对http和https,否则跳转是404 not found。另一个容易被忽略的地方是需要被反向代理的container使用expose而不是ports来暴露端口。expose只会把端口暴露给其他container 而ports会把这个端口绑定在host上。在这个例子里只需要把端口expose给trafik即可。

在旧金山办理巴西签证

在旧金山办理巴西签证需要准备的材料如下

  • USPS money order $115 收件人写 Consulate General of Brazil
  • 2 inch x 2 inch 白底免冠照片一张
  • 驾照复印件
  • 美国有效身份证明,比如绿卡
  • 机票订单
  • 打印的在线申请表确认信

需要注意的是money order必需是USPS开局的。Safeway/Walmart的不行。

申请签证前需要在线填写申请表,网址在 https://formulario-mre.serpro.gov.br/sci/pages/web/pacomPasesWeb.jsf?aba=-6

这个网站的问题在于偶尔英文翻译里还会夹杂葡萄牙文,请备好翻译软件。填表的过程中也会让上传照片电子版和机票行程电子版,请一并准备。最后填写完成提交后会有一个带编号的确认页面需要打印并签字。

巴西驻旧金山领馆面签不需要提前预约,到了领号即可。需要注意的是签证服务仅在早9点到11点之间提供。停车的话最精生的选择是附近的St. Mary’s Square Parking Garage – Lot #49, Kearny Street, San Francisco, CA

巴西领馆网站说明是5个工作日下签证,但我面试的时候让我差不多7个工作后再去领。签证上的issue date是在5天内,也许只是工作人员为了留下足够的余量。

最后收到的签证是5年多次有效,每次停留不超过90天。

Keepalived实现廉价HA

最近在dockerize各种home lab上的服务,其中遇到的一个问题就是如何实现HA。最方便的实现方式是打开eBay.com搜索F5 Big IP 购买硬件Load Balancer。最廉价的方式是多个设备间跑VRRP协议实现自动Fail over切换。Keepalived 就是一个精细生活VRRP的软件实现。

具体用例为两台Docker node上各跑了一个container运行unbound提供recursive DNS服务。任意一台机器下线(不管是container下线或是node下线)都由另一台机器在同一个IP地址下继续提供服务。切换期间网络不不会中断。

既然已经有了两台运转正常的Docker node,显然Keepalived跑在Container里是最经济且便于管理的。这里用到的docker image是 https://github.com/osixia/docker-keepalived

需要注意的是两台机器的sysctl需要设置 net.ipv4.ip_nonlocal_bind=1 在Ubuntu上可以通过修改 /etc/sysctl.conf 并运行 sysctl -p /etc/sysctl.conf 实现。在RancherOS上需要修改cloud-config.yml 具体参考官方文档

并且这两个container需要跑在host network上且赋予 CAP_NET_ADMIN (--cap-add NET_ADMIN

以下是用docker-composer 和直接运行docker run的两种配置。

# docker-composer.yml

keepalived:
     container_name: keepalived
     image: arcts/keepalived:latest
     environment:
       - KEEPALIVED_AUTOCONF=true
       - KEEPALIVED_STATE=MASTER
       - KEEPALIVED_INTERFACE=eth0
       - KEEPALIVED_VIRTUAL_ROUTER_ID=2
       - KEEPALIVED_UNICAST_SRC_IP=10.2.1.10
       - KEEPALIVED_UNICAST_PEER_0=10.2.1.11
       - KEEPALIVED_TRACK_INTERFACE_1=eth0
       - KEEPALIVED_VIRTUAL_IPADDRESS_1="10.2.1.12/24 dev eth0"
     network_mode: "host"
     cap_add:
       - NET_ADMIN
# docker run command
docker run -d --name keepalived --net=host --cap-add NET_ADMIN \
-e KEEPALIVED_AUTOCONF=true               	\
-e KEEPALIVED_STATE=BACKUP           		\
-e KEEPALIVED_INTERFACE=eth0                \
-e KEEPALIVED_VIRTUAL_ROUTER_ID=2           \
-e KEEPALIVED_UNICAST_SRC_IP=10.2.1.11    	\
-e KEEPALIVED_UNICAST_PEER_0=10.2.1.10     \
-e KEEPALIVED_TRACK_INTERFACE_1=eth0        \
-e KEEPALIVED_VIRTUAL_IPADDRESS_1="10.2.1.12/24 dev eth0" \
arcts/keepalived

至此 IP地址 10.2.1.12 就由 10.2.1.10 为master ,10.2.1.10下线 则10.2.1.11 自动由backup转为master继续提供服务

在Cisco路由器上使用Let’s encrypt 证书

以下是一个笔记,用来更新Cisco 28xx系列路由器上的Anyconnect 证书

1. 生成Let’s encrypt 证书。我习惯用getssl

2. 加密private key 这台设备较老,只接受des加密的格式
openssl rsa -des -in privkey.pem -out privkey-enc.pem
这时候会要求输入一个密码,在下文会用到

3. 从private key中提取public key
openssl pkey -in privkey.pem -pubout -out pubkey.pem

4. 登陆到路由器并切换到配置模式

enable
configure terminal

5. 创建ISRG Root certificate trustpoint

crypto pki trustpoint ISRG_Root_X1
chain-validation stop
revocation-check none
enrollment terminal pem
exit

6. 导入ISRG Root certificate (从 https://letsencrypt.org/certs/ 下载)
crypto pki authenticate ISRG_Root_X1
粘帖复制证书后回车在新的一行键入quit

7. 创建中间证书 Let’s Encrypt Authority X3 (Signed by ISRG Root X1) 的trustpoint

crypto pki trustpoint Lets_Encrypt_Authority_X3_signed_by_ISRG_Root_X1
chain-validation continue ISRG_Root_X1
revocation-check none
enrollment terminal pem
exit

8. 同样粘帖复制中间证书 (从 https://letsencrypt.org/certs/ 下载)
crypto pki authenticate Lets_Encrypt_Authority_X3_signed_by_ISRG_Root_X1
粘帖复制证书后回车在新的一行键入quit

9. 导入路由器证书
crypto pki import host.domain.com-cert pem terminal @Password@
这里的@Password@ 替换为 #2 中自定义的密码
粘帖复制 Let’s Encrypt Authority X3 的中级证书,也就是在#8 中用过的。在换行后输入quit
粘帖复制 privkey-enc.pem 中的内容,注意不要有空行。在换行后输入quit
最后粘帖复制 #1 中创建的证书。在换行后输入quit
如果一切正常的话应该能看到
"% PEM files import succeeded."

10. 替换原有的证书
这里用到的gateway名字是我本机的,请根据实际情况输入

webvpn gateway gateway_1
ssl trustpoint host.domain.com-cert

90天过期前需要重新更新服务器证书并且重复 #10 步

参考文献
Tutorial: Get Let’s Encrypt on Cisco routers/switches

隐没在闹市中的珍宝 Granville Island

第一次去温哥华前就有朋友推荐过Granville Island上的Fish market。之后多次入境都与之擦肩而过,真正踏足这个小岛还是第一次。这还要归功于在Burrard Bridge下的一瞥。

在游船的尽头有几个大字招牌就是Granville Island Public Market。一开始以为从这个码头就可以步行抵达,绕了一圈才发现只有坐船或是开车绕道才能进去。这座岛三面环水,原本是两座沙洲,于1915年被填成35英亩的工业用地,随着经济大萧条一度沦为贫民窟直到二战期间再度投入大量生产。现在已经是温哥华著名旅游景点之一。

工业的痕迹依然可见,只不过加上了一丝艺术气息。

因为是工作日的关系岛上的停车并不困难,多个收费停车场都有空位根据车牌买停车票即可。岛上最著名的就是这个Public Market。

一开始以为只是一个Fish market或Farmer’s market,进去后才发现里面堪称一个宝库。

首先看到的就是各色水果蔬菜,五彩斑斓的摆放配合灯光映射让人垂涎欲滴。

有一个日本人开的鱼铺(也就是朋友推荐过的)有卖新鲜生蚝,如果有带上一把开蚝刀不妨买一瓶Tabasco调料带回住处慢慢品尝。看到这些虾米蟹腿肉此刻我只想吃一顿火锅。

往里走有一家巨大的茶店,可以买茶叶回去也可以现点一杯热茶当场冲泡。店主看上去是日裔,还会讲日语招待客人。

茶店的斜对角是一家马卡龙专营。第一次看到如此多品种花色的马卡龙在一个柜台展示。可以单买也可以选择6只,12只装(听上去有点熟悉?)

店的一角甚至还有一个马卡龙搭建的Eiffel Tower 不知道是不是属于非卖品

店招在此,看着这块招牌就找到了

迷你马卡龙金字塔,不知道这样一罐下去血糖会升多高。

市场另一角不乏各色面包三明治咖啡店,逛累了也可以坐下喝一杯再走。门外有不少供人歇腿的长凳。今年的枫树红得比往年更晚一些。可以点一杯热巧克力坐在门口看一天的鸽子,暂时忘却工作带来的烦恼。