Weil Jimmer's BlogWeil Jimmer's Blog


DIY 自組 NAS 家用私有雲 TrueNAS 安裝經驗分享

No Comments
-
更新於 2023-12-04 22:09:10

前言

最近一直有心想組一台 NAS 備份我的資料,已經看了頗久,基於安全和價格的考量,最終還是沒有直接選用群暉(Synology)的套裝 NAS。

最主要還是因為怕資料外洩。看到 Youtube 上面安裝他們家的產品有夠簡單,掃個碼就可以註冊帳號登入,總有一種數據不受控的感覺,最近替公司開發產品也是一樣的概念。

那些東西要連線上雲端,讓客戶自己控制,那雲端必須得有存取裝置的權限及能力,所以,那些套裝 NAS 如果可以這麼簡單就遠端讀取查看分享資料的話,我覺得,那些販售該產品的公司的工程師說不定…呵呵。這只是猜測,個人比較敏感一點,也不好評論什麼。

總之為了隱密性、存放機密資料,勢必不可能讓自己的 NAS 曝露在公網上,更別提讓別人擁有一鍵後門抓資料的能力。

要買套裝 NAS 的大前提是要讓網路環境完全隔離。接觸不到公網,不過這是題外話了。好了,廢話也說太多了,直接進入正題。

配備

這次我選用的配備是:

  • 1 * CPU N5105 暢網微控 妖板 (6 SATA)(ITX)
  • 2 * SAMSUNG 三星 980 500GB NVMe M.2
  • 2 * Micron Crucial 美光 DDR4 3200 16G RAM
  • 6 * 二手 6 TB HDD
  • 1 * 偏貴的 NAS 機殼 (ITX) + 250W電供

價格大概是 6200+2200+2000+9500+6200=26100 (NT)

如果是直接買現成套裝機,以六槽來看,光是 NAS 主機不包括硬碟就可能要三、四萬起跳。

外殼

買來大概長這樣,然後新竹物流有夠爛,都不打電話的,還會偽造紀錄。

正面圖:

背面圖:

取出來的硬碟槽:

正面圖:

俯視圖:

然後是配件,基本上螺絲很齊全,想到之前買 TP-Link 網卡沒有附上螺絲,真廢,連螺絲都捨不得給嗎?沒螺絲我鎖個屁。

最後是貴死人的雜牌電供,250瓦而已。唯一的優點是很小巧,可以塞進 ITX 機箱,除此之外沒什麼優點。

然後機箱必須先自己轉開螺絲,把外殼拆掉,內部大概長這樣。

左邊風扇,最下面是板子的空間,超級小。下次絕對不要買 ITX 機殼,有夠難安裝。

另外一面:

背面:(左邊那孔位是塞電供的。)

硬碟背板:3 個 SATA 一組。

上下各一個大4Pin供電:

用不到的 USB3.0線,風扇線和開機線(貌似也用不到,一插電就給我自動開機。)

背面的風扇也是大4Pin供電。

介紹完機殼後,該來介紹一下主機板了。

主板

開箱 6 SATA槽的 NAS 妖板。

這裡放個高清版的圖。

然後是 SATA 槽的位置,這是重點中的重點,上面的編號很重要,之後要按照順序由上往下接上數據線。

1 3 5
0 2 4

再來是 Power 的燈,和電源的針腳。

組裝

首先,先把主機板的擋板卡上機殼,不然之後主機板裝進去就不能裝了。

當初犯了個小錯,先把主機板放進去,其實應該先放接上電源再放進去。之後電源線根本進不去阿,很難插。

這縫隙真的很小,組得很痛苦。

最後,接電供和整線。

照順序,接上 SATA 線。

完成開機!

安裝作業系統

前面光是組裝硬體的部分就可以搞得滿頭大汗,鎖一堆螺絲,真累,接下來是軟體的安裝。

先到 TrueNAS 官網下載 iso。

然後使用 win32DiskImager 之類的軟體,把 ISO 寫入 USB 隨身碟,用 USB 開機。

直接開始安裝!

接下來基本上沒有甚麼難度,一直無腦下一步。就懶得貼那麼多圖了。

