Tailscale HomeLab 設定筆記
上一篇講了我現在怎樣用 Tailscale 把 Mac mini、手機、工作機和 Oracle Cloud VM 接成一張私人網絡。這篇就從最基本的介面開始,一步步把裝置加進 tailnet,再整理命名、tag 和存取規則。

這篇要完成什麼
先假設你有這些裝置:
home-mac 家裏 Mac mini,主要開發機
phone iPhone / Android 手機
work-laptop 外出或工作用電腦
oracle-jp Oracle Cloud 日本免費 VM設定完成後,你應該可以做到:
- 從
work-laptopSSH 到home-mac - 用 VS Code Remote 連回
home-mac - 手機打開只在 tailnet 裏可見的 dashboard
- 從任何 tailnet 裝置連到 Oracle Cloud VM
- 家裏 router 和 Oracle Cloud 都不需要開 port
- 不需要把所有 Internet 流量都丟進 VPN
我的建議順序是:先讓裝置出現在同一張 tailnet 裏,確認可以用名字互相找到;再用 tag 把 server 分類;最後才整理誰可以連誰。這樣一開始不會被權限設定卡住。
Step 1:建立你的 tailnet
先到 Tailscale 建立帳號。登入後,你會得到一個自己的 tailnet。
tailnet 可以先想成「只屬於你的一張私人網」。裝置加入後,不代表它們公開到 Internet,而是加入這張只有你能管理的 overlay network。
如果你用 Gmail 這類 public email,Tailscale 會進到 Personal plan。對個人 HomeLab 來說通常已經夠用,至少我這種幾台機器的配置很舒服。
登入後最常用的是 Machines 頁面。它就是你的裝置列表,之後 Mac、手機、VM、server 都會在這裏管理。
Step 2:安裝客戶端
先到 Tailscale Download 下載對應平台的客戶端。Mac、Windows、Linux、iOS、Android 都有官方版本;個人電腦和手機直接裝 app,登入同一個帳號就可以。
裝好後,打開 Tailscale admin console 的 Machines 頁面,把名稱改成你看得懂的名字,例如:
home-mac
work-laptopMachines 頁面會列出每台裝置的名稱、tag、連線狀態、key expiry 狀態和版本資訊。第一日不用看懂所有欄位,先確認裝置有出現在列表裏,而且狀態是 connected 就可以。

這一步很值得做。因為 Tailscale 有 MagicDNS,裝置改名後,你就可以直接用名字連線,不用記 100.x.y.z 那種 tailnet IP。MagicDNS 可以先理解成 Tailscale 內建的私有 DNS:它讓 tailnet 裏的裝置用 machine name 互相存取,例如 home-mac。
這裏先不用急著處理權限。第一步只是確認裝置有成功加入同一張 tailnet。
例如:
ssh your-user@home-mac
ping home-mac如果你想再細看它怎樣處理 DNS,可以翻一下 MagicDNS 文件。但對 HomeLab 來說,先記住一件事就夠了:有了 MagicDNS,home-mac 這種名字會比 100.x.y.z 實用得多。
Step 3:加入 Linux server
Oracle Cloud VM、家裏的 Linux server、GPU server 這類機器,我會用 admin console 裏的 Linux server 安裝流程。
到 Machines → Add device → Linux server,介面會讓你先選這台 server 的偏好設定,然後幫你生成 install script。

幾個選項先這樣理解:
- Tags:把這台機器標成某種 server 身份,例如
tag:cloud - Ephemeral:臨時機器下線後自動移除,長期 VM 通常不用開
- Use as exit node:讓其他裝置把 Internet 流量從這台出去,這篇先不用開
跑完介面給你的 script 後,VM 就會出現在 Machines 裏。接著我會把它改名成 oracle-jp,之後連線和寫規則都清楚得多。
Step 4:用 tag 分類 server
個人電腦和手機可以綁在你的使用者帳號下面,但 server 我比較喜歡用 tag。
tag 可以先想成「機器身份」。例如:
| tag | 我會用在哪裏 |
|---|---|
tag:home-server |
家裏長期在線的 Mac mini 或 server |
tag:cloud |
Oracle Cloud VM 這類雲端機器 |
tag:jp-connector |
之後專門拿來做日本出口或 connector 的機器 |
你可以在兩個地方處理 tag:
- 加 Linux server 時,先在 Add Linux server 介面選好
- 機器已經加入後,到 Machines 裏打開那台機器,修改 ACL tags

