github.com/Yukaii
Daily Oops

Daily Oops!

https://yukai.dev/blog/2024/01/28/mini-homelab-tailscale-caddy-nextdns-tailnet-domain-ssl我的迷你 Homelab:用 Tailscale、Caddy、NextDNS 來輕鬆設定 Tailnet 內網的自訂網域 SSLhttps://fed.brid.gy/
January 28, 2024

我的迷你 Homelab:用 Tailscale、Caddy、NextDNS 來輕鬆設定 Tailnet 內網的自訂網域 SSL

去年八九月搞了一台 Orange Pi 來玩。原本是想跑 k3s cluster 來鍛鍊 k8s 相關知識的,但瞎搞了一陣子,只安裝完 TailScale 設定完 Exit Node,就沒繼續弄了。

幾個月前身邊幾位朋友開始玩 llama 時,一起裝了 llama.cpp 來使用,不過我自己並沒有太多著墨。最近為了嘗試微軟出的 Phi-2 這個超級小的模型,又重新找了解決方案,才發現 ollama 這套工具,讓下載 model、提供 AI API 一氣呵成,還有現成的 web UIprompt community 可以用。

至此 ollama 才成為我開始認真打造 Homelab 的契機 XD

首次嘗試: MagicDNS + Caddy SSL

其實大多自建服務,跑起來之後用 local IP + port 就能夠存取了,反正也沒有要曝露到公網。有時候在外連線也要存取的話,就借助 TailScale 來把機器變成內網。覺得 IP 有點醜?那就用 Tailscale MagicDNS。剛好 Caddy 就內建了 Tailscale MagicDNS 的 SSL 整合,直接數行搞定:(好個合作!)

# 若服務跑在 localhost 3000 port
name.tailnet-name.ts.net {
reverse_proxy :3000
}

但一台機器也可能跑不只一個 http 服務,而 Tailscale 的 MagicDNS 也暫時不支援 sub domain 的功能。[1] [2] 如果要支援多個服務,那乾脆就自訂網域好了。

Step 1:Custom DNS: with NextDNS

最簡單暴力的改法就是改 Host 了。直接硬把 domain 指到我們內部服務節點的 IP 上。但是這樣一來 Tailnet 內的裝置就無法共同享用這個設定。

我則是使用了 NextDNS 來當作簡單的 DNS 解法。NextDNS 最主要還是從 DNS 層來做內容防護的服務(aka 用來擋廣告、防追蹤的)。他也提供了簡易的 Rewrite 功能,能夠把自訂的 Domain 指向 IP 位址。

image

巧的是,Tailscale 直接整合了 NextDNS 服務,只要在 Admin console 加入 NextNDS 的設定檔 ID 即可,真是好一個商業大 feat!

image

NextDNS 雖然有免費方案,但正常網路習慣下蠻容易用盡的,為此我之前還用了三年的 NextDNS Pro 方案。你當然也可以架設自己的 DNS 服務來辦到。為了達成全自架的夢想(??),我自架了朋友推薦的 Adguard Home,一樣可以檔廣告,一樣支援自訂域名設定:

image

Step 2:信任 Caddy 自簽的 SSL 憑證

設定完 DNS 後,用自訂的網址連接就會跳轉到內網服務去了,但此時還需要設定憑證才會讓自訂網址的 SSL 可用。

Server 端 Caddy 的設定:

example.lan {
tls internal
reverse_proxy :3000
}

然後在 Client 端,也安裝上 Caddy CLI,用 caddy trust 指令來安裝該憑證到本機:

sudo caddy trust
# or using address option
# sudo caddy trust --address xx.xx.xx.xx:2019

因為預設這個指令會去抓 localhost:2019 的 Caddy Admin API,在執行前,可以用 ssh local forwarding 的方式來把 server 的 2019 port 指到本機:

ssh host -L 2019:127.0.0.1:2019

如果是手機等無法跑 caddy cli 的地方,就直接 caddy 的根憑證丟到裝置上安裝:

/var/lib/caddy/.local/share/caddy/pki/authorities/local/root.crt

在 iOS 上操作的方法: Airdrop .crt 檔案到裝置 -> 設定 -> VPN 與憑證管理 -> 安裝 一般 -> 關於 -> 憑證與信任裝置管理 -> 打開該憑證的信任

小結

回顧一下,目前我 Homelab 的架構是:

  • Tailscale 做 VPN + Exit Node
  • 架設各種服務在 Tailnet 節點(大部分為 docker,lazydocker 好用)
  • 用 NextDNS/Adguard Home 來設定自訂網域 DNS + 擋廣告服務
  • 用 Caddy 自簽的憑證來發自訂網域的 SSL 還有 reverse proxy

Tailscale 和 NextDNS/AG Home 都有極簡易 UI 可以調整。唯一比較需要弄設定檔的 Caddy,因為語法也相當容易(看看一個服務也才兩行),所以這整套推薦給不太想要弄設定檔,和我一樣懶的各位。

除了上述提到的數個服務外,我還陸陸續續跑了:

  • CodiMD:簡單好用的自架版協作 Markdown 服務。你終究是要業配的,那為何不一開始就業配
  • Ladder:12ft 的開源替代,可以,呃,自己看說明
  • Eternal Terminal:mosh 的替代,雖然聽說效能差了一點,但在台灣網路環境絕還夠用
  • …等等,定時觀賞 awesome selfhostedreddit selfhosted

在榨乾小 Orange Pi 的最後一絲戰力前,我是不會放棄跑更多服務的 XD

最後祝大家 Happy Hacking Homelab 啦!


  1. FR: Support custom records in MagicDNS ↩︎

  2. FR: TLS Certificates for subdomains - or wildcard certificates ↩︎

https://fed.brid.gy/
本篇文章驕傲的使用 HackMD 發佈
Yukai Huanghttps://yukai.dev

Hi

This is Yukai Huang's personal website.

Here you can read my recent posts, play with my side projects before, or get to know me more.

安久吧!

https://fed.brid.gy/