tailscale 安装了 derp 服务,是 docker 安装的 derp,然后我想做 DERP_VERIFY_CLIENTS 获取不到状态怎么办 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wuhao
V2EX    宽带症候群

tailscale 安装了 derp 服务,是 docker 安装的 derp,然后我想做 DERP_VERIFY_CLIENTS 获取不到状态怎么办

  •  
  •   wuhao 2024-04-11 00:18:38 +08:00 2924 次点击
    这是一个创建于 548 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一台服务器安装了 docker ,docker 安装了 derp 服务
    然后为了防止 derp 被人扫去白嫖导致网络不稳定
    想开启 DERP_VERIFY_CLIENT = true
    开启这个的前提是要服务器安装 tailscale ,然后登陆。
    但是我的服务器安装 tailscale 之后,derp 获取不到 tailscale 的状态,我怀疑是因为 derp 是 docker 安装的,是两个系统隔离的,所以获取不到,找了一堆教程,这个地方都没怎么说

    有没有大神知道怎么解决吗?最好还是 derp 用 docker 安装。。。
    14 条回复    2024-06-18 01:01:54 +08:00
    wuhao
        1
    wuhao  
    OP
       2024-04-11 00:21:27 +08:00
    确实,Docker 容器与宿主机之间是隔离的,这意味着容器内部无法直接访问宿主机上安装的服务或获取其状态。对于你提到的 DERP_VERIFY_CLIENTS=true 需要 tailscale 服务支持,并且需要在登陆状态下使用,这就需要容器能够与宿主机上的 tailscale 服务通信。

    下面是一些可能的解决方案:

    使用 --network=host 参数:
    将容器的网络设置为宿主机的网络。这样容器会直接使用宿主机的网络栈,从而可以访问宿主机上的服务。但请注意,这样做会失去 Docker 提供的网络隔离性。

    bash
    docker run --network=host ...
    设置端口转发:
    如果 tailscale 服务在宿主机上监听某个端口,你可以将这个端口转发到容器内。这样容器就可以通过这个端口与 tailscale 通信。

    bash
    docker run -p <宿主机端口>:<容器端口> ...
    然后在容器内配置相应的地址和端口以连接 tailscale 服务。

    使用 Docker Compose:
    如果你使用 Docker Compose 来管理你的服务,你可以通过配置 extra_hosts 和网络选项来实现与宿主机的通信。

    yaml
    version: '3'
    services:
    derp:
    image: your-derp-image
    environment:
    - DERP_VERIFY_CLIENTS=true
    extra_hosts:
    - "tailscale-host:<宿主机 IP>"
    networks:
    - your-custom-network

    networks:
    your-custom-network:
    driver: bridge
    确保 <宿主机 IP> 是正确的,然后你可以在容器内部使用 tailscale-host 这个主机名来访问宿主机上的 tailscale 服务。

    使用 Unix Socket:
    如果 tailscale 提供了 Unix Socket 接口,并且你可以将这个 Socket 映射到容器内,那么容器可以通过这个 Socket 与 tailscale 通信。但请注意,Docker 官方文档中提到对 Unix Socket 的映射有一些限制和注意事项。

    bash
    docker run -v /path/to/tailscale.sock:/path/in/container/tailscale.sock ...
    然后配置你的 derp 服务来使用容器内的这个 Socket 文件。

    检查文档和社区:
    查看 derp 和 tailscale 的官方文档,看看是否有关于在 Docker 容器中使用的特定指南或建议。同时,也可以搜索相关的社区讨论或问题,看看其他用户是如何解决类似问题的。

    考虑不使用 Docker:
    如果以上方法都无法满足你的需求,或者你发现这些方法都太过复杂,你可能需要重新考虑是否使用 Docker 来部署你的 derp 服务。在某些情况下,直接在宿主机上运行服务可能会更简单和直接。

    请注意,任何修改配置或网络设置的操作都需要小心谨慎,以确保不会破坏现有系统的安全性和稳定性。在进行任何更改之前,最好先备份重要的数据和配置。

    文心大模型 3.5 生成
    wuhao
        2
    wuhao  
    OP
       2024-04-11 00:22:04 +08:00
    上面是文心一言回复的。。。不小心发上来不知道咋删除了
    wuhao
        3
    wuhao  
    OP
       2024-04-11 00:26:31 +08:00
    开启 DERP_VERIFY_CLIENTS=true 之后,日志就一直报错,服务也没办法使用了

    2024/04/10 16:25:00 derp: 172.17.0.1:45904: client 6e6f64656b65793a66316637383761626232613634333437326663653531316632353638653562393738346263353233666333353163306430653266306331366433646633383661 rejected: failed to query local tailscaled status: Failed to connect to local Tailscale daemon for /localapi/v0/status; not running? Error: dial unix /var/run/tailscale/tailscaled.sock: connect: no such file or directory
    2024/04/10 16:25:00 derp: 172.17.0.1:45906: client 6e6f64656b65793a66316637383761626232613634333437326663653531316632353638653562393738346263353233666333353163306430653266306331366433646633383661 rejected: failed to query local tailscaled status: Failed to connect to local Tailscale daemon for /localapi/v0/status; not running? Error: dial unix /var/run/tailscale/tailscaled.sock: connect: no such file or directory
    fortitudeZDY
        4
    fortitudeZDY  
       2024-04-11 09:23:23 +08:00 via iPhone
    如果没记错的话,Derp 如果开启 verify ,是和本地的 tailscaled 基于 unix domain socket 通信的,你的日志里也提示了,所以如果你的 ts 不在一个容器就不行了,如果非要这样,可以考虑用 socat 连接下(我猜的)
    wuhao
        5
    wuhao  
    OP
       2024-04-11 09:30:17 +08:00
    @fortitudeZDY 你说的本地说在 docker 的 derp 容器里安装吗,derp 的 docker 很简陋装不进去啊
    xubiaosunny
        6
    xubiaosunny  
       2024-04-11 11:06:24 +08:00
    映射 tailscale sock 文件就行。docker run 加上这条参数-v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock 。

    参考下: https://xubiaosunny.top/post/tailscale_deploy_and_custom_derp_servers_mzl3.html
    fortitudeZDY
        7
    fortitudeZDY  
       2024-04-11 11:25:33 +08:00 via iPhone   1
    @wuhao 试试楼下等映射,如果你 ts 在另外一个 docker ,你把那个 docker 的 run 目录映射到宿主机
    lany
        8
    lany  
       2024-04-11 11:46:32 +08:00
    分享一下我的配置
    version: '3.8'
    services:
    derp:
    image: fredliang/derper
    container_name: derp
    volumes:
    - /var/run/tailscaled.sock:/var/run/tailscaled.sock #把宿主机的 tailscaled.sock 文件映射到 docker 才能借宿主机的 tailscaled DERP_VERIFY_CLIENTS 功能来防止白嫖验证
    - /opt/derper/certs:/app/certs #改证书所处目录
    environment:
    - DERP_CERT_MODE=manual
    - DERP_ADDR=:443
    - DERP_DOMAIN=derp.v2ex.com
    - DERP_VERIFY_CLIENTS=true #开启 tailscaled 客户端白嫖认证
    ports:
    - 3443:443
    - 3478:3478/udp
    restart: always
    lany
        9
    lany  
       2024-04-11 11:50:45 +08:00
    补充一下 tailscale 的配置
    version: '3.8'
    services:
    tailscale:
    image: tailscale/tailscale
    container_name: tailscale
    volumes:
    - /opt/tailscale/lib:/var/lib
    - /dev/net/tun:/dev/net/tun
    - /var/run/tailscaled.sock:/var/run/tailscaled.sock#把宿主机的 tailscaled.sock 文件映射到 docker ,连通 tailscaled 的 sock 文件
    environment:
    - TS_AUTHKEY=tskey-auth-XXXXXXXXXXXXXXXXXXXXXXXXXX
    - TS_STATE_DIR=/var/lib/tailscale #如果不配置下次重启 docker 就会重新生成节点,原来的 IP 就不能用了
    - TS_SOCKET=/var/run/tailscale/tailscaled.sock
    - TS_USERSPACE=0 #关闭用户空间网络模式,如果不关闭则需要使用 SOCKS5 或 HTTP 代理,现象为传入连接可以工作,但传出连接不行。见 https://hub.docker.com/r/tailscale/tailscale 描述
    # - TS_ROUTES=局域网网段
    # - 'TS_EXTRA_ARGS=--accept-routes --advertise-exit-node --reset'
    cap_add:
    - NET_ADMIN
    - NET_RAW
    restart: always
    network_mode: host
    wuhao
        10
    wuhao  
    OP
       2024-04-11 15:25:04 +08:00
    @fortitudeZDY 如果一个是主机,一个是主机下面的 docker ,怎么映射呢
    wuhao
        11
    wuhao  
    OP
       2024-04-11 15:33:26 +08:00
    @fortitudeZDY
    服务器目录 /var/run/tailscale 挂在到 docker 的容器目录 /var/run/tailscale ,问题解决。感谢感谢
    wuhao
        12
    wuhao  
    OP
       2024-04-11 15:34:39 +08:00
    @xubiaosunny 谢谢,用挂载目录的方式解决啦
    @lany 谢谢大神,我用的 bt 宝塔面板的 docker ,一直没找到启动代码在哪里添加的。。
    zhupite2
        13
    zhupite2  
       2024-06-17 16:31:16 +08:00
    破防了
    在 CentOS 7 上使用 yum 安装了 tailscale ,使用 docker 安装了 ip_derper ,只要开启 DERP_VERIFY_CLIENTS=true ,就会出现以下错误日志:
    ip_derper | 2024/06/17 08:20:20 derp: 2.120.134.171:31015: client 6e6f64656b65793a37623030616235343963616436326637623934653231316236613537306236356330373063303634626230386533323462353635336130621239323639633 rejected: failed to query local tailscaled status for nodekey:7b00ab569cad62f7b94e211b6a570b65c070c064bb08e324b5653a0b29663c4c: 400 Bad Request: invalid 'addr' parameter
    ip_derper | 2024/06/17 08:20:21 derp: 2.120.134.171:31028: client 6e6f64656b65793a37623030616235343963616436326637623934653231316236613537306236356330373063303634626230386533323462353635336130621239323639633 rejected: failed to query local tailscaled status for nodekey:7b00ab569cad62f7b94e211b6a570b65c070c064bb08e324b5653a0b29663c4c: 400 Bad Request: invalid 'addr' parameter


    docker-compose.yml:

    version: '3.8'

    services:
    ip_derper:
    image: yangchuansheng/ip_derper
    container_name: ip_derper
    restart: unless-stopped
    environment:
    - DERP_HTTP_PORT=80
    - DERP_ADDR=:12345
    - DERP_VERIFY_CLIENTS=true
    ports:
    - 12345:12345
    - 3478:3478/udp
    volumes:
    - /var/run/tailscale:/var/run/tailscale
    zhupite2
        14
    zhupite2  
       2024-06-18 01:01:54 +08:00   1
    对于我遇到的这个 invalid 'addr' parameter 问题,应该是当前发布的 tailscale 并不支持验证 `nodekey:xxx` 这种形式的客户端地址(具体可以在 tailscale 仓库中搜索一下,这里不细说),但就几天前,有一个 PR 支持了这种地址。
    目前,我 clone 仓库并自己编译 cmd/tailscale 和 cmd/tailscaled ,测试可行
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     880 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude div class="sep20">
    VERSION: 3.9.8.5 25ms UTC 21:16 PVG 05:16 LAX 14:16 JFK 17:16
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86