到這步驟,解壓縮真的超久,一度以為是不是掛了,超緊張,一直沒吐訊息出來。

接著重開機。系統應該就自動啟動了,要多等一下。

然後進入這個畫面基本就完成了,剩下網路配置搞一搞。

輸入 NAS 的 IP 就可以連到 NAS 的 WebUI 進行管理和後續的設定。

設定

首先,先到 Storage 那邊新建一個 Pool,把我要組的六個 HDD 都加進去,我是組 ZFS 檔案系統 Raid-Z2 可以有兩個容錯空間。然後 1 個 SSD 當系統碟,另 1 個當 快取碟 L2ARC。

設定 SMB 分享

直接到共用那邊,啟動服務,設定要分享路徑。

到「認證」>「本機使用者」>「新增」,創建一個使用者並給定目標目錄的讀寫權限,這樣就可以在 SMB 中使用。

Windows 直接新增網路資料夾。

測速

下圖是在 Windows 上進行測速,讀寫約 300 MiB/s,大概吃滿了我目前 2.5 Gbps 的網速。

這是我和 gateway (軟路由) 進行 iperf 測速的結果。

差不多約等於我硬碟的讀寫速度,其實 2.5 Gbps 網速似乎有點不夠,感覺還可以再更快,雖然 400~500 MiB/s 應該就是極限了。

設定 HTTPS 證書

我發現 TrueNAS 還有支援 ACME DNS Challenge,這樣就可以簽發一個 Localnetwork 的網域證書阿!

如果有網域的話會更安全,雖然都走有線網路了,也不用怕被竊取帳密。

只怕 Wi-Fi 被破解偷連,只是我家的網路還是雙層內網,連進 Wi-Fi 也沒用,因為是兩個網段,進不到 NAS,得再設定軟路由防火牆。

不過 HTTP 畢竟是沒加密的,洩漏管理員帳密的風險還是很大,更何況如果有機密資料,還是使用 HTTPS 會好一點。

可以參考這篇文章:Configuring ACME DNS

基本上就是把網域停在 Cloudflare 上,申請一個 API,填入 TrueNAS 讓它可以替網域新增 TXT 紀錄。

接下來就是設定 CSR,全自動簽發證書。把系統預設證書改成新簽發的網域。

設定雲端憑證

想到,我 Google Drive 上面還有不少東西,要一個一個下載有點麻煩,可沒想到 TrueNAS 也有這個功能!內建的!

可以參考這篇文章:Backing Up Google Drive to TrueNAS SCALE

一鍵授權,也不用自己搞 API,直接從 Google Drive 拉目標資料夾下來備份,真的很讚。

設定好後,到「資料保護」>「Cloud Sync Tasks」,新增定時同步任務,然後直接啟動它,就會開始拉檔案下來備份了。

七百 GB 大概要花三、四個小時。

現在直接連進去 NAS 可以看到:我雲端的檔案已經出現在裡面了。

而且感覺起來也不怎麼吃資源。

介紹得差不多了,如果以後有試到甚麼好用的功能再補充吧。

其他文章:
RAID 陣列降級與重建:一個自組 NAS 使用者的親身經驗 Truenas Scale

By Weil Jimmer


This entry was posted in General, Experience, NAS, The Internet By Weil Jimmer.

在區域網路中使用 OpenWrt 的 LuCI 介面實現喚醒電腦 Wake on LAN (WOL)

No Comments
-
更新於 2023-09-17 22:24:56

前言

昨天剛睡醒躺在床上看小說的時候,內心一直有個聲音是:好想開電腦聽音樂喔,但是我卻很懶得爬起床。

想到我應該寫個 Web API 用區網 (Wi-Fi) 就可以啟動音樂播放軟體阿!後來仔細想了想,電腦如果是關機狀態的話,即便寫了,也還是沒有用。

於是才突然想到,可以嘗試看看 Magic Packet 喚醒功能 (Wake-on-LAN) 阿。於是就有了這篇文章,懶惰是促使人進步的動力來源。

原則上這篇文章沒有甚麼技術成分。僅僅是記錄我的操作過程。

