你有 NAS,但出門在外怎麼安全存取它?
QuickConnect 方便,但每次傳輸都要經過 Synology 的中繼伺服器。DDNS + 直接開 port 讓服務暴露在公網,風險取決於你防護做得多嚴。Tailscale 幫你解決了打洞和金鑰管理,但流量要經過他們的協調伺服器,最終控制權不在你手上。
WireGuard 是另一條路:輕量、快速、現代加密,自己架、自己管、連線資料不過任何第三方。設定比想像中簡單,用 Docker 跑的話,整個過程不需要打半行指令。
🎯 這篇適合誰
| 你的情況 | 建議先看哪段 |
|---|---|
| 不確定 WireGuard 是否適合自己 | 先看「跟其他方案比較」 |
| 想直接動手安裝 | 跳到「安裝 wg-easy」 |
| 已裝好,想設定手機連線 | 跳到「客戶端設定」 |
| 連線連不上,需要排查 | 直接看「常見問題」 |
💡 WireGuard 是什麼
WireGuard 是近幾年崛起的 VPN 協定,2020 年正式合併進 Linux 核心。跟傳統 VPN(OpenVPN、IPsec)相比,它的優勢不是功能更多,而是設計更精簡:
- 程式碼只有約 4,000 行,OpenVPN 超過 70,000 行。程式碼越少,攻擊面越小,審計也越容易
- 連線速度快:握手過程極短,從 4G 切到 Wi-Fi 後連線可以自動恢復,不需要重新建立
- 現代加密算法:ChaCha20、Poly1305、Curve25519,不需要選擇加密套件,設定失誤的空間幾乎為零
- 設定極簡:每個端點就是一對公私鑰,設定檔只有十幾行
缺點是 WireGuard 本身沒有圖形介面,原生操作需要打指令。這就是為什麼我們用 wg-easy 這個 Docker 映像——它把 WireGuard 包裝成一個有 Web UI 的管理介面,在 NAS 上點幾下就能搞定。
⚖️ 跟其他方案比較
要理解 WireGuard 適不適合你,先看它跟其他選項的差異:
| WireGuard(自架) | Tailscale | OpenVPN | QuickConnect | |
|---|---|---|---|---|
| 控制權 | 完全自主 | 金鑰協調靠 Tailscale | 完全自主 | Synology 中繼 |
| 設定難度 | 中(需要了解概念) | 極簡(幾乎零設定) | 高(大量參數) | 極簡 |
| 速度 | 快 | 快(P2P 直連時) | 慢 | 受中繼伺服器影響 |
| 需要開 port | 是(UDP) | 否(打洞) | 是(TCP/UDP) | 否 |
| 費用 | 免費(硬體自備) | 免費方案有限制 | 免費 | 免費(附帶限速) |
| 多設備管理 | wg-easy 介面 | 自動(magic DNS) | 需要 CA 管理 | 不適用 |
什麼時候選 WireGuard?
- 在意資料不過第三方伺服器
- 需要全流量 VPN(把所有網路流量走 NAS 出口)
- 想要完整控制哪些設備能連、能存取什麼
- 家裡有靜態 IP 或可靠的 DDNS
什麼時候選 Tailscale?
- 網路環境複雜(CG-NAT、IPv6 only),難以開 port
- 不想管憑證和金鑰,省時優先
- 設備很多,想要自動 mesh 網路而不是手動管理每台
兩個不互斥——你可以 WireGuard 主力、Tailscale 備援,連不上 WireGuard 的環境(公司網路封鎖 UDP)就切 Tailscale。
🔌 開始前:確認前提條件
架設 WireGuard 需要幾個前提:
1. 固定對外 IP 或 DDNS
WireGuard 客戶端需要知道要連到哪個 IP。如果你的對外 IP 會變動,先設好 DDNS:
DSM → 控制台 → 外部存取 → DDNS → 新增
Synology 提供免費的 *.synology.me DDNS,或者用 Cloudflare DDNS 也可以。記下你的 DDNS 域名,後面設定 WireGuard 時要用。
2. 路由器開 UDP port
WireGuard 預設用 UDP port 51820。需要在家用路由器設定 port forwarding,把外部的 UDP 51820 轉到 NAS 的內網 IP。
不同路由器介面不同,通常在「進階設定」→「虛擬伺服器」或「Port Forwarding」找到。
3. NAS 支援 Container Manager
WireGuard 用 Docker 跑,需要 Container Manager。支援的機型:DS923+、DS925+、DS1522+ 等 x86_64 機型;J 系列不支援。
🐋 安裝 wg-easy
wg-easy 是一個把 WireGuard server + Web UI 包在一起的 Docker 映像,管理介面清楚,新增客戶端、查看連線狀態、下載設定檔都在瀏覽器裡操作。
步驟一:建立資料目錄
用 File Station 建立資料夾:/docker/wg-easy/
這個目錄會儲存 WireGuard 的設定檔、金鑰、客戶端清單,非常重要,備份 NAS 時記得包含進去。
步驟二:用 docker-compose 建立容器
Container Manager → 專案 → 新增 → 輸入以下內容:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
environment:
- LANG=zh-TW
- WG_HOST=你的DDNS域名或對外IP
- PASSWORD_HASH=你的密碼hash
- WG_PORT=51820
- WG_DEFAULT_ADDRESS=10.8.0.x
- WG_DEFAULT_DNS=1.1.1.1
- WG_ALLOWED_IPS=0.0.0.0/0
- WG_PERSISTENT_KEEPALIVE=25
volumes:
- /volume1/docker/wg-easy:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
幾個欄位說明:
WG_HOST:填你的 DDNS 域名(例如yourhome.synology.me)或固定 IP。客戶端靠這個找到伺服器。PASSWORD_HASH:wg-easy 的 Web UI 登入密碼(hash 格式)。產生方式見下方。WG_DEFAULT_DNS:VPN 客戶端使用的 DNS,填1.1.1.1是 Cloudflare 公共 DNS。如果你有跑 AdGuard Home,填 NAS 的內網 IP,VPN 連線時廣告一起擋。WG_ALLOWED_IPS=0.0.0.0/0:全流量走 VPN(full tunnel)。如果只想透過 VPN 存取家裡內網,改成192.168.1.0/24(你的內網段)。
產生密碼 hash:
wg-easy v14 之後要求密碼用 bcrypt hash 格式,不接受明文。最簡單的方式是用它自己的工具:
Container Manager 隨便跑一個 wg-easy 容器後,在記錄頁面找到自動產生的 hash 提示,或者用以下任一工具在線上產生 bcrypt hash(注意:bcrypt hash 不含密碼本身,可以放心在公開設定檔裡)。
常用工具:bcrypt-generator.com,rounds 設 12,產生後填入 PASSWORD_HASH= 後方(整個 hash 字串,含 $2b$... 前綴)。
步驟三:啟動並確認
Container Manager 儲存並啟動專案,等容器狀態變為「執行中」。
瀏覽器開 http://NAS的IP:51821,看到 wg-easy 登入頁面就成功了。輸入你設定的密碼登入。
📱 客戶端設定
wg-easy 啟動後,在 Web UI 裡新增客戶端(點「+ 新增客戶端」,輸入名稱,例如「iPhone」「Daniel 筆電」)。
每個客戶端會自動產生一對金鑰,Web UI 上可以直接掃 QR Code 或下載 .conf 設定檔。
iOS / Android
- App Store 或 Google Play 安裝「WireGuard」官方 App
- App 首頁點「+」→「從 QR Code 建立」
- 在 wg-easy Web UI 找到對應客戶端,點 QR Code 圖示
- 手機掃描,隧道名稱自訂(例如「Home VPN」)→ 儲存
- 點開隧道旁的開關,連線成功後狀態會變藍色
iOS 設定上需要允許 WireGuard App 新增 VPN 設定,系統會跳出確認視窗,允許即可。
Windows
- 下載 WireGuard Windows 客戶端(wireguard.com)並安裝
- 在 wg-easy Web UI 下載
.conf設定檔(點客戶端項目右側的下載圖示) - WireGuard Windows App → 「從檔案匯入隧道」→ 選擇下載的
.conf檔 - 點「啟動」連線,狀態列出現 WireGuard 圖示代表連線中
macOS
- App Store 安裝「WireGuard」官方 App(免費)
- 下載
.conf設定檔 - WireGuard App → 「從檔案匯入隧道」→ 選擇
.conf檔 - 開關開啟,連線成功
確認連線成功
連線後用手機行動數據(確認不在 Wi-Fi 環境),瀏覽 http://192.168.1.100(你的 NAS 內網 IP),能打開 DSM 就代表 VPN 連線正常,流量已經走回家裡了。
🔧 進階設定:Split Tunnel vs Full Tunnel
wg-easy 預設是 Full Tunnel(WG_ALLOWED_IPS=0.0.0.0/0):連 VPN 後,手機 / 電腦的所有網路流量都走 NAS 出去,包含一般瀏覽網頁。
Full Tunnel 的優點: 在公共 Wi-Fi(咖啡廳、飯店)時所有流量都加密,最安全。
Full Tunnel 的缺點: 所有流量都跑你家的網路出口,如果家裡頻寬不夠大,上網速度會受影響。
Split Tunnel 設定: 只讓家裡內網流量走 VPN,其他流量直接從手機 / 電腦的網路出去。把 WG_ALLOWED_IPS 改成你的內網段,例如:
WG_ALLOWED_IPS=192.168.1.0/24
這樣連 VPN 後只有 192.168.1.x 的流量走隧道,可以存取 NAS 和家裡其他設備,但一般上網不受影響、速度也不會被限制。
如何選? 如果主要用途是在外面存取 NAS 資料,用 Split Tunnel 就夠了,速度更好,家裡頻寬壓力也小。如果在公共 Wi-Fi 很在意隱私,或者想讓所有流量都走 AdGuard Home 過濾,用 Full Tunnel。
修改設定後,需要停止容器、更新 docker-compose.yml、重新啟動,並且重新下載所有客戶端的設定檔(舊的設定檔不會自動更新)。
🗂️ 管理多個客戶端
wg-easy 的 Web UI 可以管理所有已建立的客戶端,每個客戶端顯示:
- 名稱和 VPN IP 位址(例如
10.8.0.2) - 最後連線時間
- 已傳送 / 已接收的流量
- QR Code 和設定檔下載
- 啟用 / 停用開關(暫時停用某個客戶端連線權限,不需要刪除)
命名建議: 每個客戶端用「裝置+用途」命名,例如:iPhone-Daniel、MacBook-work、iPad-wife。幾個月後要清理舊設備時,清楚的名稱比 client1、client2 容易辨識。
離職 / 設備遺失處理: wg-easy 裡停用或刪除對應客戶端,立即生效。該設備的私鑰馬上失效,就算有人拿到舊的設定檔也連不上。
❓ 常見問題排解
掃了 QR Code,手機顯示「握手超時」或連線不上?
最常見原因是路由器的 Port Forwarding 沒設好,或者設定的是 TCP 而不是 UDP。
確認步驟:
1. 路由器確認有 UDP 51820 forwarding 到 NAS 內網 IP
2. 從手機行動數據(不要用 Wi-Fi)測試,同一個網路的 loopback 通常不能用
3. 用 nmap -sU -p 51820 你的DDNS域名 從外部測試(需要另一台電腦在外網)
4. wg-easy Web UI 確認客戶端狀態是「已啟用」
家裡 Wi-Fi 連線時不要走 VPN,怎麼設定?
WireGuard 客戶端本身沒有「在某個 Wi-Fi 自動斷開」的功能。iOS 和 Android 版官方 App 可以設定「On Demand」(按需連線規則),例如「非家用 SSID 時自動開啟 VPN」,這樣回到家裡 Wi-Fi 就不會走 VPN 了。
iOS 設定路徑:WireGuard App → 選擇隧道 → 按需啟動 → 新增規則。
連線正常但存取 NAS 的 IP 沒反應?
確認 WG_ALLOWED_IPS 包含你的 NAS 內網 IP 段。如果設成 Split Tunnel,192.168.1.0/24 這個範圍必須包含 NAS 的 IP。
另外確認 NAS 的防火牆沒有封鎖 WireGuard VPN 客戶端的 IP 段(10.8.0.x)。
wg-easy 的 Web UI 開著一直沒有連線,是正常的嗎?
正常。WireGuard 的設計是「沒有流量就沒有封包」,客戶端沒連線的時候伺服器端不會看到任何心跳包。只有客戶端啟動連線,伺服器端才會有流量顯示。
NAS 重開機後 wg-easy 沒有自動啟動?
確認 docker-compose 的 restart: unless-stopped 有設定,並且 Container Manager 服務本身在 NAS 開機後會自動啟動(套件中心 → Container Manager → 開機時自動執行)。
家裡的 ISP 是 CG-NAT,無法開 port 怎麼辦?
CG-NAT(共享 NAT)下路由器拿到的是私有 IP,沒辦法做 port forwarding。這種情況 WireGuard 就很難從外部主動連進來。替代方案:
- Tailscale:專門解決這個問題,不需要開 port
- Cloudflare Tunnel:可以把服務透過 Cloudflare 反代出去,不需要開 port
如果確定是 CG-NAT(路由器 WAN 介面的 IP 是私有 IP 段,例如 100.x.x.x),聯絡 ISP 確認能否申請固定 IP 或移除 CG-NAT,部分 ISP 免費提供。
📋 安全注意事項
自架 VPN 安全不安全,取決於你怎麼管理。幾個基本原則:
WireGuard port 只開必要的: UDP 51820 對公網開放是必要的,但 wg-easy 的 Web UI port(51821)只需要在內網存取,不需要對外開。路由器的 port forwarding 只轉 51820。
定期審查客戶端清單: 舊手機換掉、電腦送修前,把對應的客戶端從 wg-easy 刪除。設定檔一旦外流,唯一解法是在伺服器端停用那個客戶端。
wg-easy 的 Web UI 密碼要夠強: 這個介面控制所有客戶端的連線權限,密碼弱等於整個 VPN 門洞大開。用密碼管理器產生一個隨機強密碼。
備份 /docker/wg-easy/ 目錄: 裡面包含伺服器的私鑰和所有客戶端設定。NAS 出問題要重新架的話,有這個備份可以直接恢復,不需要所有客戶端重新掃 QR Code。
✨ 小結
WireGuard 的核心吸引力是乾淨:協定簡單、設定精簡、金鑰管理透明。架好之後每天看不到它的存在,出門掏出手機開個開關,家裡的 NAS 就像在身邊一樣。
如果你之前因為「VPN 好像很難」而一直靠 QuickConnect 湊合,wg-easy 值得試一次。整個架設流程不需要打一行指令,難度跟裝一個 Docker 容器差不多。
能自己掌控連線的人,不需要把資料的安全交給別人。
🔗 延伸閱讀
- 遠端存取比較:QuickConnect、DDNS、Tailscale 怎麼選
- Tailscale 完整設定指南:NAS 的零設定 VPN 解決方案
- Cloudflare Tunnel:不開 port 的自架服務遠端存取
- NAS 安全三層防護:2FA、VPN、防火牆設定完整指南