想跟朋友一起玩 Minecraft 或 Palworld,又不放心把伺服器公開到網際網路上。傳統做法是在路由器開埠轉送(port forwarding),等於把遊戲埠暴露給全世界,任何人都掃得到;改用 Tailscale 的裝置分享(node sharing),可以只把那一台遊戲伺服器分享給特定朋友,不對外開任何埠,對方也只看到那一台機器、看不到你 tailnet 裡的其他裝置。
本文依 2026 年 10 月的 Tailscale 官方文件整理,以 Tailscale v1.104 為準。遊戲埠號以 Minecraft Wiki 與 Palworld 官方伺服器文件為準(Palworld 的 Steam 查詢埠 27015/UDP 官方文件未列,依 loef.dev 的社群文件補註);內容未實際架設驗證。
裝置分享的完整流程、限制與「和邀請使用者進 tailnet 的差異」,站上已有專文 分享裝置給 tailnet 以外的人。這篇聚焦在「遊戲私服」這個情境,重複的部分只帶重點。
先決定:裝置分享還是邀請加入
兩者都能讓朋友連到遊戲伺服器,差別在範圍:
- 裝置分享:朋友用自己的 Tailscale 帳號接受邀請,之後那一台遊戲伺服器會出現在他自己的 tailnet 裡。他只連得到那一台,看不到你的其他裝置;被分享的人不會計入你 tailnet 的使用者數,且所有方案都能用,免費的 Personal 方案也行。
- 邀請加入 tailnet:朋友變成你 tailnet 的成員,看得到 tailnet 裡(依 ACL/grants 放行範圍)的裝置,會佔用一個使用者 seat——Personal 免費方案最多 6 位使用者,見 方案與限制比較。
朋友已經有自己的 Tailscale(或有自己的 tailnet)、只想要那一台伺服器,用裝置分享最單純,也不用管對方會被算進你的人數。要注意的是,接受分享的人必須是他自己 tailnet 的 Owner、Admin 或 IT admin。
遊戲埠一覽
各遊戲的預設連接埠(有改過設定就照你改的):
| 遊戲 | 連接埠 | 協定 | 備註 |
|---|---|---|---|
| Minecraft Java | 25565 |
TCP | server.properties 的 server-port |
| Minecraft Bedrock | 19132 |
UDP | Bedrock Dedicated Server 預設監聽埠 |
| Palworld | 8211 |
UDP | 啟動參數 -port=8211 可改 |
Palworld 還有一個 Steam 查詢埠 27015/UDP,用途是讓伺服器出現在 Steam 的社群伺服器瀏覽器(見 palworld-server-docker 文件);走 Tailscale 的私服不需要公開列表,朋友直接輸入 IP 連線即可,這個埠可以不必開。
架好遊戲伺服器
架伺服器本身與 Tailscale 無關,這裡只給起點,細節照各遊戲官方文件:
- Minecraft Java:裝好 Java(Minecraft Wiki 說明各版本對應的 Java 版本),下載
server.jar,執行java -jar server.jar --nogui,把eula.txt的eula改成true再重開。 - Minecraft Bedrock:從 官方下載頁 抓
bedrock_server,解壓後執行LD_LIBRARY_PATH=. ./bedrock_server。 - Palworld:用 Steam 的「Palworld Dedicated Server」或 SteamCMD 安裝,啟動參數見 Palworld 官方伺服器文件,預設
-port=8211。
伺服器先在家裡區網內試到能連,再接 Tailscale。建議用獨立的低權限使用者跑伺服器,別用 root(Minecraft Wiki 也這麼提醒)。
防火牆:遊戲埠只在 tailscale0 開
重點是不要把遊戲埠開在對外的介面上。Ubuntu 上用 ufw 的寫法如下(依你架的遊戲選對應的埠):
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Tailscale 自己的 UDP 埠,直連穿透需要
sudo ufw allow 41641/udp
# 遊戲埠只在 tailscale0 介面放行,公網介面一律不放
sudo ufw allow in on tailscale0 to any port 25565 proto tcp # Minecraft Java
sudo ufw allow in on tailscale0 to any port 19132 proto udp # Minecraft Bedrock
sudo ufw allow in on tailscale0 to any port 8211 proto udp # Palworld
sudo ufw enabledefault deny incoming 負責擋掉公網對遊戲埠的連線,遊戲埠只透過 tailscale0 這張介面接受流量,而 tailscale0 只流通 tailnet 成員的流量。官方 分享私服 範例用的是比較寬鬆的 sudo ufw allow in on tailscale0(整張介面全開),上面改成只開遊戲埠更符合最小權限。
兩個補充:
- Tailscale 會自己下 iptables 規則、繞過
ufw,所以有時不特別寫allow in on tailscale0也通;但自己把規則寫清楚比較不會在換機器或重裝時踩雷。 - 用雲端 VPS 架的話,除了 OS 防火牆,也要把雲端安全群組(security group)的遊戲埠對外關掉,只保留 Tailscale。
分享給朋友
在 Admin console 的 Machines 頁面找到遊戲伺服器,點右邊選單的 Share:
- Share by email:輸入對方 email,系統寄一次性邀請連結。對方可以用任何 Tailscale 帳號登入接受,不一定要用同一個 email。
- Copy invite link:產生連結自己傳。預設一次性,勾選 Reusable link 可讓同一個連結被接受最多 1,000 次。
沒用到的邀請連結 30 天後失效,連結要當密碼看待。對方接受後,那台機器就會出現在他的 Tailscale 用戶端,而你會在 Share 對話框看到他的頭像與 email。
對方接受分享後,幾個行為要知道:
- 預設隔離(quarantine):分享出去的機器可以回應朋友進來的連線,但不能主動連到朋友的裝置。所以朋友接受分享,不會讓他的 tailnet 暴露風險。
- 要互相連(例如你要從遊戲伺服器反向連回朋友)就互相分享:你把機器分享給他,他也把他的機器分享給你。
- 只有接受的那個人看得到這台機器,他 tailnet 裡的其他人看不到;機器顯示的擁有者是你(分享的人)。
- 不能用 Taildrop 傳檔;你的 tag、群組與子網路資訊不會帶到對方 tailnet。
朋友怎麼連:直接輸入 IP 或 MagicDNS 名稱
遊戲的「LAN 伺服器瀏覽器」看不到這台私服。Minecraft 的區網自動發現(LAN world、Bedrock 的 Friends 列表)靠的是廣播/多播,而 Tailscale 的 WireGuard 隧道只轉送節點之間的單播流量,廣播與多播不會跨過 tailnet。所以伺服器不會自動出現,朋友要在遊戲裡手動加入伺服器並輸入位址。
有兩種輸入方式:
- Tailscale IP(最穩):遊戲伺服器的
100.x.y.z,在 Machines 頁面或那台機器上tailscale ip查。Minecraft 直接輸入 IP,Java 版可只填 IP(預設埠 25565);Bedrock 版的「加入伺服器」介面是 Address 與 Port 兩個分開欄位,Server Address 填 IP、Port 欄填19132(留預設值即可,除非伺服器改用別的埠),不要把:19132加在 IP 後面貼進 Address 欄。 - MagicDNS 名稱:分享出去的機器只能用完整名稱
<機器名稱>.<你的 tailnet 名稱>.ts.net,例如minecraft-server.yak-bebop.ts.net,不能只打minecraft-server。朋友自己的 tailnet 也要開 MagicDNS 才能用名稱連線。
一般先給 Tailscale IP,熟了再換 MagicDNS 名稱比較省事。
用 grants 限制分享來的使用者只能連遊戲埠
分享的連線同時受兩邊 tailnet 的存取規則限制。在你(分享者)這邊,用 autogroup:shared 或朋友的 email 把對方限縮到遊戲埠,是最小權限的做法:
{
"tagOwners": {
"tag:game": ["autogroup:admin"]
},
"grants": [
// 自己 tailnet 的成員可以連遊戲伺服器
{
"src": ["autogroup:member"],
"dst": ["tag:game"],
"ip": ["tcp:25565", "udp:19132", "udp:8211"]
},
// 接受分享的朋友只能連遊戲埠
{
"src": ["autogroup:shared"],
"dst": ["tag:game"],
"ip": ["tcp:25565", "udp:19132", "udp:8211"]
}
]
}幾點說明:
- 遊戲伺服器建議打上 tag(
tag:game)。tag 裝置的金鑰不會過期,伺服器不用每隔一陣子重登入,做法見 Tags 與 auth key。 - 不想打 tag 也沒關係:把上面兩個規則的
dst從["tag:game"]換成遊戲伺服器的 Tailscale IP(例如["100.101.102.103"]),其餘不用動。 autogroup:shared代表所有接受了裝置分享的外部使用者;想對單一朋友更精準,就把src換成他的 email。- 分享的使用者本來就只連得到分享給他的機器,
dst寫tag:game或*差異不大,ip才是真正把範圍限縮到遊戲埠的地方。 - 小心
"src": ["*"]這類規則:它會連被分享的使用者一起套用。站內規則用autogroup:member(不含只接受裝置分享的人)比較安全,語法見 ACL / Grants 入門。
規則的寫法、ip 欄位與 tests 驗證,見 ACL / Grants 入門。
Tailscale 的身分驗證:只有一篇部落格示範,沒有官方 plugin
有人會問:能不能連 Minecraft 的登入也交給 Tailscale,讓「誰在 tailnet 裡」直接當成「誰能進伺服器」?答案是沒有官方維護的 plugin。Tailscale 目前只有一篇 2022 年的部落格 Tailscale Authentication for Minecraft(作者 Xe Iaso、TJ Horner)示範這個概念:用打了補丁的 infrared(一套 Minecraft proxy)加上 TS_AUTHKEY 環境變數,把玩家的 Minecraft 使用者名稱換成 Tailscale 身分。
它是一篇工程示範、不是正式支援的產品,部落格自己也列出不少限制:
- 只支援 Java 版,不支援 Bedrock(主機、手機、平板那個版本)。
- 必須關掉 Minecraft 自己的登入驗證(
online-mode設成false),所以伺服器一旦暴露在公網,任何人都能進來——這和我們鎖在 tailnet 裡的做法正好相反,不能兩者都想要。 - 不能用皮膚(skin),除非另外裝伺服器端 mod。
- Tailscale 使用者名稱可能含有 Minecraft 使用者名稱不允許的字元。
對一般「朋友開私服」的情境,用裝置分享讓對方只能從 tailnet 連進來,再加上 Minecraft 自己的 online-mode 與白名單,通常就夠了;上面那套身分驗證 proxy 屬於少數想要「用 Tailscale 身分替代 Mojang 登入」的進階玩法,是否要追到 2022 年的示範與補丁,自己評估。
常見問題
- 朋友看得到伺服器,但連不上去? 先確認他連的是完整的 MagicDNS 名稱(含
.ts.net)或正確的 Tailscale IP;再用名稱連線時確認他的 tailnet 有開 MagicDNS。還是不行,就請雙方各自檢查自己的存取規則有沒有擋掉。 - 走 DERP 中繼會影響遊戲體驗嗎? 會。兩邊無法直接打洞時流量要經 DERP 中繼,延遲明顯變高,FPS 類遊戲尤其有感。可以參考 直連與 DERP 中繼 判讀。
參考資料
- Share a private game server with friends(官方)
- Run a private Minecraft server with Tailscale(官方)
- Share your machines with other users(官方)
- Inviting users vs sharing a device(官方)
- Tailscale Authentication for Minecraft(官方部落格,2022)
- Tutorial: Setting up a Java Edition server(Minecraft Wiki)
- Tutorial: Setting up a Bedrock Edition server(Minecraft Wiki)
- Configure the server(Palworld 官方伺服器文件)
- palworld-server-docker(loef.dev 社群文件,列出 27015/UDP 查詢埠)
- 分享裝置給 tailnet 以外的人
- ACL / Grants 入門