求问自建 derp 节点的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mikaelson
V2EX    程序员

求问自建 derp 节点的问题

  •  
  •   mikaelson 2023-06-30 10:17:07 +08:00 5808 次点击
    这是一个创建于 833 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    56 条回复    2024-09-19 11:55:40 +08:00
    begitcn
        1
    begitcn  
       2023-06-30 11:36:30 +08:00
    控制台 Access Controls 配置文件修改了吗?
    mikaelson
        2
    mikaelson  
    OP
       2023-06-30 11:45:49 +08:00
    @begitcn 挖槽,我怎么没看到有提到 access controls 这个东西? google 了一堆教程,全是抄来抄去的。。。都一样的文章
    begitcn
        3
    begitcn  
       2023-06-30 11:51:00 +08:00
    用官方的 需要在控制台中 access controls 修改 derp 服务器配置 应该是添加 derpMap 的一些东西 自行搜索下吧
    mikaelson
        4
    mikaelson  
    OP
       2023-06-30 11:52:20 +08:00
    @begitcn 我是自建 derp 节点,没用官方的
    Goalonez
        5
    Goalonez  
       2023-06-30 12:15:58 +08:00
    http: //<server_Address>: 8080/windows
    http: //<server_Address>: 8080/apple
    好像会有类似这样的地址打开,然后根据里面的命令,把你的客户端注册到节点去
    calvey
        6
    calvey  
       2023-06-30 12:57:06 08:00
    这些教程都 N 久之前的,直接看官方的自建文档,快速简单
    ysicing
        7
    ysicing  
       2023-06-30 13:20:07 +08:00
    nexply1920
        8
    nexply1920  
       2023-06-30 13:36:59 +08:00
    @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
       2023-06-30 13:54:37 +08:00
    @nexply1920 不是都在推荐什么 tailscale+headscale 吗。。。我有点懵逼了
    mikaelson
        10
    mikaelson  
    OP
       2023-06-30 13:59:36 +08:00
    @erhandsome 才发现官方支持自建了,那就没必要再用 headscale 了?还是说,这种用法有另一种意义?
    ZedRover
        11
    ZedRover  
       2023-06-30 14:09:33 +08:00
    前两天用这个 https://github.com/yangchuansheng/docker-image/blob/master/derper/Dockerfile 在腾讯云部署的,教程参考的也是这个博主的,上海延迟 20ms 。没遇到自建中转节点不能打洞的问题,docker 容器连续运行也没有什么报错的问题。服务器懒得备案直接开的 10000+的端口也没遇到问题。
    mikaelson
        12
    mikaelson  
    OP
       2023-06-30 14:28:26 +08:00
    @ZedRover 现在看的就是他的。。感觉好乱。。。
    LykorisR
        13
    LykorisR  
       2023-06-30 15:11:30 +08:00
    @mikaelson 自建的意义在于控制器也用自己的,这样相当于完全自建,如果你只想自建中续那只需要把 berp 放到控制器中,但是要注意 derp 是没有验证的,任何人知道 IP 都能访问
    EVJohn
        14
    EVJohn  
       2023-06-30 15:11:42 +08:00
    你说的是 tailscale 的客户端+headscale 的服务端,还是 tailscale 服务端+自建 drep+tailscale 客户端
    mikaelson
        15
    mikaelson  
    OP
       2023-06-30 15:17:13 +08:00
    @EVJohn 前者。tailscale 客户端+headscale 服务端、一顿瞎折腾,终于可以了,node 也添加成功了,想问一下,这个怎么自定义每台服务器的 IP ?我现在看是自动获取的
    mikaelson
        16
    mikaelson  
    OP
       2023-06-30 15:17:57 +08:00
    @EVJohn tailscale 的客户端+headscale 的服务端,还是 tailscale 服务端+自建 drep+tailscale 客户端
    另外,这 2 个有什么区别吗?
    whcoding
        17
    whcoding  
       2023-06-30 15:18:38 +08:00
    我也在搞这个 drep 还没搞好, op 有推荐的教程么
    mikaelson
        18
    mikaelson  
    OP
       2023-06-30 15:19:25 +08:00
    @LykorisR 我现在是 tailscale+headscale ,然后我看说 DERP_VERIFY_CLIENTS=true 就可以防止白嫖了?
    mikaelson
        19
    mikaelson  
    OP
       2023-06-30 15:22:16 +08:00
    @whcoding 我就靠着那篇残缺的教程,现在暂时搞出来了
    Actrace
        20
    Actrace  
       2023-06-30 15:22:31 +08:00
    楼主参考下这篇?
    t/916123
    frankli0324
        21
    frankli0324  
       2023-06-30 15:22:40 +08:00
    @mikaelson tailscale 控制面是整个网络的信任锚点,控制面负责 authenticate 各个节点(你的电脑、服务器等都是节点),headscale 就是将这个信任锚点掌握在你自己手里。
    不过 tailscale 后来支持了使用已 authenticate 的 node 作为新的信任锚点,可以谷歌一下
    frankli0324
        22
    frankli0324  
       2023-06-30 15:23:39 +08:00
    mikaelson
        23
    mikaelson  
    OP
       2023-06-30 15:24:09 +08:00
    @frankli0324 所以现在也没必要用 headscale 了?可以 tailscale 一整套?
    frankli0324
        24
    frankli0324  
       2023-06-30 15:26:29 +08:00
    控制面 authenticate 一个 node 的时候会把这个 node 的公钥分发给所有节点,所有节点以后就都信任这个公钥了,类比你在.ssh/authorized_keys 里加上你的 ssh pubkey 。这样的话假如 tailscale 偷偷给这个公钥列表里加上一个恶意 node 的公钥,你的内网 infrastructure 就暴露给这个恶意 node 了,如果你还配置了诸如 tailscale ssh 的东西那就影响面更大了
    frankli0324
        25
    frankli0324  
       2023-06-30 15:27:01 +08:00
    @mikaelson 其实。。也可以,不过如果想彻底杜绝外网流量也可以用 headscale ,毕竟节点需要和控制面通信
    ZedRover
        26
    ZedRover  
       2023-06-30 15:30:06 +08:00
    @mikaelson #18 开启 verify_clients 之后就行了,需要服务器上有 tailscale 并且登录自己的账号,这样别人就算能 在 acl 里加你的节点也没法用
    mikaelson
        27
    mikaelson  
    OP
       2023-06-30 15:37:37 +08:00
    @ZedRover 服务器上有 tailscale 并且登录自己的账号 这是什么意思?还得去注册官网的 tailscale 嘛?我现在拿来做 server 的服务器上装了 headscale+自建 docker 的 derp+tailscale 客户端。现在已经联通了几个节点了。不过好麻烦。。。我都是去各个 client 装 tailscale 然后 tailscale up xxxx 什么的,生成一串后,去浏览器拿到链接,再回来 server 端添加 node 。
    mikaelson
        28
    mikaelson  
    OP
       2023-06-30 15:38:55 +08:00
    @frankli0324 我现在把 server 和 client 都部署了 tailscale ,打算把一些业务转发到 server 上,然后映射 ip+端口出去访问。比如 ssh ,sftp 之类的。。。也没法给所有使用者都加 tailscale
    root01
        29
    root01  
       2023-06-30 15:43:54 +08:00
    @mikaelson 来份教程
    mikaelson
        30
    mikaelson  
    OP
       2023-06-30 15:47:48 +08:00
    @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
       2023-06-30 15:48:13 +08:00
    @root01 千篇一律的,有用了也就一两分吧
    GGC4
        32
    GGC4  
       2023-06-30 15:59:04 +08:00
    我那会儿也是绕进去了。如果你的要求和我一样简单,是不需要 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
       2023-06-30 16:01:51 +08:00
    @GGC4 我因为有自己的公网服务器,所以想用自己搭建 derp 。我现在也成了。问题是,节点之间的延迟很一般,但是只要走公网转发后,直接就没速度了
    frankli0324
        34
    frankli0324  
       2023-06-30 16:18:06 +08:00
    @mikaelson @ZedRover 要搞清楚各个部分解决的是两个不同的问题
    headscale 解决的是控制面通信问题,适用于无法与 tailscale 控制面通信的环境(当然最开始也是解决 tailscale 控制面可信问题),tailscale lock 解决的是 tailscale 控制面是否可信的问题,而 verify client 解决的是 derper 不允许其他用户通过你的 derper 握手和转发流量。derper 只是一个握手的协商者和*加密后*流量的转发者,并不涉及网络的可信问题,别人用你的 derper 顶多耗费你的流量。verify client 的行为是在协商前校验协商的二者的身份。
    我觉得还是执行一个 step 之前先搞明白这个 step 的目的是什么吧(
    frankli0324
        35
    frankli0324  
       2023-06-30 16:19:08 +08:00
    * 校验协商的双方都和自己本机在同一个 tailnet 中
    mikaelson
        36
    mikaelson  
    OP
       2023-06-30 16:25:10 +08:00
    @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  
       2023-06-30 16:25:26 +08:00
    @mikaelson 300k/s 的问题听起来像是 SSH Protocol 的 overhead ,20M 的小水管本身也不快
    mikaelson
        38
    mikaelson  
    OP
       2023-06-30 16:32:55 +08:00
    @frankli0324 每秒能有 2M 还行了呀,用来转发一些服务不做大数据传输,我之前才 4M 的,这次换到 20M 了,从阿里迁移到腾讯,结果搞成这副模样,死活找不到原因。哎。
    以前每次新加节点,也就是加入 tinc ,然后去云服务器转发端口,也没做其他的。。。
    SoFarSoGood
        39
    SoFarSoGood  
       2023-06-30 16:55:40 +08:00
    @mikaelson tailscale 也是基于 wireguard 创建链接的,算不出正确的 mtu ,速度肯定慢。
    blankmiss
        40
    blankmiss  
       2023-06-30 17:03:02 +08:00
    只要知道 ip 换个端口 就能用你的 derp server 还是上个域名 开启客户端验证吧
    blankmiss
        41
    blankmiss  
       2023-06-30 17:03:20 +08:00
    @blankmiss 只要知道 ip 和 端口
    GGC4
        42
    GGC4  
       2023-06-30 17:14:10 +08:00
    速度问题临时另开一个 frp 对比看看
    mikaelson
        43
    mikaelson  
    OP
       2023-06-30 17:32:49 +08:00
    @SoFarSoGood 好难过,之前 tinc 都好好的,也都没去算过 mtu 什么的,不懂为什么在也不行了
    mikaelson
        44
    mikaelson  
    OP
       2023-06-30 17:43:16 +08:00
    @frankli0324 frp 没问题,所以看过去,像是 firewall-cmd add-forward-port 转发的问题??
    mikaelson
        45
    mikaelson  
    OP
       2023-06-30 17:43:27 +08:00
    @GGC4 frp 没问题,所以看过去,像是 firewall-cmd add-forward-port 转发的问题??
    LykorisR
        46
    LykorisR  
       2023-06-30 19:22:16 +08:00
    @mikaelson 这就是最烦人的地方了,它只支持和 headscale 放在一台机器上,然后直接访问 socket 文件来进行验证
    mikaelson
        47
    mikaelson  
    OP
       2023-06-30 19:56:33 +08:00
    @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  
       2023-06-30 20:33:52 +08:00
    @mikaelson 可能是 DERP 设置的问题,我是用的 headscale 内置的 DERP ,RDP 是很流畅的没有问题
    mikaelson
        49
    mikaelson  
    OP
       2023-06-30 22:35:22 +08:00
    @LykorisR 你是用什么转发端口的?
    LykorisR
        50
    LykorisR  
       2023-07-01 08:46:59 +08:00
    @mikaelson 我是前面有 openwrt ,然后在群晖上用 docker 跑的 headscale 和 derp ,直接用 openwrt 来转发的端口
    nexply1920
        51
    nexply1920  
       2023-07-03 21:35:15 +08:00
    @mikaelson 可以用 tailscale+headscale 也可以用官方的管理端然后自建中转 derper 服务加速
    PowerDi
        52
    PowerDi  
       2023-08-18 23:36:01 +08:00
    @mikaelson #30 解决了吗?
    mikaelson
        53
    mikaelson  
    OP
       2023-08-19 00:06:16 +08:00
    @PowerDi 没有,你也碰到了?
    PowerDi
        54
    PowerDi  
       2023-08-19 01:13:56 +08:00
    @mikaelson #53 是的,也是 ping 不高,但是传东西很卡。HK 小水管
    PowerDi
        55
    PowerDi  
       2023-08-23 10:04:57 +08:00
    @frankli0324 #34 大佬,我想请教下,打洞成功率,与 headscale 是否有关?我发现无论用国内外服务器自建的 derp ,都是没办法打洞成功。
    ptsa
        56
    ptsa  
       2024-09-19 11:55:40 +08:00
    @LykorisR headscale 内置的 DERP 怎么设置防白嫖
    还有 docker 端口是不是要更多开放,目前我就开了 8080 9090
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3688 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 10:20 PVG 18:20 LAX 03:20 JFK 06:20
    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