分類
說說

240930

物質的壟斷使人貧窮,權力的壟斷使人懦弱,信息的壟斷使人愚蠢,三個一起壟斷使人感恩。

這段話在微信朋友圈發送後,只有自己能看到。

分類
Linux 软件

小內存 OpenWrt 折騰記錄

我有一個路由器(CPU:580 MHz, RAM: 128 MB, Flash: 16 MB),幾年前刷過 OpenWrt 19,三年來工作的很好,裡面的 dnscrypt2 也運行的很好。最近看到可以更新到 23.05.4,於是打算試試。順便把一個舊優盤的容量擴展上去試試更多的軟件。

重裝 OpenWrt

由於我是跨版本升級,所以為了避免出現問題選擇的不保留資料。在 Table of Hardware 查詢自己的路由器,然後在 Device page 就能找到升級所需要的 Sysupgrade image。 也可以到 Download OpenWrt firmware for your device 搜索並下載所需的升級鏡像。而且這個下載頁還有一個 Customize installed packages and/or first boot script,裡面可以添加預裝軟件。有興趣的朋友可以嘗試將 wget-ssl 添加進去。下載 squashfs-sysupgrade.bin 文件到電腦後,就可以路由器界面 System > Backup / Flash Firmware > Flash new firmware image 升級系統了。升級後使用網線連接電腦就能獲得 IP。瀏覽器輸入 192.168.1.1 就能進入控制台。進入後設置密碼和密鑰,再到 Network > Wireless 開啟 WiFi,路由器就可以使用了。

為 opkg 配置代理

如果你網絡沒問題,就不必使用代理,但國情在此,直連的話基本上無法更新軟件。正常情況下設置代理非常簡單:

#進入路由器
ssh [email protected]
#添加代理到到 /etc/profile
echo "export http_proxy=http://192.168.1.235:44083" >> /etc/profile
echo "export https_proxy=http://192.168.1.235:44083" >> /etc/profile
#重新加載 profile
source /etc/profile
echo $http_proxy
#此時應出現 http://192.168.1.235:44083/
wget http://ip-api.com/json
#應能成功顯示 proxy 的 IP

但是使用 wget 下載 https 連接卻會出現 400 錯誤,可以先把軟件源替換成 http 安裝 wget-ssl 後再替換回來。

#備份下軟件源
cp /etc/opkg/distfeeds.conf distfeeds.conf
#然後將軟件源中的 https 替換為 http
sed -i -e "s/https/http/" /etc/opkg/distfeeds.conf
#之後就可以更新並安裝軟件了
opkg update
opkg install wget-ssl
#安裝 wget-ssl 後就可以換回 https 的軟件源了
cp distfeeds.conf /etc/opkg/distfeeds.conf

使用優盤為路由器拓展空間

不到 10 MB 的可用空間非常限制 OpenWrt 的可玩性,好在可以用優盤來拓展。首先在電腦上把優盤格式化成 ext4 格式:

#查看優盤盤符
lsblk
#得到類似 /dev/sdb 或 /dev/sdc

#格式化成 ext4 格式
sudo mkfs.ext4 /dev/sdX

然後將優盤插入路由器:

#安裝依賴
opkg update
opkg install block-mount kmod-usb-storage kmod-fs-ext4 e2fsprogs

#建立掛載點
mkdir -p /mnt/usb
#查看優盤盤符
ls /dev/sd*
#得到類似 /dev/sda
#掛載優盤
mount /dev/sda /mnt/usb
#查看掛載結果
df -h
#應該可以看到 /dev/sda 掛載到了 /mnt/usb

