前言
隨著我博客來自大陸的流量越來越多, 我逐漸開始有一點擔心. 雖然我已經屏蔽了國內搜索引擎的 Spider, 但是來源於大陸的流量還是和來源於美帝的不相上下. 從各個地方 Ping 的結果也不樂觀, 大陸地區已經出現隨機丟包的現象, 而且很嚴重. 我暫時沒有搞清楚這是針對我的域名還是針對 Cloudflare CDN 的流量.
目前正值建襠百年特別時期, 地鐵站的安檢人員都肉眼可見的增加了數量, 更別說在線管控了. 更加誇張的是, 著名反動博主編程隨想都在5月中旬被消失 ( 我為此傷心了真的非常久 ), 論技術, 我肯定都配不上給編程隨想提鞋, 況且我在用 BugPress 作為博客程序; 要是誰哪天看我不爽來搞我, 我肯定分分鐘去吃國家飯.
然而從我的角度來說, 我肯定不會因為局勢 intense 而乖乖閉嘴: 要我閉嘴不如先去叫我死. 但是隨著我的成長和文章數量的增多, 日後我肯定要浪費大量時間在安全防範上, 而且我目前肉身還在牆內, 物理安全得不到保障.
綜上所述, 雖然我真的很不捨得放棄將近一半的流量, 我還是得這麼做, 幹掉所有來自大陸的流量 (不包括香港, 以及本來就不包括台灣) . 這樣, 至少在我肉身在牆內的階段應該不會有人來找我麻煩 — 這只是一個戰略讓步, 一旦我肉身過牆, 我會立即取消這個設定.
設置
根據國家地區自動 Ban 流量
我目前在使用 Cloudflare 作為我的域名提供商和 CDN. Cloudflare 是有設定可以幹掉來自某些地區的流量的 (在防火牆設定裡) , 但是很不幸, 如果要顯示一個頁面說明為什麼無法訪問 , 這是要收錢滴. (所以不在考慮範圍內)

所以我只好曲線救國. Cloudflare 有一個大家都不怎麼用的 Tab 叫轉換規則, 可以在滿足特定條件重寫路徑. 這樣的話, 只要對那個路徑重定向, 就可以達成我的目的.

(ip.geoip.country in {"KP" "CG" "CD" "CF" "SY" "TD" "TM" "LA" "GQ" "TJ" "YE" "SA" "UZ" "BI" "ER" "IR" "CN" "BH" "SD" "BY" "GW" "AZ" "AE" "DJ" "VE" "CM" "TG" "CU" "AF" "EG" "VN" "OM"} and not ip.geoip.country in {"TW" "HK" "T1"} and http.host eq "justin.education")
因為我不太確定 Cloudflare 有沒有把香港、台灣算作中國區, 所以我特別設置了兩地的白名單. 另外, 如果有 Tor 出口節點在大陸的網友, 訪問我的博客也不會成問題. (真的會有嗎)

最後, 我再設計一個轉發 URL 就完成了. 現在只要被檢測到來自大陸的流量, 在源服務器有任何 contact 之前就會被 Cloudflare CDN 定向到 ban.justin.education
.

這個頁面是託管在 pages 上的. 因此如果你是從大陸地區訪問, 流量都不會到達我的服務器, 全部在 CF 的網絡中導來導去, 因此應當可以立刻看到這個頁面.
切換到 VPN 之後立刻解除 Ban
首先我要聲明, 除了我自己, 我是不會奢望任何人為了我的博客費勁吧哈的去裝一個 VPN 然後再去刷新頁面的, 所以現在要配置的功能基本是雞肋之至, 除了心理安慰以外不能給予任何實際好處, 我要實現這個功能完全是沒事幹, 完畢.
好, 那麼怎樣在訪客切換了 VPN 之後跳回主站點呢…? 其實大致的方法還是和上一個是一模一樣的. 當滿足 (主機名 = ban.justin.education) && (國家 != any 不民主國家)
的時候, 首先執行 redirect to "/removed"
, 然後設置一個頁面規則, 當滿足 path = ban.justin.education/removed
, 就 redirect to justin.education
, 這樣不就圓滿了嗎!
理想很豐滿啊, 但是瀏覽器緩存的問題還是不能忽視. 我分別拿手頭有的 safari 和 firefox 做了測試. 測試內容都是先用牆國的網絡訪問一遍博客 -> 被 Ban, 然後再切到美帝的線路刷新頁面.
Safari 的表現很不錯, 總體跳轉順序如下:
(中華網絡打開) justin.education -> ban.justin.education (切換到美帝線路, 刷新) ban.justin.education -> ban.justin.education/removed -> justin.education
隱身模式下的 safari 有一點迷惑性, 我觀察到跳轉順序是這樣的, 不知道是不是個例
(中華網絡打開) justin.education -> ban.justin.education (切換到美帝線路, 刷新) ban.justin.education -> ban.justin.education/removed -> justin.education -> ban.justin.education -> ban.justin.education/removed -> justin.education
對於上面的觀察, 我的理解是, safari 緩存了 justin.education -302-> ban.justin.education
的邏輯, 然後無腦重做了一遍, 然後又給整回來了, safari 於是將緩存過期, 不再跳轉.
Firefox 就又點差強人意, 切到美帝線路 Ctrl+R 之後愣是啥都沒動. 非要我 Ctrl+Shift+R 清楚緩存刷新之後才給我跳了回去.
總之, 這個配置現在也不成問題了.
結語
有個社會學家曾經說過, 如果你來到一個國家, 看到報紙上都是好消息, 那麼這個國家的好人其實都在監獄裡. 現在本該自由的網路也被籠罩在言論審查的陰影下, 不得不說是民族的巨大不幸.
我並不會因為 Ban 掉大陸流量而停止寫博文, 相反, 知道創作內容不會被大陸網警看到反而去掉了我的枷鎖, 讓我不用再斟字酌句的避免敏感詞了. 我對這個博客的未來很有信心, 我也會不斷的向其中添磚加瓦!
(另: 為了安全性考慮, 我之後有很大可能性把博客做成靜態頁面打包上傳到 cloudflare pages 上, 或者嘗試一些去中心化方案, 比如 zeronet+tor.)
剛發現此博客,把博主誤解成港台人啦,原來博主和俺一樣喜歡寫傳統中文:)
一開始以爲博主的博客是類似內容農場,不過仔細一看又發現不對,轉載編程隨想文章註明了出處,而且內容風格也完全不像內容農場轉載的內容。
博主加油。