設定網卡

這非常簡單設置,基本上就是直接從 Windows 中控制台找到網路介面卡,打勾選項,點確定而已。

設定開啟。

這裡是關機時的網卡速度,正處於關機狀態時,用不到那麼大的頻寬,可以設定成最低,也就是 10 Mbps。

設定允許這個裝置喚醒電腦。

接著重新啟動,到主機板 BIOS 設定允許我現在的網卡喚醒電腦。

設定 OpenWrt

開啟登入 OpenWrt,安裝 WOL 的相關套件。

opkg install etherwake luci-app-wol

重啟 OpenWrt 軟路由,應該會在服務的 tab 下面找到 Wake on LAN。

測試

在關機狀態下,可以從交換器中看到 Port 3 (也就是連接電腦網卡的接口),它此時的速度只有 10M,跟上面所設定的一模一樣。

如果沒有設定 WOL 的話,你關機後,Port Status 會直接顯示成 Down (下線)。

之後就可以將電腦關機,然後直接透過手機連到 OpenWrt 發送 Magic 封包叫醒電腦。

按下發送鍵後,就會看到封包的資料,結構很簡單,類別 0x0842,內容給定 ffffffffffff 之後,再重複目標 MAC 地址十六次。

DA     (6)        | SA     (6)        | Type WOL (2)
3c 52 a1 29 6d 9e | 26 62 d2 e3 a6 83 | 08 42

Sync stream       | Repeat 16 times of MAC
ff ff ff ff ff ff | 3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e
3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e
3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e
3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e
3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e
3c 52 a1 29 6d 9e 3c 52 a1 29 6d 9e 

當網路介面卡收到這「魔法封包」後,電腦就會自己開機,進入 Windows 登入畫面!而此時交換器中 Port 3 的狀態也會恢復成正常的 1000M。

順帶一提,我網卡本身是 2.5 Gbps,但交換器只有支援 1 Gbps,所以上限 1000M 是正常的。

By Weil Jimmer


This entry was posted in Experience, The Internet, Note, OpenWrt By Weil Jimmer.

[筆記] 提升 Redis 服務安全

No Comments
-
更新於 2023-09-10 21:33:36

最近看不少文章提到 redis 的一些問題,寫本文章僅作為筆記。

端口不開放到公網

修改 /etc/redis/redis.conf ,將 0.0.0.0:6379 修改為 127.0.0.1:6379。

bind 127.0.0.1

如果是 0.0.0.0:6379 的話,非常非常的危險。不知道為什麼查到網路上文章指出預設值是 0.0.0.0,我自己裝的話預設值都是 127.0.0.1。可能新版本已經把預設值修改了。

關閉 CONFIG 命令

修改 /etc/redis/redis.conf ,將 CONFIG 命令禁止。

rename-command CONFIG ""

加入密碼

修改 /etc/redis/redis.conf ,新增 requirepass 配置,加入高強度密碼。

requirepass "aP~xzGJ8nhu2ti483ZvNX7zoH8XoN38E"

驗證

重啟 redis 服務。

service redis restart

使用 redis-cli 確定剛剛的配置是否生效。

# redis-cli
127.0.0.1:6379> set "test" "test"
(error) NOAUTH Authentication required.
127.0.0.1:6379> config
(error) ERR unknown command 'config'
127.0.0.1:6379>

This entry was posted in Experience, Note By Weil Jimmer.

在 OpenWrt 設定 WireGuard VPN 白名單繞過本地網路 並且維持 Kill Switch 開啟

No Comments
-
發布於 2023-08-31 21:12:17

前言

這是我第四篇有關於軟路由的文章,上篇文章討論到如何設置 WireGuard VPN 介面,以及如何開啟 Kill-Switch。而這篇文章是接續上次的設定,做出延伸,在此分享心得給大家。

目標

為了讓自己的電腦所屬的區域網路 LAN 的流量只通過 WG0,而不通過 WAN,設置了防火牆規則當作 Kill-Switch,同時間啟動特定的路由表,讓 LAN 的網路 0.0.0.0/0 只走 WG0,這導致了一個問題:其他介面的流量進不來 LAN 中

