本站使用了 Pjax 等基于 JavaScript 的开发技术,但您的浏览器已禁用 JavaScript,请开启 JavaScript 以保证网站正常显示!

tailscale部署私有中继服务器

更新:自定义端口部署方法

tailscale部署私有中继服务器-docker部署+自定义端口

tailscale

安装golang环境

tailscale项目使用的golang环境比较新,部署自定义derper服务要求golang版本1.16以上。推荐尽可能安装最新的版本,本文安装目前最新版本
1.17.1。

1. 下载

golang官网在国外,直接从官网下载会比较慢,可以选择国内镜像站下载,如

wget https://studygolang.com/dl/golang/go1.17.1.linux-amd64.tar.gz

注意选择服务器的架构,本文中选择的是amd64架构也就是x86的64位处理器,系统Linux。

2. 解压安装

tar -C /usr/local -xzf go1.17.1.linux-amd64.tar.gz

3. 设置环境变量

编辑 /etc/profile文件,添加如下内容。编辑文件可以使用vim或者宝塔等其他工具。

export GOROOT=/usr/local/go
export GOPATH=/root/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin

保存退出后,执行以下命令使环境变量生效

source /etc/profile

4. 检查golang是否安装成功

go -version

查看golang版本,如果有相应信息返回,则说明golang环境安装成功。

安装derper服务

1. 下载

安装derper服务,执行以下命令

go install tailscale.com/cmd/derper@main

等待下载安装完成,查看是否安装成功

2. 检查

derper -h

如果有以下提示信息

Usage of derper:
  -a string
        server address (default ":443")
  -bootstrap-dns-names string
        optional comma-separated list of hostnames to make available at /bootstrap-dns
  -c string
        config file path
  -certdir string
        directory to store LetsEncrypt certs, if addr's port is :443 (default "/root/.cache/tailscale/derper-certs")
  -dev
        run in localhost development mode
  -hostname string
        LetsEncrypt host name, if addr's port is :443 (default "derp.tailscale.com")
  -logcollection string
        If non-empty, logtail collection to log to
  -mesh-psk-file string
        if non-empty, path to file containing the mesh pre-shared key file. It should contain some hex string; whitespace is trimmed.
  -mesh-with string
        optional comma-separated list of hostnames to mesh with; the server's own hostname can be in the list
  -stun
        also run a STUN server
  -verify-clients
        verify clients to this DERP server through a local tailscaled instance.

则说明derper安装成功

3. 启动服务

启动derper服务,执行以下命令即可。在此之前你需要完成以下准备:

  • 拥有一个域名,解析到服务器ip(国内则需要先备案)
  • 服务器安全组和系统防火墙放开443端口、3478端口

推荐腾讯云,新用户优惠力度还是比较大的,在带宽上感觉也比阿里云要慷慨一些。优惠链接

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元

derper -c=$HOME/derper.conf -hostname=yourhostname.com -stun

当看到以下返回信息,则说明derper服务成功了

2021/09/18 15:04:31 derper: serving on :443 with TLS
2021/09/18 15:04:31 running STUN server on [::]:3478

443端口比较宝贵,芒果测试了使用其他端口,但只能链接上节点,无法进行stun服务器的中转,暂时还找不到解决办法,后续解决后再更新。

4. derper进程守护

我们希望derper服务一直在线,则需要用进程守护工具。这里推荐使用宝塔的应用管理器插件。
配置如下:

名称:derper
执行文件:derper
命令参数:-c=/root/derper.conf -hostname=yourhostname.com -stun

配置控制台节点信息

 "ACLs": [
    // Match absolutely everything. Comment out this section if you want
    // to define specific ACL restrictions.
    { "Action": "accept", "Users": ["*"], "Ports": ["*:*"] },
  ],
  "derpMap": {
    "Regions": { "900": {
      "RegionID": 900,
      "RegionCode": "myderp",
      "Nodes": [{
          "Name": "1",
          "RegionID": 900,
          "HostName":"yourhostname.com",
      }]
    }}
  }

重启客户端服务

