【Tailscale】docker compose部署基于IP的Derp节点并提供鉴权

Derp节点放在国内可以显著提升连接效果,但没有域名或者不想占用443端口,可以部署基于IP的Derp节点,进一步如果还要阻止滥用,提升Derp安全性,则需要额外使用一个本地tailscale为derper提供鉴权检测。
原理都是清楚的,但是网络上面给出的配置存在各种问题,这里给出一个可用的配置。

docker compose配置文件:

services:
  derper:
    image: ghcr.io/yangchuansheng/ip_derper:latest
    container_name: derper
    restart: always
    volumes:
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
      - ./data/tailscale/tmp:/var/run/tailscale
    ports:
      - "10043:443"
      - "10078:3478/udp"
    environment:
      DERP_VERIFY_CLIENTS: "true" #使用tailscale客户端鉴权
    depends_on:
      - tailscale

  tailscale:
    image: tailscale/tailscale:latest
    container_name: tailscale
    restart: always
    hostname: XXX
    network_mode: host  #注释本行可使VPS主机不可通过tailscale网络访问
    environment:
      TS_STATE_DIR: /var/lib/tailscale
      TS_USERSPACE: false
    volumes:
      - /dev/net/tun:/dev/net/tun
      - ./data/tailscale/state:/var/lib/tailscale
      - ./data/tailscale/tmp:/tmp
    cap_add:
      - net_admin
      - sys_module

tailscale控制台Access controls配置:

    "derpMap": {
        "OmitDefaultRegions": false, // 设置为 true不下发官方derp节点
        "Regions": {
            "900": {
                "RegionID":   900, 
                "RegionCode": "XXX",
                "RegionName": "XXX_Beijing", 
                "Nodes": [
                    {
                        "Name":             "900",
                        "RegionID":         900,
                        "HostName":         "0.0.0.0", // 你的公网IP地址
                        "IPv4":             "0.0.0.0", // 你的公网IP地址
                        "DERPPort":         10043, 
                        "InsecureForTests": true, // 客户端不做校验
                        "STUNPort":         10078,
                    },
                ],
            },
        },
    },

容器启动后使用docker logs tailscale查看tailscale容器的启动日志,找到https://login.tailscale.com/a/xxxxxxxxxxxxxx样式的链接,拷贝粘贴到浏览器完成授权添加节点。
节点添加后可以在控制台disable key expiry并备份docker-compose.yml、 ./data/tailscale/state里面的tailscaled.state和tailscaled.log.conf文件,这样后面迁移起来就方便啦。

24 个赞

感谢大佬的教程

1 个赞

感谢分享,这个很实用

感谢分享收藏了

这是干嘛的?

奥 看到了, 是 VPN 哈

防止白嫖是因为这个吗,别人不知道完整链接

是这个:DERP_VERIFY_CLIENTS: “true”,如果没有这个,他人知道了ip地址就可以使用该derp节点。

感谢大佬 一步成功了