以上是之前介紹過的家庭網路的示意圖。

在這種情況下,因為已經不走 WAN 了,同時間被路由表影響到,當電腦要訪問一級路由器 (也就是 192.168.0.1) 時也會被 block 掉流量,因為 192.168.0.1 是走 WG0 的,自然而然是不可能找得到目的地。從而 block 掉流量,其他地方來的也是,電腦可以收到封包,但是卻沒辦法回傳任何封包,因為沒有路由到那些地方。

為了解決這問題,必須得設定一個近網不走 VPN 的白名單規則,這樣才有機會讓 WAN 的流量到 LAN 中,或是讓 LAN2 的流量到 LAN 中。

安裝

為了解決上述情境,必須安裝一個軟體,VPN Policy-Based Routing。

opkg update
opkg install vpn-policy-routing luci-app-vpn-policy-routing

安裝完後重啟你的介面應該能在 VPN 中看到 VPN Policy-Based Routing 的 WebUI。

在這邊先設定要被 bypass 的路由規則。

這裡,我的電腦 IP 為 192.168.10.100,我設定 192.168.0.1 和 192.168.0.10 和 192.168.0.11 … 等不走 VPN 介面 (wg0)。

這裡只是路由策略,還記得上篇文章提到,我已經設定了 Kill-Switch,防火牆已經擋掉了 LAN 轉發到 WAN。所以,得到防火牆的通訊規則,新增例外。

設定允許 LAN 到 WAN (一級路由的網段下,也就是 192.168.0.0/24) 的一些位置,例如到路由器,到交換器,以及到我的手機。

到這步原則上就 OK 了,如果要到其他介面,例如 LAN2,可以參考下面的配置,不只是要設定 LAN 到 LAN2,同時間也要設定 LAN2 到 LAN,因為這是兩回事。

如果只設定一個方向的話,那就只有單向的訪問能正常運作,例如:當我設定 LAN 可轉發到 LAN2,那麼 PC 訪問 LAN2 下的設備是可以的,但反過來,LAN2 主動訪問 PC 會被拒絕。

這邊我防火牆規則並沒有設定到 192.168.0.11,所以我自然是沒辦法訪問到 192.168.0.11,即便我上面 VPN 設定 192.168.0.11 走 WAN 的路由。

因為 Kill-Switch 的關係,在防火牆規則裡面 LAN 不可以轉發到 WAN,所以沒辦法到 192.168.0.11,會被防火牆擋住(Kill-Switch)。但是可以到 192.168.0.150,因為防火牆規則中允許。

如果,我在防火牆通訊規則也加上允許轉發到 192.168.0.11 的話,那 PC 就可以成功訪問。VPN 路由策略和防火牆規則兩個都要設定,任何一者沒設定都沒辦法成功訪問。

這麼一來就可以不用關閉 wg0 也不用 關閉 kill-switch 就可以到軟路由的上層網段。

By Weil Jimmer


This entry was posted in General, Experience, The Internet, OpenWrt By Weil Jimmer.

使用 OpenWrt 與 WireGuard 實現 NordVPN、雙層 NAT、特定區域網路 VPN 與 Kill Switch

No Comments
-
更新於 2023-08-31 21:19:07

前言

繼上次玩 OpenWrt 的第三篇,這次是設定 WireGuard VPN,我查了不少文章,感覺很少人遇到我這問題,我覺得應該是我的網路配置的關係,在這邊分享踩坑經驗出來。

如果你的網路配置比較單純的話,不需要做太多設定,我是比較特殊一點,搞了很複雜的網路環境。

網路環境

首先介紹我家網路配置,多了交換機後有點複雜,下圖現實接線的示意圖,圖中的顏色用以區分網段,而粗細用以區分層級。

目前會想這樣設計,主要是想要隔離我家人與我的網路環境,讓他們干擾不到我,其實一台交換機就夠了。

不過交換機可沒有強大的防火牆阿,軟路由的防火牆才是真的強大。而且只有軟路由才可以辦得到我這複雜的需求。

下面一張圖是化簡後的網路布局,把交換器拔掉(實際上是接著的)的虛擬網路圖。