以windows为例,重启服务可以打开任务管理器-服务,找到tailscale服务,右键选择重启启动即可。
restart-tailscale

重启后,如果一切按步骤没问题,在控制台的设备详细页面就会看到已经链接上自建的节点。
tailscale-relays
可以看到延迟相比官方的国外节点低很多。

节点分享

自建的中继节点服务器是可以分享给他人使用的,芒果这里就将自建的节点分享出来,以方便没有条件或者不方便自建中继服务器的朋友,在控制主页填入一下配置信息即可

// Example/default ACLs for unrestricted connections.
{
  // Declare static groups of users beyond those in the identity service.
  "Groups": {
    "group:example": [ "user1@example.com", "user2@example.com" ],
  },
  // Declare convenient hostname aliases to use in place of IP addresses.
  "Hosts": {
     "example-host-1": "100.100.100.100",
  },
  "ACLs": [
    // Match absolutely everything. Comment out this section if you want
    // to define specific ACL restrictions.
    { "Action": "accept", "Users": ["*"], "Ports": ["*:*"] },
  ],
  "derpMap": {
    "Regions": { "900": {
      "RegionID": 900,
      "RegionCode": "mangoderp",
      "Nodes": [{
          "Name": "1",
          "RegionID": 900,
          //本节点由mangoroom.cn提供,请勿滥用。详情访问https://mangoroom.cn/tools/tailscale-custom-derper-servers.html
          "HostName":"tailscalederper.mangoroom.cn",
          "DERPPort":8082
      }]
    }}
  }
}

节点为腾讯云广州节点,带宽有限,请勿滥用,如果想支持本节点可双击下方点赞或者请芒果喝一杯奶茶

多节点配置

  • 写法一
  "Nodes": [{
          "Name": "1",
          "RegionID": 900,
          "HostName":"node1.com",
      },
      {
          "Name": "2",
          "RegionID": 900,
          "HostName":"node2.com",
      }]
  • 写法二
{
"ACLs":
"Action":"accept","Users":["∗"],"Ports":["∗:∗"]
,
"derpMap": {
"OmitDefaultRegions": false,
"Regions": { "900": {
"RegionID": 900,
"RegionCode": "HK",
"Nodes":
"Name":"HKPROXY","RegionID":900,"IPv4":"x.x.x.x","DERPPort":666//自定义端口

},"901": {
"RegionID": 901,
"RegionCode": "EU",
"Nodes":
"Name":"FARM","RegionID":900,"IPv4":"x.x.x.x","DERPPort":666//自定义端口

}

}
}
}

本文由芒果浩明发布,转载请注明出处。
本文链接:https://mangoroom.cn/tools/tailscale-custom-derper-servers.html


 继续浏览关于 tailscalefrpderper 的文章

 本文最后更新于:2022/03/05 13:16:13,可能因经年累月而与现状有所差异

 引用转载请注明:芒果的博客 > 工具 > tailscale部署私有中继服务器

