需求 tailscale
是好東西,在任何地方都可以和在局域網(wǎng)訪問(wèn)一樣,但是也有著 IP
訪問(wèn)的不便,一方面 IP
是 tailscale
分配的(非子網(wǎng)路由模式),另一方面還要記住各種端口
tailscale
也考慮到了這些問(wèn)題,所以推出了 MagicDNS
,允許你為 tailscale
網(wǎng)絡(luò)中的節(jié)點(diǎn)配置 SSL
證書,讓你可以通過(guò)域名來(lái)訪問(wèn)
但這種方式也不好用,因?yàn)椋?/p>
這個(gè)域名中后面的 tailnet name
也是固定分配的,又長(zhǎng)又難記; 一個(gè)節(jié)點(diǎn)(也就是一臺(tái)設(shè)備),只能有一個(gè)域名,這也就導(dǎo)致只能是類似 DDNS
的用法,每個(gè)服務(wù)都要加端口訪問(wèn); 最重要的是,老蘇不會(huì)玩。在群暉上執(zhí)行 tailscale cert ds3617xs.tailxxxxx.ts.net
獲取證書時(shí)遇到了錯(cuò)誤,一直也沒找到解決的辦法 500 Internal Server Error: acme.GetReg: Get 'https://acme-v02.api./directory': tls: failed to verify certificate: x509: certificate signed by unknown authority
老蘇理想中的玩法應(yīng)該是??這樣的:
不需要公網(wǎng) IP
,因?yàn)?vps
不便宜; 能使用自定義域名,畢竟老蘇在 freenom
申請(qǐng)了好幾個(gè)好記的短域名; 能夠讓 tailnet
中的節(jié)點(diǎn)能夠支持泛域名,這樣就不用記端口了; 最好能使用默認(rèn)的 80
和 443
端口,這樣就不用帶尾巴了; 解決方案 老蘇設(shè)想了下面的應(yīng)用場(chǎng)景:
訪問(wèn)機(jī)器上安裝 tailscale
客戶端; 群暉上也要安裝 tailscale
套件,假設(shè)其 tailscale IP
為 100.x.y.z
; 因?yàn)樵L問(wèn)機(jī)器上已經(jīng)安裝了 tailscale
客戶端,所以我們可以將 100.x.y.z
視為是公網(wǎng) IP
,我們需要將域名解析到 100.x.y.z
; 但實(shí)際上100.x.y.z
并不是公網(wǎng) IP
,所以 SSL
證書無(wú)法通過(guò) HTTP
方式驗(yàn)證,而只能通過(guò) DNS
方式驗(yàn)證; 要想使用默認(rèn)的 80
和 443
端口,需要更改群暉 WebStation
的默認(rèn)端口; 使用 npm
作為反代服務(wù)器,并自動(dòng)完成 SSL
證書的申請(qǐng)和管理; 思路理順了,接下里就是按部就班的實(shí)施、驗(yàn)證了
DNS 解析 老蘇選擇了 cloudflare
做 DNS
解析
瀏覽器中打開 https://dash./ ,先 添加站點(diǎn)
,然后添加 DNS
記錄
只要添加兩條 A
記錄,一條名稱是 @
,一條名稱是 *
; Cloudflare API 令牌 在此處創(chuàng)建 Cloudflare API
令牌:https://dash./profile/api-tokens
創(chuàng)建令牌
拉到最下面,創(chuàng)建自定義令牌
檢查權(quán)限設(shè)置
如果你是英文界面,應(yīng)該是這樣
確認(rèn)權(quán)限
創(chuàng)建令牌
【注意】:這個(gè)令牌只會(huì)顯示一次,請(qǐng)務(wù)必保存好
修改 WebStation 端口 用 SSH
客戶端登錄到群暉,在命令行執(zhí)行下面的命令
# 進(jìn)入目錄 cd /usr/syno/share/nginx
用內(nèi)置的 vi
編輯器修改 server.mustache
、DSM.mustache
、WWWService.mustache
中的 80
和 443
端口改為15080
、15443
老蘇只改了 IPv4
,沒有改 IPv6
,當(dāng)然你要都改,也沒問(wèn)題;
重啟 WebStation
,可以在套件中心中操作,也可以用命令行
# 重啟 WebStation套件 synoservice --restart pkgctl-WebStation
再次查看端口,nginx
的 IPv4
已經(jīng)變成了 15080
這樣修改帶來(lái)的后遺癥就是,假如原本訪問(wèn) phpMyAdmin
是 http://192.168.0.197/phpMyAdmin/
,現(xiàn)在要加上端口 15080
,變成 http://192.168.0.197:15080/phpMyAdmin/
,這個(gè)問(wèn)題,后面用域名很容易解決
安裝 npm 如果是新安裝,將下面的內(nèi)容保存為 docker-compose.yml
文件
本次安裝使用了默認(rèn)的 SQLite
作為數(shù)據(jù)庫(kù),如果要使用 MySQL
,可以去看往期的文章
version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: npm restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
然后執(zhí)行下面的命令
# 新建目錄 mkdir -p /volume1/docker/npm/{data,letsencrypt}# 進(jìn)入目錄 cd /volume1/docker/npm# 將 docker-compose.yml 放入當(dāng)前目錄 # 一鍵啟動(dòng) docker-compose up -d
如果已經(jīng)安裝過(guò) npm
,只要修改端口就可以, npm
前置的 frp
或者 cloudflard
轉(zhuǎn)發(fā)的端口也要同步修改,這樣可以多個(gè)應(yīng)用共用同一個(gè) npm
證書設(shè)置 Add SSL Certification
--> Let's Encrypt
啟用 Use a DNS Challenge
才是 DNS
驗(yàn)證
① Domain Names
中填 *.域名
,例如 *.
; ② DNS Provider
中選擇 Cloudflare
; ③ Credentials File Content
中,涂抹的地方,填入之前獲取的 Cloudflare API
令牌 更詳細(xì)的說(shuō)明可以去看『 nginx-proxy-manager在線申請(qǐng)證書 』
稍等一會(huì)兒,就會(huì)看到證書,有效期是 3
個(gè)月,到期會(huì)自動(dòng)續(xù)期
示例 將本機(jī)的 npm
管理界面反代處理
如果服務(wù)在其他主機(jī)上,IP
可以填局域網(wǎng) IP
,也可以填 Tailscale IP
證書選擇前面申請(qǐng)的 Cloudflare
證書
現(xiàn)在在瀏覽器中直接打開 https://npm.
就會(huì)看到登錄界面了
共享服務(wù) 到目前為止,只有你自己(Tailscale
管理員),有權(quán)訪問(wèn)這些服務(wù)。
當(dāng)你希望將服務(wù)分享給別人時(shí),可以在 https://login./admin/machines 中,生成分享鏈接
雖然老蘇沒試過(guò)分享,但是從原理來(lái)說(shuō),肯定是沒問(wèn)題的
小結(jié) 這是目前老蘇找到的最安全的一種隨時(shí)隨地訪問(wèn)群暉服務(wù)的方案
雖然使用域名,但沒有公網(wǎng) IP
,所以更安全 ; 相比純 Tailscale IP
,不用記 IP
和端口,使用更簡(jiǎn)單 ; 相比 cloudflare tunnel
,因?yàn)槲词褂?Cloudflare
代理,所以帶寬和流量都沒有了限制,使用起來(lái)更放心 ; 如果大家還在找內(nèi)網(wǎng)穿透方案,老蘇強(qiáng)烈建議你試試這個(gè),當(dāng)然,如果你清楚了這里面的邏輯,Zerotier
等其他的 vpn
應(yīng)該也是可以這么折騰的
參考文檔 Failed to get cert on Synology · Issue #4060 · tailscale/tailscale
地址:https://github.com/tailscale/tailscale/issues/4060
Tailscale to the Rescue - Self-Hosted Services without Port-Forwarding + your Domain and SSL Certificates
地址:https://www./tailscale-to-the-rescue/
Exploring the Tailscale-Traefik Integration | Traefik Labs
地址:https:///blog/exploring-the-tailscale-traefik-proxy-integration/