V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikaelson
V2EX  ›  程序员

求问自建 derp 节点的问题

  •  
  •   mikaelson · 302 天前 · 3376 次点击
    这是一个创建于 302 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://icloudnative.io/posts/custom-derp-servers/#%E8%87%AA%E5%BB%BA%E7%A7%81%E6%9C%89-derp-server
    按这个教程自己搭建了 derp 纯 IP 节点
    直接在公网服务器上弄了 docker 搭建的


    我看教程应该也就到这一步就结束了?剩下的就是客户端用 tailscale 去连接?
    可是为啥我 tailscale netcheck 搜不到自己的节点呢

    端口都打开了。

    docker logs -f derper
    Generating a RSA private key
    .............................+++++
    ..+++++
    writing new private key to '/app/certs/127.0.0.1.key'
    -----
    2023/06/30 02:11:01 no config path specified; using /var/lib/derper/derper.key
    2023/06/30 02:11:01 derper: serving on :12345 with TLS
    2023/06/30 02:11:01 running STUN server on [::]:3478
    55 条回复    2023-08-23 10:04:57 +08:00
    begitcn
        1
    begitcn  
       302 天前
    控制台 Access Controls 配置文件修改了吗?
    mikaelson
        2
    mikaelson  
    OP
       302 天前
    @begitcn 挖槽,我怎么没看到有提到 access controls 这个东西? google 了一堆教程,全是抄来抄去的。。。都一样的文章
    begitcn
        3
    begitcn  
       302 天前
    用官方的 需要在控制台中 access controls 修改 derp 服务器配置 应该是添加 derpMap 的一些东西 自行搜索下吧
    mikaelson
        4
    mikaelson  
    OP
       302 天前
    @begitcn 我是自建 derp 节点,没用官方的
    Goalonez
        5
    Goalonez  
       302 天前
    http: //<server_Address>: 8080/windows
    http: //<server_Address>: 8080/apple
    好像会有类似这样的地址打开,然后根据里面的命令,把你的客户端注册到节点去
    erhandsome
        6
    erhandsome  
       302 天前
    这些教程都 N 久之前的,直接看官方的自建文档,快速简单
    ysicing
        7
    ysicing  
       302 天前
    nexply1920
        8
    nexply1920  
       302 天前
    @mikaelson #4 你只是自检 derp 节点噻,难道你的管理端也是用 Headscale 自建的?管理端用的官方的就要去官方 access controls 添加策略的。
    类似这种:
    {
    // ... other parts of ACL
    "derpMap": {
    "OmitDefaultRegions": true,
    "Regions": {
    "900": {
    "RegionID": 900,
    "RegionCode": "myderp",
    "Nodes": [
    {
    "Name": "1",
    "RegionID": 900,
    "HostName": "your-hostname.com"
    }
    ]
    }
    }
    }
    }
    mikaelson
        9
    mikaelson  
    OP
       302 天前
    @nexply1920 不是都在推荐什么 tailscale+headscale 吗。。。我有点懵逼了
    mikaelson
        10
    mikaelson  
    OP
       302 天前
    @erhandsome 才发现官方支持自建了,那就没必要再用 headscale 了?还是说,这种用法有另一种意义?
    ZedRover
        11
    ZedRover  
       302 天前
    前两天用这个 https://github.com/yangchuansheng/docker-image/blob/master/derper/Dockerfile 在腾讯云部署的,教程参考的也是这个博主的,上海延迟 20ms 。没遇到自建中转节点不能打洞的问题,docker 容器连续运行也没有什么报错的问题。服务器懒得备案直接开的 10000+的端口也没遇到问题。
    mikaelson
        12
    mikaelson  
    OP
       302 天前
    @ZedRover 现在看的就是他的。。感觉好乱。。。
    LykorisR
        13
    LykorisR  
       302 天前
    @mikaelson 自建的意义在于控制器也用自己的,这样相当于完全自建,如果你只想自建中续那只需要把 berp 放到控制器中,但是要注意 derp 是没有验证的,任何人知道 IP 都能访问
    EVJohn
        14
    EVJohn  
       302 天前
    你说的是 tailscale 的客户端+headscale 的服务端,还是 tailscale 服务端+自建 drep+tailscale 客户端
    mikaelson
        15
    mikaelson  
    OP
       302 天前
    @EVJohn 前者。tailscale 客户端+headscale 服务端、一顿瞎折腾,终于可以了,node 也添加成功了,想问一下,这个怎么自定义每台服务器的 IP ?我现在看是自动获取的
    mikaelson
        16
    mikaelson  
    OP
       302 天前
    @EVJohn tailscale 的客户端+headscale 的服务端,还是 tailscale 服务端+自建 drep+tailscale 客户端
    另外,这 2 个有什么区别吗?
    whcoding
        17
    whcoding  
       302 天前
    我也在搞这个 drep 还没搞好, op 有推荐的教程么
    mikaelson
        18
    mikaelson  
    OP
       302 天前
    @LykorisR 我现在是 tailscale+headscale ,然后我看说 DERP_VERIFY_CLIENTS=true 就可以防止白嫖了?
    mikaelson
        19
    mikaelson  
    OP
       302 天前
    @whcoding 我就靠着那篇残缺的教程,现在暂时搞出来了
    Actrace
        20
    Actrace  
       302 天前
    楼主参考下这篇?
    https://www.v2ex.com/t/916123
    frankli0324
        21
    frankli0324  
       302 天前
    @mikaelson tailscale 控制面是整个网络的信任锚点,控制面负责 authenticate 各个节点(你的电脑、服务器等都是节点),headscale 就是将这个信任锚点掌握在你自己手里。
    不过 tailscale 后来支持了使用已 authenticate 的 node 作为新的信任锚点,可以谷歌一下
    mikaelson
        23
    mikaelson  
    OP
       302 天前
    @frankli0324 所以现在也没必要用 headscale 了?可以 tailscale 一整套?
    frankli0324
        24
    frankli0324  
       302 天前
    控制面 authenticate 一个 node 的时候会把这个 node 的公钥分发给所有节点,所有节点以后就都信任这个公钥了,类比你在.ssh/authorized_keys 里加上你的 ssh pubkey 。这样的话假如 tailscale 偷偷给这个公钥列表里加上一个恶意 node 的公钥,你的内网 infrastructure 就暴露给这个恶意 node 了,如果你还配置了诸如 tailscale ssh 的东西那就影响面更大了
    frankli0324
        25
    frankli0324  
       302 天前
    @mikaelson 其实。。也可以,不过如果想彻底杜绝外网流量也可以用 headscale ,毕竟节点需要和控制面通信
    ZedRover
        26
    ZedRover  
       302 天前
    @mikaelson #18 开启 verify_clients 之后就行了,需要服务器上有 tailscale 并且登录自己的账号,这样别人就算能 在 acl 里加你的节点也没法用
    mikaelson
        27
    mikaelson  
    OP
       302 天前
    @ZedRover 服务器上有 tailscale 并且登录自己的账号 这是什么意思?还得去注册官网的 tailscale 嘛?我现在拿来做 server 的服务器上装了 headscale+自建 docker 的 derp+tailscale 客户端。现在已经联通了几个节点了。不过好麻烦。。。我都是去各个 client 装 tailscale 然后 tailscale up xxxx 什么的,生成一串后,去浏览器拿到链接,再回来 server 端添加 node 。
    mikaelson
        28
    mikaelson  
    OP
       302 天前
    @frankli0324 我现在把 server 和 client 都部署了 tailscale ,打算把一些业务转发到 server 上,然后映射 ip+端口出去访问。比如 ssh ,sftp 之类的。。。也没法给所有使用者都加 tailscale
    root01
        29
    root01  
       302 天前
    @mikaelson 来份教程
    mikaelson
        30
    mikaelson  
    OP
       302 天前
    @ZedRover 有一个很奇葩的问题。我各个节点互 ping 都在 30ms 以内。
    client1 的 ip 是 10.86.0.1
    公网 server 是 10.86.2.1

    我用 firewall-cmd --add-forward-port=port=2244:proto=tcp:toaddr=10.86.0.1:toport=22 --permanent
    映射到公网的 2244
    我用公网的 ip+2244 访问成功,尝试着用 sftp 传文件,直接龟速(公网买的是 16 核 32G 20M 宽带的)只有 300k ,而且期间 ping 的延迟会变成几百。。。这是为啥。。。
    mikaelson
        31
    mikaelson  
    OP
       302 天前
    @root01 千篇一律的,有用了也就一两分吧
    GGC4
        32
    GGC4  
       302 天前
    我那会儿也是绕进去了。如果你的要求和我一样简单,是不需要 headscale 的,只需要按照正常的 tailscale 流程使用,然后在 tailscale 官网的 access control 里写好:
    "derpMap": {
    "Regions": {"900": {
    "RegionID": 900,
    "RegionCode": "cn",
    "Nodes": [{
    "Name": "1",
    "RegionID": 900,
    "HostName": "x.x.x.x",
    "IPv4": "x.x.x.x",
    "DERPPort": 38800,
    "InsecureForTests": true,
    }],
    }},
    },
    服务器防火墙端口记得开,就可以了
    mikaelson
        33
    mikaelson  
    OP
       302 天前
    @GGC4 我因为有自己的公网服务器,所以想用自己搭建 derp 。我现在也成了。问题是,节点之间的延迟很一般,但是只要走公网转发后,直接就没速度了
    frankli0324
        34
    frankli0324  
       302 天前
    @mikaelson @ZedRover 要搞清楚各个部分解决的是两个不同的问题
    headscale 解决的是控制面通信问题,适用于无法与 tailscale 控制面通信的环境(当然最开始也是解决 tailscale 控制面可信问题),tailscale lock 解决的是 tailscale 控制面是否可信的问题,而 verify client 解决的是 derper 不允许其他用户通过你的 derper 握手和转发流量。derper 只是一个握手的协商者和*加密后*流量的转发者,并不涉及网络的可信问题,别人用你的 derper 顶多耗费你的流量。verify client 的行为是在协商前校验协商的二者的身份。
    我觉得还是执行一个 step 之前先搞明白这个 step 的目的是什么吧(
    frankli0324
        35
    frankli0324  
       302 天前
    * 校验协商的双方都和自己本机在同一个 tailnet 中
    mikaelson
        36
    mikaelson  
    OP
       302 天前
    @frankli0324 谢谢您的热情回复。我去再了解一下。
    有一个很奇葩的问题。我现在各个节点互 ping 都在 30ms 以内。
    client1 的 ip 是 10.86.0.1
    公网 server 是 10.86.2.1

    我用 firewall-cmd --add-forward-port=port=2244:proto=tcp:toaddr=10.86.0.1:toport=22 --permanent
    映射到公网的 2244
    我用公网的 ip+2244 访问成功,尝试着用 sftp 传文件,直接龟速,甚至 ssh 连线直接断开(公网买的是 16 核 32G 20M 宽带的)只有 300k ,而且期间 ping 的延迟会变成几百。。。这是为啥。。。
    包括之前用 tinc 也是这样,这也是我突然转移方案的原因,没想到不是 tinc 的问题。换一个方案,在用 add-forward-port 还是这样的情况
    frankli0324
        37
    frankli0324  
       302 天前
    @mikaelson 300k/s 的问题听起来像是 SSH Protocol 的 overhead ,20M 的小水管本身也不快
    mikaelson
        38
    mikaelson  
    OP
       302 天前
    @frankli0324 每秒能有 2M 还行了呀,用来转发一些服务不做大数据传输,我之前才 4M 的,这次换到 20M 了,从阿里迁移到腾讯,结果搞成这副模样,死活找不到原因。哎。
    以前每次新加节点,也就是加入 tinc ,然后去云服务器转发端口,也没做其他的。。。
    SoFarSoGood
        39
    SoFarSoGood  
       302 天前
    @mikaelson tailscale 也是基于 wireguard 创建链接的,算不出正确的 mtu ,速度肯定慢。
    blankmiss
        40
    blankmiss  
       302 天前
    只要知道 ip 换个端口 就能用你的 derp server 还是上个域名 开启客户端验证吧
    blankmiss
        41
    blankmiss  
       302 天前
    @blankmiss 只要知道 ip 和 端口
    GGC4
        42
    GGC4  
       302 天前
    速度问题临时另开一个 frp 对比看看
    mikaelson
        43
    mikaelson  
    OP
       302 天前
    @SoFarSoGood 好难过,之前 tinc 都好好的,也都没去算过 mtu 什么的,不懂为什么在也不行了
    mikaelson
        44
    mikaelson  
    OP
       302 天前
    @frankli0324 frp 没问题,所以看过去,像是 firewall-cmd add-forward-port 转发的问题??
    mikaelson
        45
    mikaelson  
    OP
       302 天前
    @GGC4 frp 没问题,所以看过去,像是 firewall-cmd add-forward-port 转发的问题??
    LykorisR
        46
    LykorisR  
       302 天前
    @mikaelson 这就是最烦人的地方了,它只支持和 headscale 放在一台机器上,然后直接访问 socket 文件来进行验证
    mikaelson
        47
    mikaelson  
    OP
       302 天前
    @LykorisR 我现在碰到一个奇怪的问题,节点都没问题,但是转发后,直接性能 gg

    我用 firewall-cmd --add-forward-port=port=2244:proto=tcp:toaddr=10.86.0.1:toport=22 --permanent
    映射到公网的 2244
    我用公网的 ip+2244 访问成功,尝试着用 sftp 传文件,直接龟速,甚至 ssh 连线直接断开(公网买的是 16 核 32G 20M 宽带的)只有 300k ,而且期间 ping 的延迟会变成几百。。。这是为啥。。。
    包括之前用 tinc 也是这样,这也是我突然转移方案的原因,没想到不是 tinc 的问题。换一个方案,在用 add-forward-port 还是这样的情况
    LykorisR
        48
    LykorisR  
       302 天前
    @mikaelson 可能是 DERP 设置的问题,我是用的 headscale 内置的 DERP ,RDP 是很流畅的没有问题
    mikaelson
        49
    mikaelson  
    OP
       302 天前
    @LykorisR 你是用什么转发端口的?
    LykorisR
        50
    LykorisR  
       301 天前
    @mikaelson 我是前面有 openwrt ,然后在群晖上用 docker 跑的 headscale 和 derp ,直接用 openwrt 来转发的端口
    nexply1920
        51
    nexply1920  
       299 天前
    @mikaelson 可以用 tailscale+headscale 也可以用官方的管理端然后自建中转 derper 服务加速
    PowerDi
        52
    PowerDi  
       253 天前
    @mikaelson #30 解决了吗?
    mikaelson
        53
    mikaelson  
    OP
       253 天前
    @PowerDi 没有,你也碰到了?
    PowerDi
        54
    PowerDi  
       253 天前
    @mikaelson #53 是的,也是 ping 不高,但是传东西很卡。HK 小水管
    PowerDi
        55
    PowerDi  
       248 天前
    @frankli0324 #34 大佬,我想请教下,打洞成功率,与 headscale 是否有关?我发现无论用国内外服务器自建的 derp ,都是没办法打洞成功。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1280 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:53 · PVG 07:53 · LAX 16:53 · JFK 19:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.