精选评论

  1. 千羽
    千羽 回复

    Windows 10Chrome 110.0.0.0

    我成功搭建起来了,所有机器也都连上了,但是可能校园网环境太恶劣了,用手机流量打洞打不通。非443端口也不走中转,tailscale ping也ping不通。

  2. smartabc
    smartabc 回复

    Mac OS X 10_15_7Chrome 99.0.4844.51

    博主我用了你的derper地址,netcheck可以看到你的relay地址,但是两个节点之间为啥ping不通呢?

    1. 芒果

      可能是太多人用或着腾讯云的问题,中断一段时间后就恢复了

    2. 芒果

      嗯嗯,我发现自己也连不上了。不知道出了啥问题

  3. 搜索
    搜索 回复

    Windows 10Chrome 97.0.4692.99

    另外 多节点如何判断是否生效 自定义节点在 Relays里只显示一个
    Relay #900: 37.48 ms
    没有显示另外两个自定义节点 怎么判断另外两个是否生效?

    1. 芒果

      非443端口部署方法更新
      https://mangoroom.cn/tools/tailscale-custom-derper-servers-custom-derpport-base-docker.html

    2. 芒果

      暂时不知道如何判断两个节点都生效了,只能单独一个一个判断,但是多节点的配置写法我是参考官方的默认节点写的应该没问题

      1. yuan
        yuan 回复

        Mac OS X 10_15_7Chrome 98.0.4758.109

        {
        "ACLs": [{ "Action": "accept", "Users": ["*"], "Ports": ["*:*"] }],
        "derpMap": {
        "OmitDefaultRegions": false,
        "Regions": { "900": {
        "RegionID": 900,
        "RegionCode": "HK",
        "Nodes": [{
        "Name": "HK_PROXY",
        "RegionID": 900,
        "IPv4": "x.x.x.x",
        "DERPPort": 666 //自定义端口
        }]
        },"901": {
        "RegionID": 901,
        "RegionCode": "EU",
        "Nodes": [
        {
        "Name": "FARM",
        "RegionID": 900,
        "IPv4": "x.x.x.x",
        "DERPPort": 666 //自定义端口
        }]
        }

        }
        }
        }

        -----------------
        作者这种写法是, 每个region都相当于一个节点组,自动连接组内延时最低derper node. 两个region仅有一个node时,显示当前relay延时

        1. 芒果

          对的,这种多个region的配置可以方便查看连接的是哪个节点 icon_mrgreen.gif

  4. 搜索
    搜索 回复

    Windows 10Chrome 97.0.4692.99

    客户端升级到1.20.2后 三台设备都识别不到自建节点 博主有这个情况么?

    1. 芒果

      我还没升级客户端,未遇到

  5. 小白白
    小白白 回复

    Windows 7Chrome 88.0.4324.150

    请问下怎么编写 连续添加多个中继节点呀?

    1. 芒果

      非443端口部署方法更新
      https://mangoroom.cn/tools/tailscale-custom-derper-servers-custom-derpport-base-docker.html

    2. 芒果

      已更新添加多节点的配置方法,刷新一下就有了

  6. lcl101
    lcl101 回复

    Mac OS X 10_14_6Chrome 93.0.4577.63

    这几天在申请443了,其他端口怎么测试都不行

    1. 芒果

      非443端口部署方法更新:https://mangoroom.cn/tools/tailscale-custom-derper-servers-custom-derpport-base-docker.html

    2. 芒果

      443端口一般都没什么问题,缺点就是服务器其他服务就用不了443端口

      1. lcl101
        lcl101 回复

        Mac OS X 10_14_6Chrome 93.0.4577.63

        你的443端口是怎么设置的

        1. 芒果

          本文记录的就是443端口的部署方式

  7. nic
    nic 回复

    Windows 10Firefox 91.0

    发现自建的非443端口,无法中转,已放弃。用博主提供的derper了,感谢。

    1. 芒果

      非443端口部署方法更新
      https://mangoroom.cn/tools/tailscale-custom-derper-servers-custom-derpport-base-docker.html

      1. nic
        nic 回复

        Windows 10Firefox 91.0

        博主你的derper是不是挂掉了?

        1. 芒果

          没有,现在是非443端口了。需要看文章更新一下配置

          1. 芒果

            我还正常连上,我估计是太多人用了。小水管服务器顶不住

          2. nic
            nic 回复

            Windows 10Firefox 91.0

            昨天好用,今天好像又不好用了。

    2. 芒果

      非443端口比较玄学,我也尝试了多种方法也未成功。评论区有成功的,如果还想继续折腾可以参考一下他们的方法

      1. nic
        nic 回复

        Windows 10Firefox 91.0

        你提供的中继下行速度限速是2M吗?

  8. opopop880
    opopop880 回复

    Windows 10Chrome 96.0.4664.110

    https://github.com/tailscale/tailscale/issues/3626
    我已经提了issues 官方解决不了 好诡异 说是greatwall的问题
    你们有没有遇到

    1. 芒果

      非443端口部署方法更新
      https://mangoroom.cn/tools/tailscale-custom-derper-servers-custom-derpport-base-docker.html

    2. opopop880
      opopop880 回复

      Android 12Chrome 89.0.4389.72

      443端口是不是要网站备案 我用其他端口https访问 加了自己的ssl没问题

      1. 芒果

        按照国内法律法来说,所有域名解析到大陆境内的服务器都需要备案的,web默认的80和443端口不备案肯定无法正常使用,其他端口我就不确定了

    3. 芒果

      这个我并没有遇到过,可能确实比较少见

  9. talwayh
    talwayh 回复

    Windows 10Chrome 96.0.4664.110

    Docker 腾讯云轻量服务器部署,6M广州 1T流量

    "HostName":"derp.wokeroom.cn",
    "IPv4":"159.75.67.244",
    "DERPPort":8082

  10. tail
    tail 回复

    Mac OS X 10_15_7Chrome 96.0.4664.110

    请问出现下面的报错是为什么呢?
    2021/12/27 16:40:10 derper: serving on :443 with TLS
    2021/12/27 16:40:10 running STUN server on [::]:3478
    2021/12/27 16:47:00 derp client 156.0.201.97:2056/6e6f64656b65793a6462383434626431636263393033333039356263613766326233613233373732313062323534633835643132323231643234383239313935633166623332: read EOF
    2021/12/27 16:47:00 derp client 156.0.201.97:2056/6e6f64656b65793a6462383434626431636263393033333039356263613766326233613233373732313062323534633835643132323231643234383239313935633166623332: removing connection

    1. 芒果

      这个错误我没有遇到过,看了一下我好像也没有能给到你有实际性的帮助。如果还是无法解决,我推荐你去tailscale官方的github去提issue。https://github.com/tailscale/tailscale/issues

  11. tail
    tail 回复

    Mac OS X 10_15_7Chrome 96.0.4664.110

    为什么我按照博主的配置了,但是derp列表里就是不出现我添加的derp,用的也是腾讯云轻量应用服务器,但是使用国外的服务器同样配置却可以,是因为没有备案吗,还是tailscale被国内ban了

    1. 芒果

      这个和tailscale没关系,域名只有备案了才能正常解析到国内的服务器,文中也提了国内服务器需要备案的域名

  12. tail
    tail 回复

    Mac OS X 10_15_7Chrome 96.0.4664.110

    请问在国内服务器上搭建derp需要自己生成证书吗,怎么生成呢,还是说是derper自动生成letsencrypt证书?但是国内不是不支持letsencrypt证书吗

    1. 芒果

      默认启用443端口启动就会自动生成的,无需自己申请配置

  13. opopop880
    opopop880 回复

    Android 12Chrome 89.0.4389.72

    等待非443端口方法

    1. 芒果

      非443端口建议可以尝试以下两种方法:
      1. https://hub.docker.com/r/zouyq/derper
      2. https://github.com/juanfont/headscale
      方法1是基于docker的有人测试成功了,但我测试并未成功。方法2是使用第三方的服务实现脱离tailscale官方部署自己独立的局域网,我并未测试过。

      1. opopop880
        opopop880 回复

        Android 12Chrome 95.0.4638.74

        我成功了https://blog.csdn.net/opopop880/article/details/122125430 谢谢

        1. tail
          tail 回复

          Windows 10Chrome 96.0.4664.110

          该方法可行,我也ok了

  14. opopop880
    opopop880 回复

    Windows 10Chrome 96.0.4664.110

    hallenge type found
    2021/12/23 17:18:36 http: TLS handshake error from 59.172.250.106:51633: acme/autocert: missing certificate
    2021/12/23 17:18:38 http: TLS handshake error from 59.172.250.106:51645: acme/autocert: missing certificate
    2021/12/23 17:18:38 http: TLS handshake error from 59.172.250.106:51647: acme/autocert: missing certificate
    2021/12/23 17:18:40 http: TLS handshake error from 59.172.250.106:51650: acme/autocert: missing certificate
    2021/12/23 17:18:40 http: TLS handshake error from 59.172.250.106:51651: acme/autocert: missing certificate
    2021/12/23 17:18:40 http: TLS handshake error from 59.172.250.106:51652: acme/autocert: missing certificate
    2021/12/23 17:18:40 http: TLS handshake error from 59.172.250.106:51653: acme/autocert: missing certificate
    2021/12/23 17:18:40 http: TLS handshake error from 59.172.250.106:51654: acme/autocert: missing certificate
    2021/12/23 17:18:40 http: TLS handshake error from 59.172.250.106:51655: acme/autocert: missing certificate
    2021/12/23 17:18:41 http: TLS handshake error from 59.172.250.106:51656: acme/autocert: missing certificate
    2021/12/23 17:18:41 http: TLS handshake error from 59.172.250.106:51657: acme/autocert: missing certificate
    2021/12/23 17:18:41 http: TLS handshake error from 59.172.250.106:51658: acme/autocert: missing certificate
    2021/12/23 17:18:41 http: TLS handshake error from 59.172.250.106:51659: acme/autocert: missing certificate
    2021/12/23 17:18:41 http: TLS handshake error from 59.172.250.106:51660: acme/autocert: missing certificate
    2021/12/23 17:18:41 http: TLS handshake error from 59.172.250.106:51661: acme/autocert: missing certificate
    启动成功访问https域名报错

    1. 芒果

      提示证书丢失了,你是用的默认443端口启动的吗

  15. qctt
    qctt 回复

    Windows 10Firefox 93.0

    我那方法中转节点能用,但是ping不了nat中的机器,不知道要怎么调

    1. 芒果

      ping不了nat中的机器?意思是指两个客户端连上你的服务器中继节点后,两个客户端之间互相ping不通吗?

  16. qctt
    qctt 回复

    Windows 10Firefox 93.0

    我今天折腾tx的gz中转弄好了,不需要证书,不需要443
    acl那边不需要指定端口,官方知道端口
    我用的docker方案,但是转发感觉还不行,不之道怎么优化
    命令参考
    docker run --sysctl net.ipv4.ip_forward=1 --restart unless-stopped --name derper -p 8866:8866 -p 3478:3478/udp -d -t chestnutprog/derper -hostname 123.com -stun -a 0.0.0.0:8866

    1. 芒果

      你这个方案在禁用官方节点后还能正常使用吗?

      1. qctt
        qctt 回复

        Windows 10Firefox 93.0

        测试结果,我的方案是无效的,任何节点无法ping通,应该是证书这块的问题

      2. qctt
        qctt 回复

        Windows 10Firefox 93.0

        未测试

        1. 芒果

          那我还是不太明白你说的ping不通具体是指什么意思,我的理解是自建中继就是为了防止两个客户端无法p2p打洞成功而做转发的。建议你禁用掉官方节点,只采用自己的节点测试两个客户端是否正常联通。

  17. qctt
    qctt 回复

    Windows 10Firefox 93.0

    有搞定非443端口吗
    我用docker也不行

    1. 芒果

      非443端口部署方法更新
      https://mangoroom.cn/tools/tailscale-custom-derper-servers-custom-derpport-base-docker.html

    2. 芒果

      暂时没有,具多位网友反馈也是不行。倒是v站的一个大佬貌似使用境外的服务器是支持非433端口,个人猜测要么是目前的derper程序已经更新不支持,要么是境内服务器的原因。若想使用非433端口唯一的尝试可以试试找v站的sekai大佬要一份他的derper部署代码,如果也不行那就是境内服务器的原因了。v站讨论链接https://www.v2ex.com/t/791876

      1. imdgg
        imdgg 回复

        Mac OS X 10_15_7Chrome 96.0.4664.55

        derper -a :10443 --stun
        Nodes里面Hostname可以用ip
        添加一个参数:
        "DERPPort": 10443

        1. 芒果

          我测试该方法还是不行,现象是后台设备面板都显示客户端已经连上,但是只有同一个局域网下的两个客户端之间可以ping通,不在一个网络下就ping不通了。我的derper启动服务器是加了-c derper.conf参数的,不加无法启动

          1. 芒果

            我也是iphone,测试可以的呀

          2. 行河
            行河 回复

            LinuxChrome 96.0.4664.93

            感谢大佬,已用上你分享的中继,但是为何ios手机4G连接时并没有连到你的中继节点?

        2. 芒果

          感谢分享,我后面试试看

          1. 芒果

            我的不添加-c参数无法启动derper程序

          2. imdgg
            imdgg 回复

            Mac OS X 10_15_7Chrome 96.0.4664.55

            我不加-c derper.conf没问题啊。
            直接运行derper -a :10443 --stun 3478
            就可以了

      2. imdgg
        imdgg 回复

        Mac OS X 10_15_7Chrome 96.0.4664.55

        可以使用非443端口
        不需要ssl证书

        晚点我找下资料。住院了一段时间,都忘记了。。。

        1. 芒果

          希望到时候分享一下,老兄保重身体

  18. 0.0
    0.0 回复

    Windows 10Chrome 95.0.4638.69

    折腾半天,指定端口怎么搞都不行,好气哦
    又没有北岸米,只能白票博主的 icon_biggrin.gif

    1. 芒果

      备案是有点麻烦,小水管,别滥用就好

  19. imdgg
    imdgg 回复

    Mac OS X 10_15_7Chrome 94.0.4606.61

    请问derp.conf文件在哪里?没找到啊

    1. 芒果

      在用户目录下,看看home或者root,假如你是root用户那应该就在root目录下面

      1. imdgg
        imdgg 回复

        Mac OS X 10_15_7Chrome 94.0.4606.61

        no config path specified; using /var/lib/derper/derper.key
        只有这个文件,没有找到derper.conf这个文件

        好奇怪

        1. 芒果

          不是derper.key,正常情况就在root或者用户目录,你可以查看$HOME变量是什么

          1. imdgg
            imdgg 回复

            Mac OS X 10Firefox 93.0

            跟derper.key内容是一样的

          2. 芒果

            derper文件里面是一个私钥,估计和域名绑定的,你可能用不了我的,不过你可以尝试看看。下载:https://mangoroom.lanzoui.com/i3hzevw8zhi 密码:7q05

          3. imdgg
            imdgg 回复

            Mac OS X 10_15_7Chrome 94.0.4606.61

            golang是最新的1.17.2
            腾讯云我已经安装了好几遍。
            icon_arrow.gif
            博主是否可以把derper.conf文件分享一下?
            谢谢。
            derper运行也正常,就是没这个文件。真的是奇了怪了

          4. 芒果

            有没有可能是derper安装并未成功?golang版本尽量新一点,1.16以上。

          5. 芒果

            我的就是腾讯云,ssh远程登录后,找了一下就在用户目录
            [root@VM-8-10-centos ~]# find derper.conf
            derper.conf
            [root@VM-8-10-centos ~]#

          6. imdgg
            imdgg 回复

            Mac OS X 10_15_7Chrome 94.0.4606.61

            重装系统试了,还是没有。真奇怪了。。。 icon_cry.gif

          7. 芒果

            我也是腾讯的轻量云,centos或者ubuntu都是正常的。你要不重新安装一下试试看

          8. imdgg
            imdgg 回复

            Mac OS X 10_15_7Chrome 94.0.4606.61

            root@qqcloud:~# echo $HOME
            /root
            root@qqcloud:~# find / -name derper.conf
            root@qqcloud:~#

            没有这个文件。。。
            就觉得好奇怪。还是腾讯轻量云系统的问题?

  20. 马内
    马内 回复

    Windows 7Chrome 91.0.4472.124

    网站每日ip 1千,交换友链,https://money1.us/521

    1. 芒果

      看我友链格式,在自己网站添加完我网站友链告知我就行

      1. 马内
        马内 回复

        Windows 7Chrome 91.0.4472.164

        https://money1.us/502,内页友链
        关键词:话费充值优惠
        描述:充话费优惠
        链接:https://money1.us/489

        1. 芒果
          1. 芒果
          2. 马内
            马内 回复

            Windows 7Chrome 91.0.4472.164

            链接是https://money1.us/489,不是https://money1.us/