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, // 你的 port
     				 "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 退出.
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。