ASUS 硬路由在這邊是一級路由,而軟路由則是二級路由,透過軟路由的虛擬區網,已經做到兩個區域網路各自隔離(LAN 藍色、LAN2 紅色)。

目的

我的主要目的是想要我常用的電腦,也就是 LAN(藍色),加上 VPN,使我連線到公網是走 NordVPN 的路線。

不過這步有點小麻煩,因為 NordVPN 並沒有提供 WireGuard 的金鑰,但你還是有機會可以實現。

取得 NordVPN 的連線資訊

第一步,先在 Linux 環境中安裝工具包以及 NordVPN。

sudo apt install wireguard curl jq net-tools
sh <(curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh)

第二步,連線到 NordVPN。

# 登入 NordVPN
sudo nordvpn login
# 設定協議
sudo nordvpn set technology nordlynx
# 連線
sudo nordvpn c 

第三步,取得金鑰(公鑰與私鑰)。

# 顯示私鑰
sudo wg show nordlynx private-key
# 顯示公鑰 與 伺服器資訊
curl -s "https://api.nordvpn.com/v1/servers/recommendations?&filters\[servers_technologies\]\[identifier\]=wireguard_udp&limit=1"|jq -r '.[]|.hostname, .station, (.locations|.[]|.country|.city.name), (.locations|.[]|.country|.name), (.technologies|.[].metadata|.[].value), .load'

上圖是我在 Kali Linux 中輸入指令的示意圖。

最後記得要中斷 NordVPN 的連線。

sudo nordvpn d

設置 OpenWrt

如果你的 OpenWrt 還不支援 WireGuard,請先安裝。

opkg install kmod-wireguard luci-app-wireguard luci-proto-wireguard wireguard wireguard-tools

設置 WireGuard

如果前面都沒問題,這裡就是關鍵步驟了。還記得先前拿到的私鑰和公鑰嗎?

第一步,開啟 OpenWrt 接口畫面 (Interface)。

第二步,添加新的接口,通常取名為為 wg0。按照你習慣設定即可。選好協議 WireGuard VPN 點添加。

第三步,一般設定中,填入你剛剛取得的私鑰,不要點到「生成密鑰」

IP 地址,就從你剛剛連線 NordVPN 的介面卡中取得(ifconfig)。

設定好後,就可以開啟下個介面,對端 (EndPoint),我一直覺得這翻譯很怪,總之就是遠端 Server 的意思,路由器本身當 Client 端連上 遠端 VPN Server。

第四步,填入剛剛取得的公鑰,允許的 IP 輸入 0.0.0.0/0

路由允許的 IP 這裡是一個大坑,如果你的網路環境很單純,直接打勾就可以了。這邊我暫時不打勾,因為我要自己設定路由。

如果你的軟路由是二級路由器,也不應該打勾,因為你會到不了 Gateway ,0.0.0.0/0 會路由你的 Gateway 地址,導致迴圈,封包出不去外網,至少我這邊的情況是這樣。

端點主機就填入 NordVPN 的主機位置。

端口保持預設值 51820,Keep-Alive 設定 25。

設定到這邊,VPN 的部分基本上就完工了!如果沒有生效,請重新開機。只要有動到路由表,建議都重新啟動軟路由會比較好。

路由表設定

# 新增路由表300,設定 wg0 路由 0.0.0.0/0
uci add network route
uci set network.@route[-1].interface="wg0"
uci set network.@route[-1].target="0.0.0.0"
uci set network.@route[-1].netmask="0.0.0.0"
uci set network.@route[-1].table="300"

# 新增 IP 網路規則,LAN 接口查詢路由表300
uci add network rule
uci set network.@rule[-1].in="lan"
uci set network.@rule[-1].lookup="300"

# 儲存網路規則 並 重啟網路
uci commit network
/etc/init.d/network restart

防火牆設定

首先一般情況,應該設定 lan 可以轉發到 wan 以及 wg0,如下圖。

到這裡,就算是完工了。但如果你要設定 Kill-Switch,就必須要把 wan 移出允許轉發到的目標區域。

設定防火牆 Kill-Switch (選)