這裏有個小細節:tag 不只是顯示用標籤,它會影響這台機器的身份和權限。把 Oracle VM 設成 tag:cloud 之後,之後你寫「誰可以連 cloud server」就不用綁死某一台機器。
進階:如果介面要求先定義 tag owner
有些 tag 需要先在 Access controls 裏定義誰可以使用。這個設定叫 tagOwners。
{
"tagOwners": {
"tag:home-server": ["autogroup:admin"],
"tag:cloud": ["autogroup:admin"],
"tag:jp-connector": ["autogroup:admin"]
}
}不用一開始就背 JSON。先知道它的意思就好:上面這段是在說「admin 可以把 home-server、cloud、jp-connector 這幾種 tag 掛到機器上」。
進階:如果你比較喜歡 CLI,也可以這樣加 tag
sudo tailscale up --advertise-tags=tag:cloudMac mini 如果你也想當 server 管,可以給它類似:
sudo tailscale up --advertise-tags=tag:home-server實際上 Mac app 和 CLI 混用時要留意目前狀態,建議先看一下:
tailscale status
tailscale ip如果只是個人用,不一定第一天就要把所有 tag 都設好。但我建議至少 cloud VM 和長期在線 server 要用 tag 管,之後寫 ACL 會清楚很多。
Step 5:設定誰可以連誰
這一步會用到 Access controls。你可以把它理解成「tailnet 裏的防火牆規則」:誰可以當來源、誰可以當目的地、可以連哪些 port,都在這裏處理。
如果你是第一次用,先用 Visual editor。它會讓你用介面選:
- Source:誰要連出去,例如你的使用者、所有裝置、某個 tag
- Destination:要連到哪裏,例如
tag:home-server - Port and protocol:允許哪些 port,例如 SSH 的
22

新增規則時,介面左邊是你要填的規則,右邊會即時顯示 JSON preview。這就是 Visual editor 和 JSON 的關係:你不是在學兩套東西,Visual editor 只是幫你用表單產生同一份 policy。剛開始看左邊就好,右邊留待之後想進階時再研究。

剛開始可以先讓自己的裝置互通,確認用途真的成立。等你用了一陣子,再把規則收緊。我的建議是先從這兩種規則開始想:
- 自己的個人裝置可以連
home-mac的 SSH - server 類裝置之間可以互相連需要的服務 port
進階:同一段規則在 JSON 裏大概長這樣
{
"acls": [
{
"action": "accept",
"src": ["autogroup:member"],
"dst": ["tag:home-server:22"]
},
{
"action": "accept",
"src": ["tag:home-server", "tag:cloud"],
"dst": ["tag:cloud:*"]
}
]
}這不是完整 production policy,只是示意。新手先理解三個欄位就好:src 是來源,dst 是目的地,冒號後面的數字是 port。
Step 6:穩定機器關掉 key expiry
Tailscale 預設會讓裝置 key 過期,這是安全設計。但對長期在線的 server 來說,如果某天 key 過期,機器突然需要重新登入,就會很尷尬。
所以我會在 admin console 裏,對這類機器關掉 key expiry:
home-macoracle-jp- 需要長期可被喚醒或連線的 server
手機和一般筆電就看情況,不一定要關。
這裏沒有什麼特別技巧,就是在 Machines 頁面裏找到裝置,關掉 expiry。記得這是信任決策:你關掉 expiry,就要更認真管理這台機器本身的安全更新和登入權限。
Step 7:決定要不要開 Tailscale SSH
如果你想少管理一點 SSH key,可以考慮 Tailscale SSH。簡單講,就是讓 Tailscale 接手 tailnet 裏 SSH 連線的登入和授權:誰可以 SSH 到哪台機器,不只靠 authorized_keys,也可以放到 Access controls 裏管理。
在支援的機器上可以這樣開:
sudo tailscale up --ssh然後在 Access controls 裏允許誰可以 SSH 到哪裏。
進階:Tailscale SSH 的 JSON 規則示意
{
"ssh": [
{
"action": "accept",
"src": ["autogroup:member"],
"dst": ["tag:home-server"],
"users": ["autogroup:nonroot", "your-user"]
}
]
}如果你已經有自己的 SSH key 管理方式,也可以繼續用原本的 SSH。Tailscale 最重要的是先把網絡連通,SSH 認證要不要交給它,可以慢慢決定。
Step 8:用 VS Code Remote 連回 Mac mini
當 work-laptop 和 home-mac 都在 tailnet 裏,而且 SSH 能通,就可以用 VS Code Remote SSH。
~/.ssh/config 可以加一段:
Host home-mac
HostName home-mac
User your-user然後 VS Code 選 Remote-SSH: Connect to Host...,選 home-mac。
這個體驗很像「我把 Mac mini 帶在身邊」,但實際上它還是在家裏跑。所有 node_modules、Docker、local DB、開發工具都留在 Mac mini,不用每台機器重裝一遍。
小建議
- 不要第一天就把 Access controls 寫到很複雜,先讓網絡能用。
- 不要忘記 Linux 系統防火牆,例如
ufw或firewalld。如果它們有開啟,就算 Tailscale 已經連上,服務的 port 也可能還是被本機防火牆擋住。
做到這裏,你的 HomeLab 已經從「一堆散落的機器」變成「一張可管理的私人網絡」了。
下一篇會講我最喜歡的進階玩法:不用把整台機器的 Internet 流量都丟進 VPN,而是用 Tailscale App Connector 讓 OpenAI / ChatGPT 相關流量走日本 Oracle Cloud VM。