科技改變生活 · 科技引領未來
編注:本文是少數派2021年度征文活動#生活21標簽下的入圍文章。本文僅代表作者本人觀點,少數派對標題和排版略作調整。和往年不同,今年文章的數據表現將很大程度上決定征文活動的最終走向,包括「雙倍稿酬(由飛書贊助)」活動獎勵、最終票選名單以及
編注:
本文是少數派 2021 年度征文 活動 #生活 21 標簽下的入圍文章。本文僅代表作者本人觀點,少數派對標題和排版略作調整。
和往年不同,今年文章的數據表現將很大程度上決定征文活動的最終走向,包括「雙倍稿酬(由飛書贊助)」活動獎勵、最終票選名單以及征文獎品類型。
前言
環境介紹
我的寢室是一個大約 15 平的雙人間,由于不是上床下桌,兩個人的床和衣柜占據了寢室中絕大多數空間,剩下留給我的私人空間,僅是一張 120cm 長,帶有書架的學習桌,加上周圍零零碎碎的空間,總共約 4 平米大小。在這個不大的空間內,僅僅放下兩臺顯示器都稍顯局促,可能學校在設計之初就并不希望我們花費大把的時間浪費在寢室的書桌上(笑)。
圖源自網絡
在這個不大的空間內,原本我并沒有什么期待,能夠打個游戲/吃個外賣,就已經不錯了。我是一個愛折騰的人,在遠在 1300KM 的家中,我早就部署好了全屋 HomeKit,無死角的 Wi-Fi 網絡,NAS 等等極客愛玩的東西。但是對著寢室這巴掌大的地方,對于狹小空間無數次的失望和抱怨充斥這我學習之外的時間。“為什么不讓他變得更舒適”,自從疫情返校之后,這個想法就一直縈繞在我的腦中。
舒適的網絡,是一切的開始
網絡是現代人生活的基礎,也是我們與世界連接的橋梁。好的網絡環境是我們這些科技愛好者舒適生活的大前提,然而我們宿舍的網絡環境并算不上優秀。
宿舍的基礎網絡,問題很多
現在的校園,基本上都是以教育網為主,我們學校也是如此。校園網有其獨特的優勢比如:
但是縱使有這些優點校園網對我來說也有一些不可忽視的問題:
繁瑣的認證對于桌面設備而言還有簡潔的辦法,但是對于移動設備而言可以說是災難級的體驗,特別是學校封鎖了 HTTP 認證方式而全部轉為 HTTPS 認證之后。不過好在學校也開放了 802.1x 的認證方式,使得移動端的體驗稍微好了一些。而同時在線設備數量限制對于我來說則是一個巨大的痛點,這意味著設備數量繁多的我必須要套一層 NAT 并且設置端口轉發或者 DMZ 才能獲得較為不錯的遠程和局域網體驗。
而流量計費則是徹底扼殺了我對于校園網的幻想,如果按照我的網絡消耗量來看,將會是一筆不可忽視的支出,相比起來 100 Mbps 的帶寬反而并不那么不可接受。
不過好在我生活的宿舍樓還算比較新,近幾年移動寬帶也把光纖拉進了每個寢室內。這對于有極大流量需求的我來說算是一根救命稻草,不過移動寬帶也有一些致命的缺點:
我改了一點點,就差一點接近完美
兩種網絡都有他們獨自的優勢和劣勢,那對于一個成年人來說,當然是「我全都要」,取其所長,棄其所短。那么接下來我就來和各位盤盤我的宿舍網絡結構。
首先先上一個網絡拓撲圖:
入網
首先,移動的光纖接入房間之后,連到光貓上,為了獲得最好的上網體驗,肯定需要使用橋接模式進行 PPPoE 的上網設定,好在移動校園寬帶本身為了多播(讓同寢室多個同學用不同的寬帶賬號),本身就是帶有 VLAN 的橋接模式,這省去了我很多時間。光貓 LAN 口直連我的路由器—— Unifi Dream Machine Pro (以下簡稱 UDM Pro)的 WAN 口進行播號上網。給宿舍局域網,我設定了 192.168.31.0/24 的網段,這也是我宿舍的主要局域網絡,各個設備都在同一個網段下進行通信。
而校園網,則需要專門照顧一下,原本校園網的設計是從宿舍墻面上的 86 面板上連接路由器或者交換機,學生通過進行自建局域網或者用自己的 IP 分配名額給不同的設備分別獲取 IP,而由于我平時只有兩臺主力桌面端設備—— PC 與 Mac mini 需要連接校園網,所以我使用 VLAN 技術對其進行劃分:
VLAN:Virtual LAN,又稱虛擬局域,是一種建構于局域網交換技術(LAN Switch)的網絡管理的技術,可以借此技術透過控制交換機有效分派出入局域網的分組到正確的出入端口,達到對不同實體局域網中的設備進行邏輯分群(Grouping)管理,并降低局域網內大量資料流通時,因無用分組過多導致壅塞的問題,以及提升局域網的信息安全保障。
而劃分 VLAN 再加以適當的防火墻規則就可以隔離校園網和局域網中的廣播,讓我的各個設備不至于串臺,也能我的兩個主力設備獲得獨立的校園網 IP。
寬帶網線從光貓接出之后,連接到 UDM Pro 的 WAN 口上,通過 PPPoE 進行播號。校園網端口則直接連接到 UDM Pro 的 LAN 口上,在配置中為其專門劃分一條 Campus LAN 的 VLAN 網絡,設定為 VLAN-only 網絡,而局域網則設置為 LAN 打開 DHCP 服務器。
如此設置,兩個網絡環境就已經接入我的路由器了。
網絡劃分
UDM Pro 的下級,連接著我需要有線上網的設備,比如:PC,Mac mini,Apple TV 4K,PS5,樹莓派,以及無線接入點 (Access Point)。不過下級網絡就稍顯復雜,為了讓 PC 和 Mac 都可以同時連接寬帶,首先要在 UDM Pro 連接兩臺桌面設備的端口上設定為 Untagged口(由于 UnifiOS 中的 VLAN 設定與其他廠商邏輯不一樣,這里用更大眾化的表述方法)。在 macOS 的網絡設定中可以很輕松的劃分一條或者多條 VLAN,而 PC 由于主板就帶有雙網卡,我就毫不客氣的接上了兩條網線,每個端口對應一個局域網/校園網。
光是接上網線并不能讓設備在寬帶和校園網中無縫穿梭,于是我針對我需要訪問的特定網絡,在設備的路由表中指定了學校的網關,和更小的「躍點數」2,來讓需要用學校路由訪問的 IP 段,在設備中獲得更高的優先級。同時,也指定了 0.0.0.0 以及更大的「躍點數」來讓非校園網內容統一走寬帶的路由地址。至此,我的兩臺主力設備才算完美的接入到「雙網絡」環境中。
不過稍顯可惜的是 UDM Pro 并不支持雙 WAN 接入,如果是支持的設備(比如 OpenWRT/RouterOS 等系統的設備),僅需要在路由器上配置規則就可以做到局域網內的所有設備均可以訪問兩個廣域網而非對于特定設備設定路由表制作雙局域網了。
而對于局域網內的其他一些設備比如 Apple TV 4K,我則直接使用 Mac mini 上的 Surge 進行接管,以獲得更良好的沖浪體驗。
還有一些不足,但是我克服了一些
經過我的改造,寢室的網絡確實已經接近完美的狀態,但是還有一個暫時沒有找到方法克服的痛點,那就是校園網的 IP 問題,由于學校并不可能給我們分發固定 IP,而自己設定固定 IP 的時候很有可能會和其他同學的設備沖突導致無法上網。因此在兩臺在雙局域網的環境下的設備,我依然選擇了 DHCP 上網的方式。
平時我在實驗室工作的時候,偶爾需要使用 Microsoft Remote Desktop (以下簡稱 RDP) 遠程訪問我寢室中的 PC 來處理一些 macOS 無法處理的數據。
不過由于寢室網絡和實驗室的網絡并不在同一個二層網絡中,所以按照主機名進行遠程登錄的方法就被堵死了,但是通過 IP 還是可以借由學校的三層交換機互相訪問。而因為 IP 地址是由學校的 DHCP 服務器分發的,會隨著時間變化的 IP 就成了令我頭疼的問題,因此我在我的 PC 上設置了一個 DDNS 服務:
DDNS:Dynamic DNS又稱動態DNS 是域名系統(DNS)中的一種自動更新名稱服務器(Name server)內容的技術。根據互聯網的域名訂立規則,域名必須跟從固定的IP地址。但動態DNS系統為動態網域提供一個固定的名稱服務器(Name server),透過即時更新,使外界用戶能夠連上動態用戶的網址。
簡單的來說,當你需要訪問一個網址的時候,你的電腦會先向 DNS 服務器請求這個網址對應的 IP 地址。通過 IP 地址,設備之間才可以建立起連接。而 DDNS 則是把我動態的 IP 地址映射到 DNS 服務器上的一種服務,每當我的 IP 變化,DDNS 服務就會把變更后的 IP 地址反映給 DNS 服務器。這樣當我輸入域名網址時,DNS 服務器就能正確的返回我 PC 目前的 IP 地址。
通過我自己一直在用的 CloudFlare 托管我的 IP 地址,這樣在使用 RDP 進行訪問的時候只需要通過我的域名進行 DNS 解析,就可以指向正確的遠程地址了。
而當校園網 IP 變更時,我也設置了一個基于 Python 的郵件提醒服務。這樣不管我寢室的 IP 如何變更,我都可以最快的知道,以防部署的 DDNS 服務失效,無法訪問寢室設備的窘境出現。
至此,我寢室的網絡結構搭建,到這里結束了,雖然不排除未來會有升級的可能性,但是目前的結果對于我來說已經非常滿意了。
自動化的娛樂系統,是幸福感提升的根源
搞定了網絡,接下來的著眼點就應該在從實驗室回歸的短暫的空閑時光了,但是空閑的時間有限,經常有時候會因為媒體搜刮的煩惱不愿意去占用寶貴的休息時間,最后放棄一個影片或者劇集。為此我改造了我的媒體流程。
如何管理我的媒體,才能緩解一天的疲勞
我的影音管理主要分為兩個部分,在線流媒體和本地媒體。在線流媒體主要用來看一些及時更新的劇集電影:比如 Disney+,Netflix,YouTube 等等,這些流媒體我都在我的 Apple TV 4K 上進行觀看,配合 tvOS 儀式感滿滿。而從流媒體直接觀看內容,也省去最麻煩的資源搜刮過程。
但是對于一些不在這些主流流媒體的內容,比如日本動漫新番,以及日劇。我則采用了本地媒體進行觀看的方式,通過 Plex Server 管理本地劇集,搜刮元數據,再通過 infuse 客戶端(iPhone/iPad/Mac/Apple TV)進行觀看。
經歷過早些年番劇下載時期的朋友肯能會有所感觸,資源的收集和整理是一件相當痛苦的事情。為此,我搭建了我的自動追番系統:
自動追番系統
我的自動追番系統主要搭建在我的樹莓派上,依靠一個外置 2.5 寸機械硬盤存儲數據,詳情可以參考這篇文章樹莓派搭建低配版文件存儲及家庭影音庫。可能會有人問為什么不選用 NAS ,第一是因為相比于樹莓派 NAS 的價格較高,第二則是使用 3.5 寸硬盤的 NAS 非常吵鬧,非常不適合寢室這種狹小的環境。
而在樹莓派中,自動追番系統主要依靠 qBittorrent 這個 BT 軟件。qBittorrent 支持 RSS 訂閱下載。通過「蜜柑計劃」的生成的個人 RSS 訂閱鏈接,qBittorrent 可以在你訂閱的每一部番劇追番的時候收到RSS推送更新。
由于 qBittorrent 中 RSS 的自動下載規則設置起來相當繁瑣,因此我使用 qBittorrent Web API 和「快捷指令」搭建的「追番規則建立器」來簡化添加自動下載規則這一步驟。這樣搭建下來,每一季度僅需要兩步:
簡簡單單兩步設置,就完成了一部番劇的訂閱和歸類。在這部番劇更新的周期內,一旦更新,第一時間,qBittorrent 就會開始自動分類下載,下載完成之后,配合 Plex Server 的元數據搜刮整理功能,你就可以在你所有設備使用 infuse 上無感的追番看番。
當然如果有其他搜刮的資源,也可以用「快捷指令」配合 qBittorrent Web API ,直接用右鍵選單中進行下載
完美的游戲聯網體驗,往往就是一小步
在網絡搭建的部分的開頭,我提到過移動寬帶的丟包多,NAT 類型差,不適合主機聯機游戲等等問題。當然這些問題解決的方法也很簡單,那就是給主機掛一個加速器。我是一個多年的 「UU 加速器」用戶,因此也知道通過 PC 給主機加速的操作著實復雜且不友好,先不提復雜的代理地址配置,并且在想要給主機加速的時候 PC 還要保持常開,并且需要在電腦上點擊加速,一旦電腦不加速,主機就會斷網。使用代理設置之后主機客戶端和其他聯網設備也不在一個網段中,無法通過局域網遠程游玩進行暢玩。這著實稱不上優雅方便。
目前我體驗過最為方便的加速方案當屬路由器中自帶的 UU 加速插件:使用簡單,無需額外配置,手機端切換節點,自動加速等等優勢令我眼饞。然而可惜的是目前市面上僅有寥寥數款路由器支持這一功能, UU 官方也并沒有給 Unifi 系列網關進行適配(笑)。
而我的解決方案則是在樹莓派上用 Docker 掛載一個 UU 加速器的 OpenWrt 插件,只需要讓主機的網關和 DNS 地址都指向 UU 加速器容器的地址,并且在手機上綁定一回就可以獲得和路由器自帶的加速插件相同的體驗:
并且這個版本的 UU 加速器還可以同時加速兩個設備,加上電腦與手機端,一份會員可以同時加速四個設備,這樣算下來 UU 加速器原本高昂的售價也變得超值了。
操控的便利性,是舒適感的敲門磚
有了網絡基礎和娛樂基礎,懶人的智能化就是下一步目標。對于蘋果用戶來說 HomeKit 一定是首選,一來有著極高的安全性,全部依靠局域網廣播實現控制。而來還有 Homebridge 這樣的萬能插件,可以給我更多操作的可能性。
HomeKit 設備,不多不少剛剛好
除了上文提到的 Apple TV 4K ,我的寢室還有一些不貴的 HomeKit 原生配件。寢室不大,能接入智能家居的配件也不算很多,但是各個都能提升我的生活質量。
溫度控制——Aqara P3 空調伴侶
好在學校并沒有使用中央空調來降溫,獨立的懸掛式空調讓智能化變得簡單。我選用了Aqara P3 空調伴侶,其原理也很簡單,是通過安置在插座上的紅外發射裝置學習空調的遙控器發射信號來控制空調。我簡單設置了幾個自動化,來實現在夏天時回到寢室前提前制冷,以及應對出門忘關空調導致跑走巨量電費的應急措施。
Nanoleaf Essentials light bulb
這款燈泡主要是由于我對 Thread 協議的好奇而購入的,現在擺放在我書桌的另一側當照明補足使用,偶爾還能當當氛圍燈。
滿打滿算我的寢室也只有這兩件是原生接入 HomeKit 的配件了,剩下的一些控制都小用了一些奇思妙想。
我的第三方控制整合主要依靠 HomeBridge 插件,相信深入玩過 HomeKit 的朋友都不陌生:
SwitchBot Hub mini & SwitchBot Bot
改造宿舍強電是一個非常不明智的選擇,一來可能會埋下安全隱患,而來校規中也有明令禁止的條款。因此我選擇了一個討巧的方法來控制兩站宿舍的日光燈。那就是日本品牌的 SwitchBot Bot,開關控制器。這個小玩意原理非常簡單,通過藍牙接收信號之后可以伸出一個機械卡扣,用物理的方式控制開關的通斷。
一方面不用頂著安全和校規隱患改造開關,另一方面這個小東西也可以隨時帶走。再接入 SwitchBot 家的 Hub 之后,就可以用 HomeBridge 接入到 HomeKit 當中控制宿舍兩盞燈的狀態了。
而 SwitchBot Hub mini 的紅外控制功能也十分強大,可以自主定義并且學習電器的紅外遙控信號,然后通過 Homebridge-Switchbot 插件橋接進 HomeKit 中后,僅需要一些簡單的設置就可以控制我寢室顯示器的 KVM,再配合上細致化的場景設置。四臺設備可以無縫的在一臺顯示器上切換顯示輸出內容。
通過 HomeKit 喚醒和的 Mac 和 PC
相比其他用 HomeKit 實現的花里胡哨的功能,喚醒 PC 和 Mac 顯然有用多了。因為我 PC 的主板和 Mac 都支持「網絡喚醒」功能,因此使用 HomeBridge 中的 Homebridge-WoL 插件,就可以輕松把 PC 和 Mac 的電源接入整個 HomeKit 系統中。
相比于傳統的開機棒,使用 Homebridge + HomeKit 的安全性和整合度更高,響應迅速。不論是在局域網還是廣域網中,都可以快速控制寢室中的電腦設備。再配合「晚安」場景關閉 PC ,到達實驗室打開「工作」場景拉起 PC 等等自動化,實現不論是在工作中,還是上床休息,都可以按照所需狀態打開或者關閉 PC。
當然除了 PC 和 Mac,其他一些諸如路由器,樹莓派以及 PlayStation 5 也可以通通用這個插件控制。
通過 HomeKit 控制各類服務
實體的電器都接入 HomeKit 之后,虛擬的服務也不能少。不過相比于實體電器來說,接入服務需要一些小技巧。我這邊挑選 qBittorrent 舉個例子。插件上,我僅使用了 HomeBridge-Dummy 用于虛擬需要控制服務的開關。而控制 qBittorrent 我則用了家庭自動化中自帶的「快捷指令」,根據 qBittorrent 給出的 Web API:
再根據格式添加到 URL 命令中:
在點按 HomeKit 中的虛擬開關時,HomeKit 家庭中樞就會調用這一條快捷指令,向指定的 HTTP 地址發送請求,從而觸發服務內的開關。
同樣的方法也可以用于 Docker 容器的啟停,Surge 上代理的開關,等等稀奇古怪的操作,不過可惜的是更新到 iOS 15 之后,HomeKit 自動化中的 SSH 指令就不能使用了,不然還可以對服務做更加細致的控制。
統籌規劃,Web頁面不可少
容器管理
我的所有服務基本都部署在樹莓派的 Docker 上,而用命令行管理 Docker 容器是一件很痛苦的事情,因此我選擇 Portainer 作為 Docker 的管理器。Portainer 作為一個輕量級容器管理 UI,可以替代幾乎所有 Docker 的命令行操作,同時升級或者更改容器環境變量也變得異常簡單,再也不需要因為一條命令寫錯而反復去找容器的 ID。作為 UI 而言,Portainer也十分美觀,并且在最新版本也適配了黑夜模式。并且 Portainer 也有可供使用的 HTTP API,通過前文講述的方法,可以很輕松的把容器管理接入到 HomeKit 中(當然也可以用 Homebridge-docker 這個插件來管理)
入口管理
有了 Portainer 管理運行的各類容器,但是如何快捷的轉跳到 Portainer 等服務的 WebUI 界面呢。在搭建容器的時候,一般這些服務的的 WebUI服務 都會需要你在 IP 地址之后添加上繁瑣的端口號,比如:
這顯然給便捷管理帶來了不便,因此我在 Docker 中運行了一個 Nginx(一種常見網頁服務器) 來作為樹莓派的導航頁。Nginx 默認使用 80 端口,也就是萬維網端口,因此只需要在瀏覽器中輸入服務器的 IP 地址就會默認在后面添加 80 端口,轉跳到 Nginx 服務中指定的 HTML 網頁。
當然美觀的頁面也是必須的,作為一個網絡乞丐,我去搜刮了一段 CSS 代碼,完成了我的「服務器城門」,想要訪問或者管理我的任何一個服務,只要點擊對應的圖標即可。
當然,入口網址的地址我們同樣可以托管到 CloudFlare 上。通過 DNS 服務器會返回一個私網的 IP 地址,是僅限內網使用的域名。
結語
寫到這里,可能和大家想象的寢室桌面介紹大相徑庭,稍微收拾了一下桌子給大家看一下我并不算整潔的桌面。就我個人而言,服務和網絡相比于整潔美觀的桌搭更符合我的需求,
更像是在虛擬世界中搭建了屬于自己的桃源,可能這某種程度也和當下互聯網的某新型概念不謀而合,折騰的過程也確確實實變成了我枯燥的科研生活的調味劑。而這些項目雖然看起來繁多且復雜,但是大多數實際上手起來對于我這種非計算機科學的學生來說實現起來也不算困難。當然更重要的是有一個不妥協的心和去做的行動力,我想這可能是我作為一個剛入門的極客對于生活的態度和追求。
非常感謝可以看到這里的你,也希望我折騰的這些東西中或多或少可以對你改善自己的生活娛樂體驗有些許幫助!
馬原明