hans

hans

Tailscale 不需要域名和 SSL 證書,自建 DERP 中繼服務

以下是在 Ubuntu 上建立自定義 DERP 伺服器的方法,無需域名和 SSL 證書,但需要一個公共 IP(網路伺服器將提供一個公共 IP,如 AWS、阿里雲等):

  1. apt update && apt install -y wget git openssl curl sudo vim systemctl cron
  2. 檢查最新版本的 go here
  3. wget https://golang.google.cn/dl/go1.21.3.linux-amd64.tar.gz 把 1.21.3 改為最新的版本號
  4. rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.3.linux-amd64.tar.gz替換系統預設 go
  5. 修改系統變數 export PATH=$PATH:/usr/local/go/bin
  6. 如果你在中國,需要添加 go 源:
    go env -w GO111MODULE=on
    go env -w GOPROXY=https://goproxy.cn,direct
    
  7. 安裝 DERPER go install tailscale.com/cmd/derper@main
  8. 進入文件夾 ~/go/pkg/mod/[tailscale]/cmd/derper, 然後修改文件 vim cert.go 刪掉驗證相關內容:
    if hi.ServerName != m.hostname {
       return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
    }
    
  9. 編譯 DERPER: go build -o /etc/derp/derper
  10. 生成自簽名 SSL 證書 openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.test.com.key -out /etc/derp/derp.test.com.crt -subj "/CN=derp.test.com" -addext "subjectAltName=DNS:derp.test.com"
  11. 創建系統服務vim /etc/systemd/system/derp.service:
    [Unit]
    
    Description=TS Derper
          
    After=network.target
          
    Wants=network.target
          
    [Service]
          
    User=root
          
    Restart=always
          
    ExecStart=/etc/derp/derper -hostname derp.test.com -a :12345 -http-port 33446 -certmode manual -certdir /etc/derp --verify-clients
          
    RestartSec=5
    
    StartLimitInterval=0
          
    [Install]
          
    WantedBy=multi-user.target
    
    12345 是 DERP 節點的埠號,需要以 TCP 協議公開到公網。你也可以設置你自己喜歡的埠號。埠 3478 需要以 UDP 協議公開,這個埠號不能更改, stun 服務所需.
  12. systemctl enable derp
    systemctl start derp
    systemctl status derp
    
    跑完上面命令後,DERPER 應該顯示激活狀態。然後在瀏覽器打開 https://IP:PORT, 你會看到:
    DERP
    This is a Tailscale DERP server
    
  13. 打開 Tailscale Admin Console, 點擊 Access Controls, 把以下內容複製在ssh上面:
    "derpMap": {
      "OmitDefaultRegions": true, // 如果為true,即不使用Tailscale的默認 DERP節點
      "Regions": {
       "900": {  // 可以是任意大於900的數字
     		 "RegionID":   900, // 同上
      		 "RegionCode": "myDerp",
     		 "Nodes": [
     			 {
     				 "Name":             "1", 
     				 "RegionID":         900, // 同上
     				 "HostName":         "xxx.xxx.xxx.xxx", // 你的 IP
     				 "DERPPort":         12345, // 你的埠號
     				 "InsecureForTests": true, // 必須為true,以跳過證書驗證
     			 },
     		 ],
     	 },
      },
     },
    
  14. 檢查 DERP 節點是否工作,在其他設備上運行 tailscale netcheck.
    Report:
     * UDP: false
     * IPv4: (no addr found)
     * IPv6: no, but OS has support
     * MappingVariesByDestIP: 
     * HairPinning: 
     * PortMapping: 
     * CaptivePortal: false
     * Nearest DERP: Amsterdam
     * DERP latency:
             - ams: 12ms    (Amsterdam)
             - lhr: 13ms    (London)
             - hans: 13.1ms  ()
    
    哎臥槽我家裡的節點速度還不如默認的快。
  15. DERPER 服務總會自己掛掉,保險起見我們需要定時重啟該服務. crontab是最好的選擇.
  16. systemctl start cron
    systemctl enable cron
    systemctl status cron
    
  17. 運行 crontab -e 粘貼 0 */12 * * * systemctl start derp 進去. DERPER 服務會每 12 小時重啟一次。然後按 ESC, 輸入 :wq 退出.
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。