要開啟 Kill-Switch 就必須把 lan 轉發到 wan 的選項移除掉,只能轉發到 wg0,這樣 lan 不走 VPN 就永遠到不了外網。

這是示意圖,直接把 LAN 到 WAN 的路由,用防火牆轉發規則擋掉,這樣 LAN 就出不去。

檢查

現在的 IP 應該是剛剛設定的 VPN Server 的 IP,如果不是,代表你某步驟做錯。

如果你有開啟 Kill-Switch,可以連上 wan 確認 Kill-Switch 有沒有工作。在這裡我的 WAN 是 192.168.0.1 (一級路由)。

或是你可以停止 wg0 接口,當 wg0 接口被切斷,那你會默認轉發到 wan,如果你可以成功上網,而且 IP 是你原本的真實 IP,那麼代表你 Kill-Switch 沒有設定成功。

測速

到了最令人振奮的時刻,軟路由進行對岸所謂的「科學上網」,最重要的就是性能了,根據你的軟路由 CPU 的好壞,可以決定你的網速可以跑到多快。

聽說 x86 CPU 是很不錯的,所以我也選擇了 Intel 的 J4125。

下面是我的測速結果:兩次測速,下載約 470 Mbps、上傳約 74 Mbps。

如果沒有連線 wg0,使用 wan 接口上網,(無 VPN)的結果如下,大概是直接跑滿目前申裝的網路,500 Mbps 上/下傳 。

參考資料:
https://www.ivpn.net/setup/router/openwrt-wireguard/
https://hiy.tw/2021/06/nordvpn_wireguard/

其他文章:
軟路由初體驗 在 PVE 8.0 上安裝 OpenWrt 22.03
使用 OpenWrt 踩坑經驗與心得 設置虛擬區域網路進行隔離
在 OpenWrt 設定 WireGuard VPN 白名單繞過本地網路 並且維持 Kill Switch 開啟

By Weil Jimmer


This entry was posted in General, Experience, The Internet, OpenWrt By Weil Jimmer.

上一頁  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /28 頁)下一頁 最終頁

Visitor Count

pop
nonenonenone

Note

台灣假新聞橫行,沒一家霉體能信的,網軍側翼到處洗風向,堪憂。

毋忘初心,
絕不利慾薰心。

支持網路中立性.
Support Net Neutrality.

飽暖思淫欲,
饑寒起盜心。

支持臺灣實施無條件基本收入

今天是國際盲人節。

Words Quiz


Search

Music

Blogging Journey

4428days

since our first blog post.

The strong do what they can and the weak suffer what they must.

Privacy is your right and ability to be yourself and express yourself without the fear that someone is looking over your shoulder and that you might be punished for being yourself, whatever that may be.

It is quality rather than quantity that matters.

I WANT Internet Freedom.

Reality made most of people lost their childishness.

Justice,Freedom,Knowledge.

Without music life would be a mistake.

Support/Donate

This site also need a little money to maintain operations, not entirely without any cost in the Internet. Your donations will be the best support and power of the site.
MethodBitcoin Address
bitcoin1gtuwCjjVVrNUHPGvW6nsuWGxSwygUv4x
buymeacoffee
Register in linode via invitation link and stay active for three months.Linode

Support The Zeitgeist Movement

The Zeitgeist Movement

The Lie We Live

The Lie We Live

The Questions We Never Ask

The Questions We Never Ask

Man

Man

THE EMPLOYMENT

Man

In The Fall

In The Fall

Facebook is EATING the Internet

Facebook

Categories

Android (7)

Announcement (4)

Arduino (2)

Bash (2)

C (3)

C# (5)

C++ (1)

Experience (52)

Flash (2)

Free (13)

Functions (36)

Games (13)

General (60)

Git (2)

HTML (7)

Java (13)

JS (7)

Mood (24)

NAS (2)

Note (32)

Office (1)

OpenWrt (6)

PHP (9)

Privacy (4)

Product (12)

Python (4)

Software (11)

The Internet (25)

Tools (16)

VB.NET (8)

WebHosting (7)

Wi-Fi (5)

XML (4)