自建Tailscale的derp中继服务

在内网docker搭建tailscale后,由于需要链接官方公共的derp中继服务器,但是不包含大陆地区,会导致服务不稳定和延迟高。于是决定用手里的几台vps搭建只供自己使用的derp服务器。derp服务器部署有两种方式,一种使用域名,另外一种使用ip。本文使用的是IP方式。

 Docker compose配置

编辑dokcer-compose.yml文件,内容如下

services:
  derper:
    image: ghcr.io/yangchuansheng/ip_derper
    container_name: derper
    restart: always
    ports:
      - "3478:3478/udp"
      - "33380:33380"
    environment:
      - DERP_ADDR=:33380
      - DERP_VERIFY_CLIENTS=false  #域名验证,这里是ip形式
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock

docker运行后,浏览器输入https://ip:33380,如果出现以下页面,搭建成功。

 修改Access Controls

登陆tailscale,找到Access Controls,在“acls”:[ ]下面增加以下内容

    "derpMap": {
        "OmitDefaultRegions": true,
        // OmitDefaultRegions 忽略官方的中继节点
        "Regions": {
            // 这里的数字可选900-999
            "900": {
                "RegionID":   900,
                "RegionCode": "hkg",
                "RegionName": "vir-hk",
                "Nodes": [
                    {
                        "Name":             "1",
                        "RegionID":         900,
                        "IPv4":             "49.207.280.248",
                        "IPv6":             "2400:e300:faf::1f62",
                        "DERPPort":         33380,
                        "InsecureForTests": true,
                    },
                ],
            },
            "901": {
                "RegionID":   901,
                "RegionCode": "sin",
                "RegionName": "bt-sg",
                "Nodes": [
                    {
                        "Name":             "2",
                        "RegionID":         901,
                        "IPv6":             "2a89:bec0:16e:2ad::",
                        "DERPPort":         33380,
                        "InsecureForTests": true,
                    },
                ],
            },
        },
    },

RegionCode一般为三字机场代码,比如hkg,sin,tyo,lax等。

RegionName一般为地区名称,比如dmit-hk,bwg-hk,v.ps-sg等,自己随意。

假如一个地区有多台服务器,则可以参考以下配置

            "900": {
                "RegionID":   900,
                "RegionCode": "hkg",
                "RegionName": "vir-hk",
                "Nodes": [
                    {
                        "Name":             "1",
                        "RegionID":         900,
                        "IPv4":             "49.207.280.248",
                        "IPv6":             "2400:e300:faf::1f62",
                        "DERPPort":         33380,
                        "InsecureForTests": true,
                    },
                    {
                        "Name":             "1a",
                        "RegionID":         900,
                        "IPv4":             "1.1.1.1",
                        "IPv6":             "2400:e300:faf::1f62:ff",
                        "DERPPort":         33380,
                        "InsecureForTests": true,
                    },
                    {
                        "Name":             "1b",
                        "RegionID":         900,
                        "IPv4":             "2.2.2.2",
                        "IPv6":             "2400:e300:faf::1f62:dab",
                        "DERPPort":         33380,
                        "InsecureForTests": true,
                    },
                ],
            },

验证

进入容器内部,使用tailscale debug derp-map查看derp的服务器地图,下面显示的是自己搭建的derp服务器,官方的因为忽略了,没有显示。如果希望显示官方的可以把OmitDefaultRegions设为false。

/ # tailscale debug derp-map
{
        "Regions": {
                "900": {
                        "RegionID": 900,
                        "RegionCode": "hkg",
                        "RegionName": "vir-hk",
                        "Nodes": [
                                {
                                        "Name": "1",
                                        "RegionID": 900,
                                        "HostName": "",
                                        "IPv4": "49.207.280.248",
                                        "IPv6": "2400:e300:faf::1f62",
                                        "DERPPort": 33380,
                                        "InsecureForTests": true
                                }
                        ]
                },
                "901": {
                        "RegionID": 901,
                        "RegionCode": "sin",
                        "RegionName": "bt-sg",
                        "Nodes": [
                                {
                                        "Name": "2",
                                        "RegionID": 901,
                                        "HostName": "",
                                        "IPv6": "2a89:bec0:16e:2ad::",
                                        "DERPPort": 33380,
                                        "InsecureForTests": true
                                }
                        ]
                }
        }
}

使用tailscale status可以查看在线的设备,并且ios的客户端的状态是活跃的,使用的derp中继服务器是RegionCode为hk的节点。一般会选择延迟最低的节点。

/ # tailscale status
100.113.77.75   tailscale            lechanuh@  linux   -
100.114.86.28   iphone-11            lechanuh@  iOS     active; relay "hkg", tx 2268 rx 1236

使用tailscale netcheck可以查看derp服务器的延迟情况。如果地区代码hkg中配置多个服务器,也只会选择展示一个延迟低的。

/ # tailscale netcheck

Report:
        * UDP: true
        * IPv4: yes, 172.21.0.1:56665
        * IPv6: no, but OS has support
        * MappingVariesByDestIP: true
        * PortMapping: 
        * Nearest DERP: vir-hk
        * DERP latency:
                -  hkg: 67ms    (vir-hk)
                -  sin: 88.6ms  (bt-sg)

 后记

上文的sg节点使用的是纯ipv6地址,如果希望通过tailscale netcheck检测到延迟,在docker-compose.yml文件中必须指定网络模式为主机模式network_mode: host,还有一种方式指定网络模式为桥接network_mode: bridge,但是必须配置docker 守护程序使用ipv6nat的形式共享宿主机的ipv6。文章参考

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