#備份 /overlay
cp -a /overlay/* /mnt/usb
#卸載優盤
umount /mnt/usb
#掛載到 /overlay
mount /dev/sda /overlay
#更新 /etc/config/fstab,在文件底部增加如下內容
config 'mount'
   option  target  '/overlay'
   option  device  '/dev/sda'
   option  fstype  'ext4'
   option  options 'rw,sync'
   option  enabled '1'
   option  enabled_fsck '0'
#重啟路由器即可看到路由器顯示優盤容量
reboot

其他 OpenWrt 命令行小撇步

在使用 scp 從電腦往路由器傳文件時出現 ash: /usr/libexec/sftp-server: not found,可以通過添加 -O 參數來解決:

scp -O source target
#如果是文件夾或多個文件
scp -O -r source target

在命令行下載文件文件時,鏈接過長導致無法輸入完整鏈接?可以安裝 bash

opkg install bash
#使用 bash 而不是 ash
bash
wget https://a.vrey.long/url/that/you/would/like/to/access
#返回 ash
exit

嘗試在 OpenWrt 上編譯 Python 庫

測試的項目是 ssr-command-client,這裡只能說歷經劫難修成正果,最終編譯出來了也成功安裝上了。但是由於路由器性能實在孱弱,並不能直接運行 ssr-command-client,不過可以通過自己寫一個 Python 腳本,只引用需要的庫來運行。

使用更輕便的 HTTPS DNS Proxy 來增加網絡安全性

安裝 https-dns-proxyluci-app-https-dns-proxy 然後重新登錄路由器,頂部導航應該就出現 Services > HTTPS DNS Proxy 了。在 HTTPS DNS Proxy - Instances 中編輯或添加 DNS 服務器。

Provider: Custom
Parameter: https://YOUR.DNS.PROVICDER/PATH
Bootstrap DNS:
Listen Address: 127.0.0.1
Listen Port: 5353
Run As User: nobody
Run As Group: nogroup

經過兩周的使用,發現這個路由器還是可以在性能有限的情況下同時穩定運行 ssr + v2fly + dnscrypt2 的。最高網速相較於電腦上的客戶端可能有所下降,但是也還好。

本文更新於 2024/09/29。

分類
软件

使用 F-Droid 分享應用給局域網的手機

F-Droid 有個功能是分享自己已安裝的應用給局域網的手機,但是操作不甚直觀,這裡簡單記錄一下。

現有手機甲,已安裝 Organic Maps;手機乙,未安裝 Organic Maps(或已安裝低版本)。兩個手機都打開 Nearby > Find People Nearby > 並啟用發現開關。

在甲手機上選擇掃描到的乙手機,然後勾選要分享的應用 Organic Maps,最後點擊右上角的分享藍色按鈕。此時乙手機會提示“是否要從甲手機獲取應用”,同意後會進入選擇“乙手機要分享的應用”的界面。由於乙手機是要獲取甲手機的應用,所以不用選擇分享的應用,直接點擊右上角的分享按鈕,就能看到甲手機分享的應用 Organic Maps 了。點擊應用旁邊的“安裝”或“更新”即可完成操作。

以上步驟經過測試,是沒有問題的。但是要注意,如果兩個手機的架構不同,可能會出現應用安裝包不匹配的情況而導致無法安裝。

分類
記事

哈薩克的食物、住宿與交通

這篇文章基於我 2024 年春天去哈薩克扎爾肯特、卡普恰蓋和阿拉木圖(Zharkent,Kapchagay(Qonaev) and Almaty)的旅行體驗(2024哈薩克之行0102),希望能給你帶來幫助。如果有不對的地方,歡迎指正。

住宿

我全程的住宿都是在 Agoda 上預定的。如果是淡季 walk in 應該也沒問題,甚至可能更便宜。除了阿拉木圖外的大部分房東都不懂英語,如果你不懂俄語,那麼翻譯軟件和網絡就是必須的。在阿拉木圖無論是民宿、酒店還是餐館,都有很大概率可以使用英語。谷歌翻譯可以離線下載語言包,但是離線情況下只能翻譯文字,不能語音互譯。民宿和酒店質量都不錯,畢竟上了全球平台,價格兩百到四百區間就能找到很不錯的。旺季可能會貴一些。我這次所有的住宿都是付的現金,不能用信用卡。好在 ATM 很多,取錢很方便,每次可以取約 1600 人民幣的堅戈。

交通

從新疆過去扎爾肯特幾乎不能步行或騎自行車,一般都是乘坐大巴。班次沒有時間表,乘客坐滿了就會出發。雖然霍爾果斯與扎爾肯特相距並不遠,但是需要預留至少兩個小時,因為過關很耗時間。從扎爾肯特沒有去卡普恰蓋的大巴。從扎爾肯特到阿拉木圖的大巴一天只有早上九點一班,票價很便宜,如果不提前購票很容易買不到。霍爾果斯似乎有直接去阿拉木圖的大巴,我沒有坐,所以不清楚。我們最終在好心的車站工作人員幫助下,找到了價格合理的出租車前往卡普恰蓋,花費兩萬五堅戈。

阿拉木圖周邊坐車就方便多了,車次頻繁。從卡普恰蓋到阿拉木圖2 的小巴車票是 800 堅戈每人。市區與市郊的公交價格一般是一百、兩百或三百堅戈。車資上車後直接交給司機。可以使用 2gis 查詢和規劃公交,使用 https://citybus.tha.kz/ 來查看實時公交。阿拉木圖的地鐵是定價 100 堅戈,可以付現金或拍信用卡。在進站軋機投入車票,出站時直接走出軋機即可。

食物

哈薩克作為中西交融的國度,飲食多樣而美味。早餐有一種傳統的奶油粥,我們在扎爾肯特的酒店和伊塞克的民宿都有吃到,香香的很好吃。如果酒店沒有早餐,可以在街邊買 samsa(三角空心麵包或四角肉餡麵包),很容易找到這樣的集裝箱小攤,用微波爐一熱配個茶包,早餐就簡單地解決了。在阿拉木圖,還有不少二十四小時營業的食堂。環境都非常好,有免費的熱水和空調。但是餐食質素不能保證,即使 2gis 里評價頗高的連鎖店。午餐和晚餐選擇有很多,平價的如土耳其烤肉卷 doner。由於哈薩克肉類質量品質都很高,所以 doner 都很好吃,有專門的 doner 餐廳,也有集裝箱小攤打包帶走的。通常 doner 可以選擇雞肉或牛肉,麵包可以選擇 pita 薄餅來卷或者厚麵包來夾。多數時候會提供幾個醃過的酸辣椒,不用害怕,一點都不辣,酸酸的很好吃。除了阿拉木圖市區,其他地方的 doner 分量都超大。Lagman 就是拉麵,和蘭州拉麵里的蓋澆麵一樣,不同的菜澆在拉麵上自己拌一拌吃。不要在那種二十四小時連鎖店點 lagman,麵條沒有口感且口味很咸。在阿拉木圖有很多評價不錯的地下小食堂,它們是普通上班族吃飯的地方。口味好價格平,大鍋 lagman 也能做的很好吃,非常推薦。注意營業時間,它們都不是二十四小時的,很多都不做晚餐。Plov 是抓飯,很容易買光。有一個菜 Emanon 很喜歡,名字不記得了,內容是薯條炒牛肉。這裡的壽司也很有意思,和韓國日本的都不一樣。大個兒牛肉餃子和湯拉麵(方便麵)也不錯。牛排、啤酒和烤串的餐廳略貴,但是食物質量上乘,物有所值。一定要試試蘑菇烤串。與住宿不同,幾乎所有的餐館都可以拍信用卡付款。

其他

由於汽車狀況,阿拉木圖的路邊空氣質量一般。但是人行道很寬闊、長凳也很容易找到。公園也都有大量長凳,不過公園里的洗手間可能是收費的且衛生狀況不佳。博物館和景點收費低廉。記得帶個電源轉換器。餐廳和住宿業者都很有禮貌且樂於助人。景區的教堂一般是可以進去參觀的,女性最好自備頭巾。清真寺旁可能會有乞討的老者,可以適量資助。

總之,哈薩克是一個安全、友善、美麗的免簽國家,推薦大家去看看。

其他有用的網站:

本文更新於 2024/06/23。

分類
記事

2024哈薩克之行02

早上伴隨着廣播電台里的音樂吃了昨晚打包的 SAMSA(一種三角形的鬆軟麵包和一種正方形的肉餡麵包)。跟房東說的十一點退房,果然房東又提前十分鐘到了。坐地鐵到 Zhibek Zholy,中間多次下車拍照,因為每個地鐵站都不一樣。阿拉木圖的地鐵只有十一個站點,但很漂亮,乘坐方式也和其他地方稍有不同。進站後有提款機等自助機器,但是沒有自動售票機,所以需要先過安檢,然後在窗口買票。票價固定 100 堅戈,可以現金或信用卡拍卡付款。拿到票後在進站口投入車票,到站後從出站口直接走出即可。在 Ascension Cathedral 休息了一會兒,吃了昨天剩下的油桃和櫻桃。中午在綠巴扎北邊的 Erla Plov Lagman 餐館吃了午飯。Erla 應該是名字,Plov 是抓飯,Lagman 是拌拉麵。這種名字一般都是好吃的小餐館,物美價廉,不通英語。Emanon 點了她喜歡吃的薯條炒牛肉,我點了馬肉腸拉麵(因為要走了,就隨便對着菜單指了個不一樣的,難怪店員還跟我確認了一遍),還要了一壺塔什干茶。東西都很好吃,馬肉口味確實比較特別。店裡乾淨整潔、沒有監控。年輕的店員們輕鬆開心。窗外有個小小的球場,一群小朋友在裡面踢足球。吃完用信用卡付了款,此行只遇到兩家餐廳不能信用卡付款,其中一家還是因為信號不好。相對地,此行所有的住宿都是現金付款。好在 ATM 無論鄉村還是城市都很多。每次最多可以取 100,000 堅戈(大約 1600 人民幣),招商銀行會再收取 10 元手續費。 吃完迅速逛了一下綠巴扎,買了兩盒哈薩克茶和一些便宜的櫻桃。然後回到大教堂,把櫻桃洗了,坐在寬闊長椅邊吃邊看青年男女玩排球。還有一個胖胖的女教練教一個小女孩滑輪滑。後來來了一直小松鼠,Emanon 拍了很多照片和視頻。在附近一圈一圈騮自行車的小女孩也停下來拿來了奶奶的手機來拍松鼠。小女孩慢慢地伸出手放在草地上,小松鼠以為有東西吃,慢慢過來摸了一下小女孩的小胖手,看到沒東西就迅速跳回去了。小女孩非常興奮,不過故伎重施後小松鼠沒有再上當。青年人的排球打得非常有勁,時不時飛上十幾米的高度,或飛出很遠。遠處的人大多都會樂意幫他們把球拋回來,我也扔了兩三次。對面兩個聊天的姑娘臨走前過來問我們來之哪裡,我們說 China,她們害羞地笑着說她們剛才在猜我們來自哪裡。她們來問是對的,不然一定猜錯,因為我們在哈薩克已經被猜過包括:韓國人、菲律賓人、越南人、泰國人、加拿大人(?)。倒是有一次遇到一個從新疆來的這裡學拳擊的哈薩克小伙子,他很自信的跟他朋友說我們兩個肯定是中國人,然後過來跟我們驗證。我們問他是如何看出來的,他說:『一看就是啊!』

吃完了半份櫻桃後我們往機場方向走,後來走到 Роща им. Баума 公園。在那裡吃完了剩下的櫻桃。這個公園非常棒,人工痕跡很少,灌木和樹木都很茂密,也有很多土路。雖然沒有找到開放的洗手間,但是由於這裡的環境,所以總能安全地解決。在一個路口,我們看到一隻野雞不慌不忙地走在小路上。從南邊走到北邊大概三公里,出公園的時候看到金黃明亮的日落。在公園旁的 Не может быть 吃了晚餐。這是一家裝修成美國西部風格的餐館,我們本來決定坐在外面,但是後來外面吃完飯的女士開始抽煙,我們就換到了室內。其實在哈薩克並不需要擔心二手煙,但是路邊的汽車尾氣卻無法避免。Emanon 在我的勸說下再次嘗試漢堡,結果還是失望。我的意面差強人意,不過啤酒和烤蘑菇串很不錯。 吃完飯坐公交去機場,據說去機場的路有時候會非常擁堵,所以我們八點半就出發去機場,路上很通暢,九點不到就到了。機場一樓外側在施工,所以標誌不甚清楚,但是朝着機場大樓走就對了。使用2GIS 找餐館和規劃公交路線都很好,但是它沒有集成實時公交。在阿拉木圖,實時公交可以通過這個網頁查看 https://citybus.tha.kz/ 。公交車有時候會比較擁擠可以請其他乘客幫忙把車資遞給司機。司機也會讓乘客把票和找零遞迴來。本地乘客一般都是刷卡或者掃碼支付。公交的車資一般都是 100,200 或 300 堅戈每人。偶爾會有公交公司的人上車查票。

進入機場後,乘扶梯到二樓出境廳。先從海關的無物申報口進去,才有值機櫃檯。蛇形隊伍里的一個印度人問我們“From China?”。值機櫃檯沒有隊伍,櫃檯里似乎是一個中國主管正在培訓哈薩克員工。所以她給我們做了簡單翻譯,但其實櫃員英語應該很不錯。不知道時緊張還是別的什麼,Emanon 的機票竟然打錯了,出現在機票上的是另一個姓和名的首字母都和 Emanon 相同的人。中國主管於是盯着櫃員用英語指揮者一步一步重新打了一張機票。那個櫃員壓力山大。打完機票過海關安檢,安檢很嚴格,我前面的人把鞋子都脫了。雖然沒讓我拖鞋,但是我們方便餐具里的叉子卻被沒收了。聽說烏魯木齊機場非常嚴格,指甲刀都會沒收,沒想到阿拉木圖機場會收叉子。唉!可惜了我們的叉子。Emanon 對此非常生氣。候機大廳里很擁擠,幾乎沒有座位。也沒有飲用水,但是有星巴克和冰激凌車。也有一兩家免稅店、禮品店和餐館,網上評價不太好。我們飛機的登機口在一樓,但是一樓門口戶外似乎是個吸煙區,樓道里瀰漫着煙味、煙味甚至飄到一樓大廳里。一樓大廳里有個柱子上面有電源插口,幾個中國人圍在那裡。我們後來就呆在二樓,直到登機。登機時在登機口會檢查護照和機票,並把主票收走,把撕下來的附票給回你。乘坐擺渡車來到停機處,登機的梯子上有兩個保安,一個開着手機閃光燈給另一個保安照明,另一個保安再次檢查一遍所有人的護照與人臉。還好今天沒有下雨,否則不知道他們要怎麼處理。浙江長龍航空的服務很好,只是很不專業。空姐英語很差,讓我想起《石門》的女主角。前排乘客對升艙感興趣,詢問價格,空姐說四千,但是空姐不記得四千用英語怎麼說。倒是飛機上的壯保安(空中安全員,坐在我旁邊)知道,跟空姐說“Four thousand”。對方聽完有些吃驚,於是說“Wait a moment”,那意思應該是『打擾了』。當然空姐也不會說俄語。飛機開的很暈,咖喱牛肉飯作為早餐雖然比想象中的好吃,但是由於 Emanon 暈機,所以她只能嘗試帶下飛機吃。

到了杭州,路過轉機聽,剛踏進去一步,就有櫃檯里的工作人員說“Not here”,然後擺手讓我們繼續往入境方向走。看了下門口的牌子,似乎只有幾個特定的航班可以在此轉機,其他的都要先入境中國。入境時,問了從哪裡回來、航班號、何時出境、出境原因。人不多,處理的速度也快。然後過海關,安檢掃包,飛機餐沒有受到關注。航班信息屏上寫的是八點半開始值機,然而並沒有,好像是九點半才開始。我們找了個人少的座位(在黨員初心站前),然後輪流去衛生間洗漱。Emanon 從洗手間回來說一位主管正在責罵環衛阿姨,不允許阿姨在洗手間洗臉,『再發現就沒有下次了』。 Emanon 在座位上吃完早餐,又咪了一會兒,夜間飛機非常累。這期間一直有一個大狗一般大小的掃地機器人,只在黨群服務中心前面來來回回的掃。並且無論附近有人還是沒人,每個十幾秒就會說一邊“歡迎來到杭州機場! Welcome to China!”。在值機櫃檯,我們先出示了護照,被告知護照只能用於去香港轉機,如果不是轉機就只能用港澳通行證。於是我們拿出港澳通行證,櫃員核實了簽注有效期後給我們打印了機票。期間兩次客氣地詢問 Emanon:『沒有懷孕吧?』,另 Emanon 很不爽。由於港澳通行證可以使用 e 道,所以出杭州、入香港、出香港和入深圳都走的自助通道,非常快速便捷。也沒有見到傳說中的查手機電腦的情況。

香港航空機長駕駛技術非常好,飛機全程很穩,Emanon 也沒有暈機。雖然午餐只是個有餡的麵包和飲料,但是由於是熱的而且很鬆軟,味道也好,所以也不錯。這樣就不用一次性餐盒和餐具,沒有環保壓力。

分類
記事

2024哈薩克之行01

由於沒有任何一路公交車可以到達霍爾果斯口岸,所以早上從酒店打網約車到達霍爾果斯(Khorgas)國際客運站,司機是一位姓馬的維吾爾女性,車開得很好。她不喜歡 OPPO 手機裡 QQ 音樂放出來的歌曲(流行和迪曲),切了好幾次歌。車內很乾淨,未見攝像頭。

到客運站後先到售票處購買前往雅爾肯特(Zharkent)的車票,90 元一位。買票的時候只查驗了身份證沒有看護照。然後拿著車票和身份證到旁邊窗口,裡面的工作人員會給車票蓋一個邊檢的章。之後就可以返回後車大廳通過安檢等車了。在我們蓋章前有三個人插隊,但是表示只是詢問一下。他們把票和身份證給到窗口,工作人員對著電腦敲了鍵盤,等了一小會兒搖了搖頭把身份證和票給回他們,說還沒好。他們就失望地到旁邊接著等了,似乎已經等了一會兒了。進入客運站前有人拿著人民幣和堅戈來詢問是否需要兌換貨幣。進入候車廳後會有人兜售電源插頭轉換器,10 元一個。

候車大廳裡哈薩克方向有兩個乘車口,一個是到雅爾肯特另一個是到阿拉木圖。工作人員隔一會兒放一波人到大巴車上,大巴車沒有發車時間表,坐滿了就會開走。第一站非常近,所有人帶上行李下車進入中方的出境廳。在進入出境聽前會有工作人員檢查護照和車票並在車票上打孔。進入出境聽後排隊在自助機上刷護照和驗臉,然後行李過安檢,最後來到邊檢的人工窗口。邊檢詢問的仔細,所以隊伍緩慢。詢問的問題包括但不限於:去哈薩克做什麼?(旅遊、工作)在哈薩克呆多久,都去哪裡?你的職業是什麼?是否是少數民族?如果過往出入境記錄有缺失,也會詢問當時去了哪裡。我更新護照的時候填寫要去土耳其旅遊,但後來並沒有去,所以跟我確認了很多遍這次是否要去土耳其。還叫來另一位工作人員仔細看了我的護照,我也給他們看了行程表和回程機票。蓋了出境章後就再排隊上大巴,幾分鐘後達到哈方入境廳。下車前會有佩戴手銬的哈方人員上車檢查一次護照,等大廳人少後乘客才能從大巴上下來進入入境廳。邊檢查看護照、拍照、蓋章,沒有詢問問題。然後安檢行李,再次排隊上大巴。出了中方出境廳的時候和進入哈方入境廳的時候都有洗手間。由於上大巴沒有指示牌,我們差點上了一個旅遊團的大巴。後來上了大巴後還有些擔心大巴會不會是直接去阿拉木圖的。直到大巴駛出高速我們才松了一口氣。

從霍爾果斯汽車站到雅爾肯特大概花了三個小時,大巴上上下下每次都要等待,耽誤不少時間。到達亞爾肯特車站後,有很多出租車詢問是否要去阿拉木圖。車站後面有洗手間,衛生堪憂,收費 50 堅戈或 1 人民幣。出站口有小商店寫著出售 SIM 卡,附近也有幾家常見的電信營業廳。我們使用 2GIS 應用,步行到附近的 Halyk Bank 的 ATM 取了 100,000 堅戈,招商銀行短信提示取款人民幣1649.86元,招行手機應用中可以看到還有額外 10 元手續費。由於已經很餓,所以在最近的一家餐廳 Sunday 吃的午餐。服務員沒有懂英語的,於是拿手機給我們翻譯了一下菜單,我們點了一個 Sunday 拉麵和餃子、一杯摩卡咖啡和一杯檸檬紅茶。拉麵本身是方便麵,但是湯很不錯,餃子是肉餡包的圓圓的像一個個小元寶。餐廳出品和服務都很好,當時不知道哈薩克是否要給小費,而且小票上似乎已經加收 10% 的費用,所以我們就沒有另給小費。

步行到酒店,酒店前台阿姨也完全不懂英語。我們把 Agoda 預訂單給她看,但是預訂單上是英語她還是看不懂。於是我們只好指著入住日期和離店日期跟她解釋我們要住兩晚。她跟我們比一晚 10,000 堅戈,我們付了錢,她帶我們去看一樓的一個房間,那是一間雙床房。我們告訴她我們想要一間大床房,然後她給我們拿來了一次性牙刷!再次溝通清楚後她領我們到了二樓的大床房,加收了 2,000 堅戈。門口的服務員告訴我們早餐是七點到十點。房間裝修沒多久,壁紙窗簾和床品的很新,毛巾和暖氣片很舊。房間裡有一個茶几、一張桌子、兩把有靠背的椅子和兩個床頭櫃。電源插座有三個也夠用,還有一台未插電的冰箱在窗台。在牆上高高地掛著的電視是好的,機頂盒也是好的,雖然沒有遙控器但都可以通過按鍵操作。不過由於沒有連接機頂盒和電視機的信號線,所以無法看電視。似乎也沒有 WiFi,由於溝通不暢所以也沒再去問。淘寶上買的電話卡,按照指引插入後打開漫遊和 4G 後並沒有網絡。還好當時作為備用開通了移動的漫遊(1 GB 流量,30 天有效期,17.1 元,北京 IP,更高的牆,不過機場還能用),詢問淘寶客服後,客服讓把卡上的編號發給他,他在後台操作後手機就連上網了。我檢查過 APN,前後沒有改動過所以就是需要客服手工操作下,這個流程比較坑。這張流量卡是 10GB 流量,30 天有效期,87.89 元,華沙 IP。兩張卡漫遊的網絡都是Beeline KZ,移動 APN 是 cmnet,流量卡 APN 是 plus。網絡速度不錯,在 4G 和 4G+ 間切換。房間裡沒有熱水壺,不喝水可不行,所以硬著頭皮去問。然後從前台拿來了一個水垢非常厚的電熱水壺。洗了之後燒了一壺水。水還沒晾涼的時候聽到敲門聲,是另一個中國客人,來拿電水壺,說酒店只有這一個電水壺。酒店窗口曾經有紗窗,但是翻新後似乎還沒裝上新的紗窗,好在有個拖地的沙簾,可以當作紗窗阻擋飛蟲。

晚餐去吃的,拌麵和炸餃子都不錯,奶茶雖然有些淡,但是很大一壺。一共大約 4,000 堅戈。結賬的時候由於也是看到 10% 的費用,所以沒有另付小費。中午那家找零後沒有給小票,但是這家給了小票。回酒店翻譯了一下,小票最低部有兩行字大意是歡迎給服務員小費,但是給不給由您來決定。所以可能還是應該再留一些小費,下次再有機會吧。谷歌翻譯有時候很能誤導人,比如我們在點飲料的時候,奶(milk)茶被它翻譯成了摩洛哥茶。吃完飯在附近 Toimart 超市買了罐阿拉木圖啤酒(為了解渴和解饞)和一小盒 NIVEA 霜(天氣乾燥,腳踝都有花紋出現)。進超市購物前需要在自助存包櫃存包。回酒店的路上有的路段沒有路燈,可以看到新月中的黑色部分以及頭頂正上方的北斗七星。路上的狗體型毛色各異,但是都很從容。冰啤酒好喝,酒精 4.4 度,罐體上只有哈薩克語和俄語。NIVEA 鐵盒上也沒有英文,只多了一個烏茲別克語。浴室衛生一般,有一個浴缸固定在一個鐵架子上,洗澡時站在浴缸裡鐵架子搖搖晃晃的感覺不太安全。浴缸邊緣的牆上有個金屬構件,應該是裝浴簾桿的,但是沒有浴簾桿也沒有浴簾。所以洗完淋浴洗手間地面會到處都是水。馬桶蓋沒有緩衝,如果推下去的話會發出巨響,洗手池的管道底部卡了一隻牙刷。衛生紙餘量不多且富有摩擦力。鏡前的架子上有免費的一次性牙刷、牙膏(廣州產)、肥皂和洗髮水。洗髮水上有哈俄英三語寫著洗髮水以及 I ♥️ QAZAQSTAN,背面寫作 Made in P.R.C。吹風筒工作正常,床也軟硬適中。現在的溫度很舒服不用開空調,夜裡沒有噪音,睡的不錯。


附加信息:

外交部領保中心祝您健康平安!請嚴防假冒使領館名義的電信詐騙,注意槍擊、砸車盜搶等治安事件,留意災害預警,不參與賭博活動。請注意疫情防護。下載「中國領事」APP了解更多信息。哈薩克斯坦報警電話:102,緊急救助電話:103。外交部全球領事保護與服務應急熱線+86-10-12308/65612308。駐哈薩克斯坦使館領保電話+77017470186;駐阿拉木圖總領館領保電話+77272362230。中國文化和旅遊部溫馨提示,文明旅遊「三講三不」:講安全、講禮讓、講衛生;不大聲喧譁、不亂寫亂畫、不違法違規。」中國移動
您已抵達哈薩克斯坦,出境用移動,心級服務,一路隨行! 【上網】3元包3M,每天30元封頂,暢享1GB高速流量,達量限速,無需辦理即可享用 【通話】接聽電話、撥打內地及漫遊地均爲0.99元/分鐘 【短信】發內地0.39元/條,接收免費 【優惠】回復GMYDYL可訂購國漫優惠包;如需特價訂購機票、酒店等,可下載「無憂行」 【客服】更多資費及服務,請免費撥打+8613800100186 【備註】上網請確保手機數據漫遊已打開,撥打內地號碼請加撥+86,撥打漫遊地號碼請加撥+77,長按「0」撥出「+」 中國移動

當前堅戈與人民幣匯率:
100,000 KZT = 1650 CNY
10,000 KZT = 165 CNY
5,000 KZT = 82.5 CNY
1,000 KZT = 16.5 CNY

本文更新於 2024/06/09。

分類
程序

使用 Python 或/和 Cloudflare Worker 代理 NextDNS 的 DoH 服務

Previously:使用 nginx 代理 NextDNS 的 DoH 服務

使用 Cloudflare Worker 代理 NextDNS 的 DoH 服務

使用 tina-hello 的 doh-cf-workers 項目可以方便的建立一個 DoH 代理。由於只需要一個 index.js 文件,所以我這裡轉載一下。默認的示例是 Cloudflare 的 DoH,切換成 NextDNS 的話只需要修改 doh 和 dohjson 的網址,其他都不用動。

// SPDX-License-Identifier: 0BSD

const doh = 'https://dns.nextdns.io/YOUR_ID/YOUR_TAG'
const dohjson = 'https://dns.nextdns.io/YOUR_ID/YOUR_TAG'
const contype = 'application/dns-message'
const jstontype = 'application/dns-json'
const r404 = new Response(null, {status: 404});

// developers.cloudflare.com/workers/runtime-apis/fetch-event/#syntax-module-worker
export default {
    async fetch(r, env, ctx) {
        return handleRequest(r);
    },
};

async function handleRequest(request) {
    // when res is a Promise<Response>, it reduces billed wall-time
    // blog.cloudflare.com/workers-optimization-reduces-your-bill
    let res = r404;
    const { method, headers, url } = request
    const searchParams = new URL(url).searchParams
    if (method == 'GET' && searchParams.has('dns')) {
        res = fetch(doh + '?dns=' + searchParams.get('dns'), {
            method: 'GET',
            headers: {
                'Accept': contype,
            }
        });
    } else if (method === 'POST' && headers.get('content-type') === contype) {
        // streaming out the request body is optimal than awaiting on it
        const rostream = request.body;
        res = fetch(doh, {
            method: 'POST',
            headers: {
                'Accept': contype,
                'Content-Type': contype,
            },
            body: rostream,
        });
    } else if (method === 'GET' && headers.get('Accept') === jstontype) {
        const search = new URL(url).search
         res = fetch(dohjson + search, {
            method: 'GET',
            headers: {
                'Accept': jstontype,
            }
        });
    }
    return res;
}
#測試下 GET 請求
curl -H 'accept: application/dns-json' 'https://YOURPROJECT.YOURWORKER.workers.dev/dns-query?name=ft.shaman.eu.org&type=A'
#POST請求由於需要構造 DNS 參數,所以就不測了

使用 Python 代理 NextDNS 的 DoH 服務

輕量級的 API 框架我不熟悉,所以這裡還是用 Django。

#file:app1/views.py
from django.http import HttpResponse
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import requests

@csrf_exempt
def forward_to_doh(request):
    cloudflare_doh_url = "https://YOURPROJECT.YOURWORKER.workers.dev/"
    contype = 'application/dns-message'
    jstontype = 'application/dns-json'

    try:
        if request.method == 'GET':
            if 'dns' in request.GET:
                params = {'dns': request.GET['dns']}
                headers = {'Accept': contype}
                response = requests.get(cloudflare_doh_url, params=params, headers=headers)
                return JsonResponse(response.json(), status=response.status_code)
            elif request.headers.get('Accept') == jstontype:
                response = requests.get(cloudflare_doh_url + '?' + request.GET.urlencode(), headers={'Accept': jstontype})
                return JsonResponse(response.json(), status=response.status_code)
        elif request.method == 'POST':
            if request.headers.get('content-type') == contype:
                headers = {'Accept': contype, 'Content-Type': contype}
                data = request.body
                response = requests.post(cloudflare_doh_url, data=data, headers=headers)
                return HttpResponse(response.content, content_type=response.headers['Content-Type'], status=response.status_code)
        else:
            return JsonResponse({'error': 'Unsupported request method'}, status=405)
        return JsonResponse({'error': 'Not Found'}, status=404)

    except requests.exceptions.RequestException as e:
        return JsonResponse({'error': str(e)}, status=500)
#file:mysite/urls.py
from django.urls import include,path
from app1 import views

urlpatterns = [
    path('YourSecNextDns/', views.forward_to_doh, name='forward_to_doh'),
    path('i/', include('i.urls')),
]
#測試下 GET 請求
curl -H 'accept: application/dns-json' 'https://YOUR_DOMAIN.LTD/YourSecNextDns/?name=ft.shaman.eu.org&type=A'

上面的請求經過三次請求,速度(高達秒級)自然是比不了直連。但是為了體驗 DoH,還是可以用用看。反正網速本身也不快,DNS 慢一點完全可以怪到網速上。