歡嘗鮮Win11預覽版的小伙伴很多,最近有人發現了一個問題,在家庭預覽版中少了SMB協議。對大多數小伙伴來說,這個名字好陌生,它到底有啥用?被精簡了之后如果需要它又怎么辦呢?咱們今天就來聊一聊吧。
SMB的全稱為Server Message Block,是微軟和英特爾在1987年制定的協議,主要是作為Microsoft網絡的通訊協議。從當前Windows的設置界面中可以看到,它現在主要是作為一種文件共享服務。
它的應用有很多,比如Windows PC之間的數據傳輸就可以使用SMB協議,另外其他平臺,比如Android系統只要安裝支持該協議的應用就可以跨平臺互訪了,這還不止,其實Unix等系統,包括本機的Unix雙系統,都可以通過這個協議來分享文件。
這么有用的功能為啥會被精簡掉呢?原因應該是多方面的,比如看看發布時間,就會發現它真的很古老了,所以安全性實在有點堪憂,而Windows家庭版的高端網絡能力、安全能力都稍遜于專業版,所以微軟應該是認為這個功能對家庭版首先不太重要,其次也更加不安全。
那么,如果SMB被禁用,又會帶來什么影響呢?這里得先說明一下,被禁用的是SMB 1.0,它的問題早就存在,從Win10時代就是默認沒有開啟的,而默認開啟的SMB直連功能,其實同樣基于SMB協議,而版本已經升到3.x了。
理論上說,對較新的設備,較新版本的操作系統,即使使用SMB協議,應該也不會受到影響。你說啥?家里的NAS、公司的服務器都已經很老了,大概只能用SM1.0。這也不用擔心,微軟表示已經啟用SMB 1.0的用戶不受這些更新影響,所以我們只要在升級前點擊Win鍵,輸入“Windows功能”,進入相關界面后啟用SMB 1.0就好了。
日,國內著名掌機廠商GPD推出的一款名為 MicroPc的口袋電腦正在 國外眾籌網站 indiegogo 眾籌中。 MicroPc配備6英寸 1280*720 屏幕,處理器采用英特爾“Gemini Lake”系列的Intel Celeron N4100四核心SoC,配備4 GB內存和128GB M.2 SSD存儲。
很多用戶在看了配置以后,感覺128G存儲空間有點小,在使用起來恐怕不是特別方便。如果想擴展 MicroPc的存儲空間,有哪些辦法呢?
當然,插U盤或者移動硬盤應該首選,MicroPc有三個USB-A和一個USB-TypeC端口,可以用作擴展存儲空間。此外,它還有一個microSD卡擴展口,最大支持 2T容量的 microSDXC擴展。
除了外部擴展,我們也可以更換內置SSD,隨著近期SSD價格的跳水,Sata接口的SSD已經接近0.5元/GB,M.2接口的SSD價格也有很大的下探,更換一個大容量的SSD也不失為一種選擇。對于不想拆機的用戶其實還有另一種方式擴展存儲,那就是利用SMB進行局域網共享。
我們需要有一臺支持Samba的智能路由器或者NAS,開啟這個功能,并保證MicroPc和Samba服務器在同一局域網內。
不知道什么時候開始,Win10系統中SMB功能默認關閉,我們需要手動去開啟該功能,找到 控制面板-程序-程序和功能-啟用或關閉Windows功能,然后找到SMB 1.0/CIFS File Sharing Support和SMB Clents,開啟這兩項功能。
確保用戶組中的Guest用戶權限啟用,然后打開我的電腦,添加網絡驅動器映射。在彈出的網絡文件夾中選擇Samba服務器中的文件夾。
之后就能在我的電腦中看到映射的磁盤了,只要機器在局域網內,都能正常的讀寫硬盤內的數據,用來找資料看視頻等都很方便,只是速度會受網絡情況的制約。
這個方案對于其他品牌的win10系統電腦也通用,隨著智能路由器的普及,相信使用這種方案的用戶會越來越多。
ZTM 0.1 中引入了 zt-app 框架 之后,原有的 ZTM 隧道功能交由 zt-tunnel[1] 來實現。在剛發布的 ZTM 0.2[2] 中加強了基于證書的訪問控制并增強了底層的文件系統來支持更加復雜的 zt-apps。
借著 ZTM 0.2 的發布,將之前的這篇進行更新:使用 zt-tunnel 來實現跨互聯網的 SMB 訪問。
SMB(Server Message Block)是一種網絡文件共享協議,用于在網絡上的計算機之間共享文件、打印機和其他資源。SMB 主要用于局域網,在局域網內能夠提供高性能和低延遲的文件傳輸和共享服務,且不需要復雜的網絡配置,適合辦公室、家庭網絡等場景。
而在實際的使用中, 出于跨地域協作的考慮、遠程辦公的普及,需要通過互聯網訪問共享資源。在互聯網中傳輸數據,安全性是首要的挑戰,存在數據竊聽和中間人攻擊等問題。雖然 SMB 3.0 中加入數據加密傳輸的支持,但要求升級服務端和客戶端支持 SMB 3.0 并進行復雜的加密配置。
在這篇文章中將會介紹另一種方案:使用 ZTM 傳輸 SMB 協議數據( 以下簡稱 SMB via ZTM)實現安全的遠程訪問。這種方案相比 SMB 3.0 的加密傳輸有如下優勢:
?簡化配置過程,無需升級現有客戶端和服務器。?提供統一的加密和身份驗證,簡化管理并增強安全性。?原本沒有使用認證的 SMB 服務也可以通過 ZTM 的安全認證來提升安全性。?提高傳輸效率,減少網絡延遲和抖動。?適用于遠程辦公和跨地域訪問,增強靈活性和兼容性。
ZTM[3](Zero Trust Mesh)是一款開源的網絡基礎設施軟件。它基于 HTTP/2 隧道構建,可以在任何類型的 IP 網絡上運行,例如局域網、容器化網絡和互聯網等。
ZTM 可以在各種環境中使用,從連接家庭和工作場所的 2 節點個人網絡,到連接全球辦公室和分支機構的 10,000 節點企業網絡。
ZTM 可以支持多種 CPU 架構,如 x86, ARM, MIPS, RISC-V, LoongArch 等,以及多種操作系統,如 Linux, Windows, macOS, FreeBSD, Android。
ZTM 包含了幾個核心組件:
?流量轉發程序 ZTM Agent:部署在要打通的網絡,可以部署在個人計算機、服務器、邊緣或者端側設備中。用于連接 ZTM Hub 發起加密隧道,將設備的流量安全地轉發到 Hub。?流量轉發集群 ZTM Hub:與每個 Agent 建立加密隧道,轉發來自 Agent 的請求,實現多點接入和高可用性。?證書管理服務器 ZTM CA:證書管理服務器。用于簽發證書、吊銷證書以及驗證 Agent 用于訪問的 TLS 證書。
在實施 ZTM 時,通常需要按照以下步驟進行。步驟 1、2、3 是基礎設施的搭建,每個需要接入 Hub 的網絡都必須執行步驟 2 和 3。一旦接入 Hub,步驟 4 和 5 將根據需要重復執行:
1.搭建 ZTM Hub2.為 Agent 頒發證書3.部署 Agent 并接入 Hub4.注冊服務5.將服務映射到本地網絡
在這個 SMB via ZTM 的方案中,在 SMB 客戶端和服務端所在的網絡中安裝 ZTM Agent。Agent 與公有云中的 ZTM Hub 建立加密的 HTTP/2 隧道。
服務端側的 Agent 將 SMB 服務注冊到 Hub;客戶端側的 Agent 將 Hub 上的服務映射到本地端口,對本地局域網內的客戶端提供 SMB 服務(在下面的演示中,我們會在 SMB 客戶端所在設備上安裝 Agent)。
同時你應該會發現,加密隧道的建立是有 Agent 主動發起的,SMB 服務并不會直接暴露在互聯網中。即使 SMB 服務本身不具備認證功能,客戶端側的 Agent 的訪問仍需要使用證書完成強身份認證。
在演示中我們將會用臺有公網 IP 的云主機,可以購買云廠商 99 元的主機,通常都有 3-4M 的帶寬,用來轉發 1080P 甚至低碼流的 4K 也沒壓力。
SMB 服務運行在我的家庭網絡中,而我的電腦接入的是一個公共網絡。
首先 ssh 到云主機,通過 ZTM CLI 安裝 Hub。當前最新的 ZTM 為 0.2.0 版本,通過下面的命令安裝 CLI。
ZTM_VERSION=0.2.0
curl -sL https://github.com/flomesh-io/ztm/releases/download/v${ZTM_VERSION}/ztm-aio-v${ZTM_VERSION}-generic_linux-x86_64.tar.gz | tar -zxf -
sudo cp bin/ztm /usr/local/bin/ztm
通過命令 ztm help
可以查看 CLI 的使用方法。
通過下面的命令啟動 Hub,默認監聽在 8888
端口,同樣可以通過參數 --listen
來修改,這里我們使用默認值。ztm start hub
會將 ztm-hub
添加到系統服務中,因為需要使用 sudo
。
首次啟動 hub 時生成的 root 用戶許可內包含有 root 用戶的私鑰,請妥善保存。
sudo ztm start hub --listen 0.0.0.0:8888 --names 52.175.28.72:8888 --permit root.json
通過 systemctl
可以查看服務運行狀態。
systemctl status ztm-hub
啟動 Hub 之后生成的用戶許可,可以用其來將 Agent 接入到 Mesh 網絡中,這個 Agent 就是 Root Agent。使用 Root Agent,我們可以為其他的 Agent 頒發許可。當然所有的 Agent 都可以使用 root 用戶許可接入 Mesh 網絡,但不利于進行用戶權限的管理。
可以在云主機或者任何一臺設備上啟動 Root Agent,這里我選擇在本機上啟動。
同 Hub 的啟動一樣,使用 ztm start
來啟動 Agent。其默認監聽在 127.0.0.1:7777
,也可以通過 --listen
參數修改。
sudo ztm start agent
參考 官方文檔[4] 使用前面生成 root.json
將 Agent 接入到網格。
ztm join smb-demo --as ep-1 --permit root.json
查看是否接入成功。
ztm get mesh
NAME JOINED AS USER HUBS STATUS
smb-demo ep-1 root 52.175.28.72:8888 Connected
以 root
的身份接入到 Mesh 網格后,就可以為其他設備頒發許可了。
接下來,我們在 SMB 服務所在的網絡中啟動 SMB 側的 Agent。運行 Agent 的設備可以是位于 SMB 服務同一網絡的任意設備,即能訪問到 SMB 服務即可。
sudo ztm start agent
只有獲得許可的 Agent 才被允許接入到 Mesh 中。要為用戶頒發許可,需要使用接入到 Mesh 的 root 用戶來頒發更多的許可,以及被邀請用戶(Agent)的公鑰。被邀請用戶(Agent)的公鑰可以通過命令 ztm identity
命令獲取。
在 SMB 服務側啟動 Agent 之后,可以通過 ztm identity
來獲取公鑰了。
ztm identity > pub.pem
有了 Agent 的公鑰之后,就可以交由 Root Agent 來頒發許可了。
使用 Root Agent,為 SMB 的 Agent 頒發許可,用戶名設置為 smb
。
ztm invite smb --permit smb.json --identity pub.pem
讓我們回到 SMB 服務側的 Agent,使用上面頒發的證書接入到 Mesh 網絡。
ztm join smb-demo --as ep-2 --permit smb.json
通過下面的命令查看已經入到的 Mesh 網絡的 Agent。
ztm get ep
NAME USER IP PORT STATUS
ep-1 root 103.116.72.25 15265 Online
ep-2 (local) smb 45.62.167.231 56859 Online
當 Agent 接入到 Mesh 網絡之后,我們就可以通過 zt-tunnel[5] 為 SMB 服務創建隧道。
在 zt-tunnel
中,有兩個資源:inbound
和 outbound
,分別對應隧道的入口和出口。通過 inbound
和 outbound
可以連接位于不同網絡的設備。
參考 zt-tunnel[6] 的文檔,在 SMB 側的 Agent 開啟隧道出口,將其指向 SMB 服務 192.168.11.104:445
。
ztm tunnel open outbound tcp/smb --targets 192.168.11.104:445
為了便于演示,我們假設從 Root Agent 這側來訪問 SMB 服務。當然你可以從其他的設備來訪問,并為其頒發許可。
ztm tunnel open inbound tcp/smb --listen 1445
在 macOS 中打開 Finder,菜單中選擇 Go -? Connect to Server...。在彈窗中輸入 smb://127.0.0.1:1445/nvme11
啟動 /nvme11
是我的 smb 服務的目錄名。
點擊 Connect 后,在 Finder 側邊欄可以看到連接的 SMB 服務,查看信息可以看到其網絡地址。
接下來就可以像操作本地文件系統一樣管理遠程 SMB 服務了。
Flomesh(易衡科技)成立于 2018 年,自主研發并開源了高性能可編程代理 Pipy(https://github.com/flomesh-io/pipy)。以 Pipy 為基礎,Flomesh 研發了軟件負載均衡、服務網格兩款軟件產品。為工信部認證的可信云產品、可信開源項目。
Flomesh 核心競爭力來自完全自研的核心組件 Pipy,該組件高性能、高可靠、低延遲、可編程、可擴展、低依賴,采用 C++ 開發,內置自研的 JS 引擎,支持使用 JS 腳本做擴展開發。支持包括 x86、arm、龍芯、海光等硬件 CPU 架構;支持 Linux、FreeBSD、macOS、Windows、OpenWrt 等多種核心的操作系統。
Flomesh 成立以來,以技術為根基、以客戶為導向,產品被應用在頭部股份制商業銀行總行、大型保險公司、運營商總部以及研究院等眾多客戶和多個場景。
添加小 P 成為好友,參與社區互動,享受豐富互動并獲取獨家周邊禮品!
[1]
zt-tunnel: https://github.com/flomesh-io/ztm/blob/main/docs/ZT-App.md#zt-tunnel[2]
ZTM 0.2: https://github.com/flomesh-io/ztm/releases/tag/v0.2.0[3]
ZTM: https://github.com/flomesh-io/ztm[4]
官方文檔: https://github.com/flomesh-io/ztm/blob/main/docs/CLI_zh.md#接入-mesh[5]
zt-tunnel: https://github.com/flomesh-io/ztm/blob/main/docs/ZT-App_zh.md#zt-tunnel