當前位置: 華文世界 > 數位

一鍵部署比 Tailscale 更好的內網穿透方案 Headscale

2024-01-09數位

Tailscale 是一種基於 WireGuard 的虛擬組網工具,它在使用者態實作了 WireGuard 協定,相比於內核態 WireGuard 效能會有所損失,但在功能和易用性上下了很大功夫:

  • 開箱即用
  • 無需配置防火墻
  • 沒有額外的配置
  • 高安全性/私密性
  • 自動金鑰輪換
  • 點對點連線
  • 支持使用者審查端到端的存取記錄
  • 在原有的 ICE、STUN 等 UDP 協定外,實作了 DERP TCP 協定來實作 NAT 穿透
  • 基於公網的控制伺服器下發 ACL 和配置,實作節點動態更新
  • 透過第三方(如 Google) SSO 服務生成使用者和私鑰,實作身份認證
  • 簡而言之,我們可以將 Tailscale 看成是更為易用、功能更完善的 WireGuard。

    光有這些還不夠,作為一個白嫖黨,咱更關心的是 開源 自建

    Tailscale 是一款商業產品,但個人使用者是可以白嫖的,個人使用者在接入裝置不超過 20 台的情況下是可以免費使用的(雖然有一些限制,比如子網路網段無法自訂,且無法設定多個子網路)。除 Windows 和 macOS 的圖形應用程式外,其他 Tailscale 客戶端的元件(包含 Android 客戶端)是在 BSD 授權下以開源計畫的形式開發的,你可以在他們的 GitHub 倉庫[1] 找到各個作業系統的客戶端源碼。

    對於大部份使用者來說,白嫖 Tailscale 已經足夠了,如果你有更高的需求,比如自訂網段,可以選擇付費。

    我就想自建行不行?行,不過得往下看。

    Headscale 是什麽

    Tailscale 的控制伺服器是不開源的,而且對免費使用者有諸多限制,這是人家的搖錢樹,可以理解。好在目前有一款開源的實作叫 Headscale[2] ,這也是唯一的一款,希望能發展壯大。

    Headscale 由歐洲航天局的 Juan Font 使用 Go 語言開發,在 BSD 授權下釋出,實作了 Tailscale 控制伺服器的所有主要功能,可以部署在企業內部,沒有任何裝置數量的限制,且所有的網路流量都由自己控制。

    Headscale 部署

    使用 Sealos 一鍵部署

    如果你嫌下面太長不看,可以選擇直接使用 Sealos 套用樣版一鍵部署,有手就行,啥都不需要設定。

    直接復制下面的連結貼上到瀏覽器開啟 Sealos 的套用樣版部署界面:

  • https://template.cloud.sealos.io/deploy?templateName=headscale
  • 如果您是第一次開啟 Sealos,需要先註冊登入帳號。

    然後點選「部署套用」按鈕開始部署。部署完成後,你會看到兩個套用,一個是 Headscale,另一個則是 Headscale 視覺化界面[3]

    點選 Headscale 套用的「詳情」進入詳情頁面。內網埠 8080 對應的外網地址就是 Headscale 的公網網域名稱。

    Headscale 公網網域名稱後面跟上路徑 /admin/ 即可開啟視覺化界面。

    在 Linux 上部署

    在 Linux 上的部署步驟就稍微復雜點了

    理論上來說只要你的 Headscale 服務可以暴露到公網出口就行,但最好不要有 NAT,所以推薦將 Headscale 部署在有公網 IP 的雲主機上。

    首先需要到其 GitHub 倉庫的 Release 頁面下載最新版的二進制檔。

    $ wget --output-document=/usr/local/bin/headscale \ https://github.com/juanfont/headscale/releases/download/v<HEADSCALE VERSION>/headscale_<HEADSCALE VERSION>_linux_<ARCH>$ chmod +x /usr/local/bin/headscale

    建立配置目錄:

    $ mkdir -p /etc/headscale

    建立目錄用來儲存數據與證書:

    $ mkdir -p /var/lib/headscale

    建立空的 SQLite 資料庫檔:

    $ touch /var/lib/headscale/db.sqlite

    建立 Headscale 配置檔:

    $ wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml

  • 修改配置檔,將 server_url 改為公網 IP 或網域名稱。 如果是國內伺服器,網域名稱必須要備案 。我的網域名稱無法備案,所以我就直接用公網 IP 了。
  • 如果暫時用不到 DNS 功能,可以先將 magic_dns 設為 false。
  • server_url 設定為 http://<PUBLIC_ENDPOINT>:8080 ,將 <PUBLIC_ENDPOINT> 替換為公網 IP 或者網域名稱。
  • 建議開啟隨機埠,將 randomize_client_port 設為 true。
  • 可自訂私有網段,也可同時開啟 IPv4 和 IPv6: ip_prefixes:
    # - fd7a:115c:a1e0::/48
    - 100.64.0.0 /16
  • 建立 SystemD service 配置檔:

    # /etc/systemd/system/headscale.service[Unit]Description=headscale controllerAfter=syslog.targetAfter=network.target[Service]Type=simpleUser=headscaleGroup=headscaleExecStart=/usr/local/bin/headscale serveRestart=alwaysRestartSec=5# Optional security enhancementsNoNewPrivileges=yesPrivateTmp=yesProtectSystem=strictProtectHome=yesReadWritePaths=/var/lib/headscale /var/run/headscaleAmbientCapabilities=CAP_NET_BIND_SERVICERuntimeDirectory=headscale[Install]WantedBy=multi-user.target

    建立 headscale 使用者:

    $ useradd headscale -d /home/headscale -m

    修改 /var/lib/headscale 目錄的 owner:

    $ chown -R headscale:headscale /var/lib/headscale

    修改配置檔中的 unix_socket :

    unix_socket: /var/run/headscale/headscale.sock

    Reload SystemD 以載入新的配置檔:

    $ systemctl daemon-reload

    啟動 Headscale 服務並設定開機自啟:

    $ systemctl enable --now headscale

    檢視執行狀態:

    $ systemctl status headscale

    檢視占用埠:

    $ ss -tulnp|grep headscaletcp LISTEN 0 1024 [::]:9090 [::]:* users:(("headscale",pid=10899,fd=13))tcp LISTEN 0 1024 [::]:50443 [::]:* users:(("headscale",pid=10899,fd=10))tcp LISTEN 0 1024 [::]:8080 [::]:* users:(("headscale",pid=10899,fd=12))

    建立使用者

    命令列

    Tailscale 中有一個概念叫 tailnet,你可以理解成租戶,租戶與租戶之間是相互隔離的,具體看參考 Tailscale 的官方文件: What is a tailnet[4] 。Headscale 也有類似的實作叫 user,即使用者。我們需要先建立一個 user,以便後續客戶端接入,例如:

    $ headscale user create default

    檢視名稱空間:

    $ headscale user listID | Name | Created1 | default | 2022-03-09 06:12:06

    如果你是透過 Sealos 一鍵部署的 Headscale,可以在 Headscale 套用的詳情頁面點選右側的「終端」按鈕進入 Headscale 容器的終端:

    然後在終端中執行上述命令建立 user。

    視覺化界面

    Headscale-Admin[5] 需要透過 API Key 來接入 Headscale,所以在使用之前我們需要先建立一個 API key。在 Headscale 套用的詳情頁面點選右側的「終端」按鈕進入 Headscale 容器的終端:

    然後執行以下命令建立 API Key:

    $ headscale apikey create

    將 Headscale 公網網域名稱和 API Key 填入 Headscale-Admin 的設定頁面,同時取消勾選 Legacy API,然後點選「Save」:

    接入成功後,點選左邊側欄的「Users」,然後點選「Create」開始建立使用者:

    Tailscale 客戶端接入

    目前除了 iOS 客戶端,其他平台的客戶端都有辦法自訂 Tailscale 的控制伺服器。

    OS是否支持 Headscale LinuxYes OpenBSDYes FreeBSDYes macOSYes WindowsYes 參考 Windows 客戶端文件[6] AndroidYes iOSYes

    我們先來看下 Linux 平台的接入。

    Linux

    Tailscale 官方提供了各種 Linux 發行版的軟體包,但國內的網路你懂得,軟體源根本用不了。好在官方還提供了 靜態編譯的二進制檔[7] ,我們可以直接下載。例如:

    $ wget https://pkgs.tailscale.com/stable/tailscale_1.22.2_amd64.tgz

    解壓:

    $ tar zxvf tailscale_1.22.2_amd64.tgzx tailscale_1.22.2_amd64/x tailscale_1.22.2_amd64/tailscalex tailscale_1.22.2_amd64/tailscaledx tailscale_1.22.2_amd64/systemd/x tailscale_1.22.2_amd64/systemd/tailscaled.defaultsx tailscale_1.22.2_amd64/systemd/tailscaled.service

    將二進制檔復制到官方軟體包預設的路徑下:

    $ cp tailscale_1.22.2_amd64/tailscaled /usr/sbin/tailscaled$ cp tailscale_1.22.2_amd64/tailscale /usr/bin/tailscale

    將 systemD service 配置檔復制到系統路徑下:

    $ cp tailscale_1.22.2_amd64/systemd/tailscaled.service /lib/systemd/system/tailscaled.service

    將環境變量配置檔復制到系統路徑下:

    $ cp tailscale_1.22.2_amd64/systemd/tailscaled.defaults /etc/default/tailscaled

    啟動 tailscaled.service 並設定開機自啟:

    $ systemctl enable --now tailscaled

    檢視服務狀態:

    $ systemctl status tailscaled

    Tailscale 接入 Headscale:

    # 如果你是在自己的伺服器上部署的,請將 <HEADSCALE_PUB_ENDPOINT> 換成你的 Headscale 公網 IP 或網域名稱$ tailscale up --login-server=http://<HEADSCALE_PUB_ENDPOINT>:8080 --accept-routes=true --accept-dns=false# 如果你是使用 Sealos 一鍵部署的,請將 <HEADSCALE_PUB_ENDPOINT> 換成上文提到的 Sealos 中的 Headscale 公網網域名稱$ tailscale up --login-server=https://<HEADSCALE_PUB_ENDPOINT> --accept-routes=true --accept-dns=false

    你也可以在 Headsca-Admin 的 Deploy 界面獲取接入命令:

    這裏推薦將 DNS 功能關閉,因為它會覆蓋系統的預設 DNS。如果你對 DNS 有需求,可自己研究官方文件,這裏不再贅述。

    執行完上面的命令後,會出現下面的資訊:

    To authenticate, visit: https://qgemohpy.cloud.sealos.io/register/mkey:e13651ddbfc269513723f1afd6f42465e56922b67ecea8f37d61a35b1b357e0c

    在瀏覽器中開啟該連結,就會出現如下的界面:

    將其中的命令復制貼上到 headscale 所在機器的終端中,並將 USERNAME 替換為前面所建立的 user。

    $ headscale nodes register --user default --key 905cf165204800247fbd33989dbc22be95c987286c45aac3033937041150d846Machine register

    註冊成功,檢視註冊的節點:

    $ headscale nodes listID | Name | NodeKey | Namespace | IP addresses | Ephemeral | Last seen | Online | Expired1 | coredns | [Ew3RB] | default | 100.64.0.1 | false | 2022-03-20 09:08:58 | online | no

    回到 Tailscale 客戶端所在的 Linux 主機,可以看到 Tailscale 會自動建立相關的路由表和 iptables 規則。路由表可透過以下命令檢視:

    $ ip route show table 52

    檢視 iptables 規則:

    $ iptables -S-P INPUT DROP-P FORWARD ACCEPT-P OUTPUT ACCEPT-N ts-forward-N ts-input-A INPUT -j ts-input-A FORWARD -j ts-forward-A ts-forward -i tailscale0 -j MARK --set-xmark 0x40000/0xffffffff-A ts-forward -m mark --mark 0x40000 -j ACCEPT-A ts-forward -s 100.64.0.0/10 -o tailscale0 -j DROP-A ts-forward -o tailscale0 -j ACCEPT-A ts-input -s 100.64.0.5/32 -i lo -j ACCEPT-A ts-input -s 100.115.92.0/23 ! -i tailscale0 -j RETURN-A ts-input -s 100.64.0.0/10 ! -i tailscale0 -j DROP$ iptables -S -t nat-P PREROUTING ACCEPT-P INPUT ACCEPT-P OUTPUT ACCEPT-P POSTROUTING ACCEPT-A ts-postrouting -m mark --mark 0x40000 -j MASQUERADE

    macOS

    macOS 有 3 種安裝方法:

  • 直接透過市集安裝,地址: https://apps.apple.com/ca/app/tailscale/id1475387142[8] 。前提是你 需要一個美區 ID 。。。
  • 下載 安裝包[9] 直接安裝,繞過市集。
  • 安裝開源的命令列工具 tailscale 和 tailscaled 。相關連結: https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS[10]
  • 這三種安裝包的核心封包處理程式碼是相同的,唯一的區別在於在於打包方式以及與系統的互動方式。

    市集裏的套用執行在一個 套用沙箱[11] 中,與系統的其他部份隔離。在沙箱內,套用可以是一個 網路擴充套件[12] ,以實作 VPN 或者類 VPN 的功能。網路擴充套件實作的功能對市集之外的套用是無法生效的。

    從 macOS 從 10.15 開始新增了 系統擴充套件[13] ,說白了就是執行在使用者態的內核擴充套件,它相比於傳統的網路擴充套件增強了很多功能,比如內容過濾、透明代理、DNS 代理等。Tailscale 獨立於市集的安裝包使用的就是 系統擴充套件 ,透過 DMG 或者 zip 壓縮包進行分發。

    {{< alert >}} 不要同時安裝市集版本和獨立分發版本,同時只能裝一個。 {{< /alert >}}

    而命令列工具既沒有使用網路擴充套件也沒有使用系統擴充套件,而是使用的 utun 介面[14] ,相比於 GUI 版本缺少了部份功能,比如 MagicDNS 和 Taildrop。

    總覽:


    市集(網路擴充套件)獨立套用(系統擴充套件)命令列版本 是否可用 yes[15] yes, beta[16]yes[17] 圖形界面yesyesno; CLI macOS 最低版本macOS 10.13macOS 10.15macOS 10.13 背景執行no; sandboxed理論上支持; 尚未實作yes 使用的鑰匙串使用者級系統級直接存放在檔中 沙盒隔離yesnono 自動更新yes; 市集直接更新yes; Sparkle[18] no 是否開源nonoyes MagicDNSyesyesyes Taildropyesyes未實作

    安裝完 GUI 版套用後還需要做一些騷操作,才能讓 Tailscale 使用 Headscale 作為控制伺服器。當然,Headscale 已經給我們提供了詳細的操作步驟,你只需要在瀏覽器中開啟 URL: https://<HEADSCALE_PUB_ENDPOINT>/apple ,便會出現如下的界面:

    對於 1.34.0 及以上的 Tailscale 版本,可以按照下面的方法來操作:

    1. 長按「ALT」鍵,然後點選頂部選單欄的 Tailscale 圖示,然後將滑鼠指標懸停在「Debug」選單上。
    2. 在「Custom Login Server」下方選擇「Add Account...」。
    3. 在開啟的彈窗中填入 Headscale 的公網網域名稱,然後點選「Add Account」。
    4. 然後立馬就會跳轉到瀏覽器並開啟一個頁面。
    5. 接下來與之前 Linux 客戶端相同,回到 Headscale 所在的機器執行瀏覽器中的命令即可,註冊成功:

    回到 Headscale 所在主機,檢視註冊的節點:

    $ headscale nodes listID | Name | NodeKey | Namespace | IP addresses | Ephemeral | Last seen | Online | Expired1 | coredns | [Ew3RB] | default | 100.64.0.1 | false | 2022-03-20 09:08:58 | online | no2 | carsondemacbook-pro | [k7bzX] | default | 100.64.0.2 | false | 2022-03-20 09:48:30 | online | no

    回到 macOS,測試是否能 ping 通對端節點:

    $ ping -c 2 100.64.0.1PING 100.64.0.1 (100.64.0.1): 56 data bytes64 bytes from 100.64.0.1: icmp_seq=0 ttl=64 time=37.025 ms64 bytes from 100.64.0.1: icmp_seq=1 ttl=64 time=38.181 ms--- 100.64.0.1 ping statistics ---2 packets transmitted, 2 packets received, 0.0% packet lossround-trip min/avg/max/stddev = 37.025/37.603/38.181/0.578 ms

    也可以使用 Tailscale CLI 來測試:

    $ /Applications/Tailscale.app/Contents/MacOS/Tailscale ping 100.64.0.1pong from coredns (100.64.0.1) via xxxx:41641 in 36ms

    對於版本號低於 1.32.0 的 Tailscale 客戶端,你只需要按照圖中所述的步驟操作即可,本文就不再贅述了。

    Android

    Android 客戶端從 1.30.0 版本開始支持自訂控制伺服器(即 coordination server),你可以透過 Google Play[19] 或者 F-Droid[20] 下載最新版本的客戶端。

    安裝完成後開啟 Tailscale App,會出現如下的界面:

    點開右上角的「三個點」,你會看到只有一個 About 選項:

    接下來就需要一些騷操作了,你需要反復不停地 點開再關閉 右上角的「三個點」,重復三四次之後,便會出現一個 Change server 選項:

    點選 Change server ,將 headscale 控制伺服器的地址填進去:

    然後點選 Save and restart 重新開機,點選 Sign in with other ,就會跳出這個頁面:

    將其中的命令貼上到 Headscale 所在主機的終端,將 USER 替換為之前建立的 user,然後執行命令即可。註冊成功後可將該頁面關閉,回到 App 主頁,效果如圖:

    Windows

    Windows Tailscale 客戶端想要使用 Headscale 作為控制伺服器,只需在瀏覽器中開啟 URL: https://<HEADSCALE_PUB_ENDPOINT>/windows ,便會出現如下的界面:

    按照其中的步驟操作即可。

    其他 Linux 發行版

    除了常規的 Linux 發行版之外,還有一些特殊場景的 Linux 發行版,比如 OpenWrt、威聯通(QNAP)、群暉等,這些發行版的安裝方法已經有人寫好了,這裏就不詳細描述了,我只給出相關的 GitHub 倉庫,大家如果自己有需求,直接去看相關倉庫的文件即可。

  • OpenWrt: https://github.com/adyanth/openwrt-tailscale-enabler[21]
  • 群暉: https://github.com/tailscale/tailscale-synology[22]
  • 威聯通: https://github.com/tailscale/tailscale-qpkg[23]
  • iOS

    iOS 系統直接從市集安裝即可,當然前提是你需要有一個美區 ID。

    1. 安裝完成後開啟 Tailscale 確認你沒有登入任何帳號。然後開啟「設定」,向下滑動,在「Game Center」或者「電視提供商」下方找到「Tailscale」,然後點選進去。如果你的裝置之前登入過 Tailscale 伺服端,需要將「Reset Keychain」選項開啟。
    2. 在「Alternate Coordination Server URL」下方輸入你的 Headscale 公網網域名稱。
    3. 從 iOS 應用程式切換器中關閉 Tailscale 再重新開啟,然後選擇「Log in」,就會彈出一個 Headscale 身份認證頁面。
    4. 將 Headscale 身份認證頁面中的命令復制貼上到 headscale 所在容器的終端中,並將 USERNAME 替換為前面所建立的 user。 $ headscale nodes register --user default --key mkey:1fbd9696ebb03b9394033949514345bc5dba0e570bc0d778f15f92a02d2dcb66
      2023-12-29T09:55:38Z TRC DNS configuration loaded dns_config={ "Nameservers" :[ "1.1.1.1" ], "Proxied" : true , "Resolvers" :[{ "Addr" : "1.1.1.1" }]}
      Node localhost registered
    5. 註冊成功。

    透過 Pre-Authkeys 接入

    前面的接入方法都需要伺服端同意,步驟比較煩瑣,其實還有更簡單的方法,可以直接接入,不需要伺服端同意。

    首先在伺服端生成 pre-authkey 的 token,有效期可以設定為 24 小時:

    $ headscale preauthkeys create -e 24h --user default

    檢視已經生成的 key:

    $ headscale --user default preauthkeys listID | Key | Reusable | Ephemeral | Used | Expiration | Created 1 | 57e419c40e30b0dxxxxxxxf15562c18a8c6xxxx28ae76f57 | false | false | false | 2022-05-30 07:14:17 | 2022-05-29 07:14:17

    當然你也可以在 Headscale-Admin 中生成。點選客戶端想加入的 User:

    在彈出的界面中點選「PreAuth Keys」右側的 Create ,設定一個過期時間(比如 100 年~),如果想重復利用這個 Key,可以勾選 Reusable ,最後點選 ✅:

    建立成功後,點選紅框區域便可復制該 PreAuth Key:

    現在新節點就可以無需伺服端同意直接接入了:

    $ tailscale up --login-server=http://<HEADSCALE_PUB_ENDPOINT>:8080 --accept-routes=true --accept-dns=false --authkey $KEY

    打通區域網路

    到目前為止我們只是打造了一個點對點的 Mesh 網路,各個節點之間都可以透過 WireGuard 的私有網路 IP 進行直連。但我們可以更大膽一點,還記得我在文章開頭提到的存取家庭內網的資源嗎?我們可以透過適當的配置讓每個節點都能存取其他節點的區域網路 IP。這個使用場景就比較多了,你可以直接存取家庭內網的 NAS,或者內網的任何一個服務, 更高級的玩家可以使用這個方法來存取雲上 Kubernetes 集群的 Pod IP 和 Service IP。

    假設你的家庭內網有一台 Linux 主機(比如 OpenWrt)安裝了 Tailscale 客戶端,我們希望其他 Tailscale 客戶端可以直接透過家中的區域網路 IP(例如 192.168.100.0/24 ) 存取家庭內網的任何一台裝置。

    配置方法很簡單,首先需要設定 IPv4 與 IPv6 路由轉發:

    $ echo 'net.ipv4.ip_forward = 1' | tee /etc/sysctl.d/ipforwarding.conf$ echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/ipforwarding.conf$ sysctl -p /etc/sysctl.d/ipforwarding.conf

    客戶端修改註冊節點的命令,在原來命令的基礎上加上參數 --advertise-routes=192.168.100.0/24 ,告訴 Headscale 伺服器「我這個節點可以轉發這些地址的路由」。

    $ tailscale up --login-server=http://<HEADSCALE_PUB_ENDPOINT>:8080 --accept-routes=true --accept-dns=false --advertise-routes=192.168.100.0/24 --reset

    在 Headscale 端檢視路由,可以看到相關路由是關閉的。

    $ headscale nodes list|grep openwrt6 | openwrt | [7LdVc] | default | 100.64.0.6 | false | 2022-03-20 15:50:46 | online | no$ headscale routes list -i 6Route | Enabled192.168.100.0/24 | false

    開啟路由:

    $ headscale routes enable -i 6 -r "192.168.100.0/24"Route | Enabled192.168.100.0/24 | true

    如果有多條路由需要用 , 隔開:

    $ headscale routes enable -i 6 -r "192.168.100.0/24,xxxx"

    也可以透過參數 -a 開啟所有路由:

    $ headscale routes enable -i 6 -a

    其他節點檢視路由結果:

    $ ip route show table 52|grep "192.168.100.0/24"192.168.100.0/24 dev tailscale0

    其他節點啟動時需要增加 --accept-routes=true 選項來聲明 「我接受外部其他節點釋出的路由」。

    現在你在任何一個 Tailscale 客戶端所在的節點都可以 ping 通家庭內網的機器了,你在公司或者星巴克也可以像在家裏一樣用同樣的 IP 隨意存取家中的任何一個裝置,就問你香不香?

    總結

    目前從穩定性來看,Tailscale 比其他機遇 WireGuard 的組網工具略勝一籌,基本上不會時不時出現 ping 不通的情況,這取決於 Tailscale 在使用者態對 NAT 穿透所做的種種最佳化,他們還專門寫了一篇文章介紹 NAT 穿透的原理[24] 中文版[25] 轉譯自國內的 eBPF 大佬趙亞楠,墻裂推薦大家閱讀。放一張圖給大家感受一下:

    參照連結

    [1] GitHub 倉庫: https://github.com/tailscale/ [2] Headscale: https://github.com/juanfont/headscale [3] Headscale 視覺化界面: https://github.com/GoodiesHQ/headscale-admin [4] What is a tailnet: https://tailscale.com/kb/1136/tailnet/ [5] Headscale-Admin: https://github.com/GoodiesHQ/headscale-admin [6] Windows 客戶端文件: https://github.com/juanfont/headscale/blob/main/docs/windows-client.md [7] 靜態編譯的二進制檔: https://tailscale.com/download/linux/static [8] https://apps.apple.com/ca/app/tailscale/id1475387142: https://apps.apple.com/ca/app/tailscale/id1475387142 [9] 安裝包: https://pkgs.tailscale.com/stable/#macos [10] https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS: https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS [11] 套用沙箱: https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AboutAppSandbox/AboutAppSandbox.html [12] 網路擴充套件: https://developer.apple.com/documentation/networkextension [13] 系統擴充套件: https://developer.apple.com/system-extensions/ [14] utun 介面: https://en.wikipedia.org/wiki/TUN/TAP [15] yes: https://apps.apple.com/ca/app/tailscale/id1475387142 [16] beta: https://tailscale.com/kb/1167/release-stages/#beta [17] yes: https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS [18] Sparkle: https://sparkle-project.org/ [19] Google Play: https://play.google.com/store/apps/details?id=com.tailscale.ipn [20] F-Droid: https://f-droid.org/packages/com.tailscale.ipn/ [21] https://github.com/adyanth/openwrt-tailscale-enabler: https://github.com/adyanth/openwrt-tailscale-enabler [22] https://github.com/tailscale/tailscale-synology: https://github.com/tailscale/tailscale-synology [23] https://github.com/tailscale/tailscale-qpkg: hhttps://github.com/tailscale/tailscale-qpkg [24] NAT 穿透的原理: https://tailscale.com/blog/how-nat-traversal-works/ [25] 中文版: https://arthurchiao.art/blog/how-nat-traversal-works-zh/

    加入 Sealos 開源社群 體驗像個人電腦一樣簡單的雲作業系統



    官網連結 https://sealos.run
    GitHub 地址 https://github.com/labring/sealos
    存取 Sealos 文件 https://sealos.run/docs/Intro
    ️逛逛論壇 https://forum.laf.run/

    往期推薦

    3 分鐘為英語學習神器 Anki 部署一個專屬同步伺服器 2024-01-03

    好家夥,這個開源計畫硬生生復制了一個 ChatGPT Plus 出來 2023-12-19

    開源不掙錢?這個計畫上線半年月入超 30w 2023-12-15

    關於 Sealos

    Sealos 是一款以 Kubernetes 為內核的雲作業系統發行版。它以雲原生的方式,拋棄了傳統的雲端運算架構,轉向以 Kubernetes 為雲內核的新架構,使企業能夠像使用個人電腦一樣簡單地使用雲。