6

求问自建 derp 节点的问题

 1 year ago
source link: https://www.v2ex.com/t/952922
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

求问自建 derp 节点的问题

  mikaelson · 10 小时 27 分钟前 · 884 次点击
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
48 条回复    2023-06-30 20:33:52 +08:00
begitcn

begitcn      9 小时 8 分钟前

控制台 Access Controls 配置文件修改了吗?
mikaelson

mikaelson      8 小时 59 分钟前

@begitcn 挖槽,我怎么没看到有提到 access controls 这个东西? google 了一堆教程,全是抄来抄去的。。。都一样的文章
begitcn

begitcn      8 小时 53 分钟前

用官方的 需要在控制台中 access controls 修改 derp 服务器配置 应该是添加 derpMap 的一些东西 自行搜索下吧
mikaelson

mikaelson      8 小时 52 分钟前

@begitcn 我是自建 derp 节点,没用官方的
Goalonez

Goalonez      8 小时 28 分钟前

http: //<server_Address>: 8080/windows
http: //<server_Address>: 8080/apple
好像会有类似这样的地址打开,然后根据里面的命令,把你的客户端注册到节点去
erhandsome

erhandsome      7 小时 47 分钟前

这些教程都 N 久之前的,直接看官方的自建文档,快速简单
nexply1920

nexply1920      7 小时 7 分钟前

@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

mikaelson      6 小时 50 分钟前

@nexply1920 不是都在推荐什么 tailscale+headscale 吗。。。我有点懵逼了
mikaelson

mikaelson      6 小时 45 分钟前

@erhandsome 才发现官方支持自建了,那就没必要再用 headscale 了?还是说,这种用法有另一种意义?
ZedRover

ZedRover      6 小时 35 分钟前

前两天用这个 https://github.com/yangchuansheng/docker-image/blob/master/derper/Dockerfile 在腾讯云部署的,教程参考的也是这个博主的,上海延迟 20ms 。没遇到自建中转节点不能打洞的问题,docker 容器连续运行也没有什么报错的问题。服务器懒得备案直接开的 10000+的端口也没遇到问题。
mikaelson

mikaelson      6 小时 16 分钟前

@ZedRover 现在看的就是他的。。感觉好乱。。。
LykorisR

LykorisR      5 小时 33 分钟前

@mikaelson 自建的意义在于控制器也用自己的,这样相当于完全自建,如果你只想自建中续那只需要把 berp 放到控制器中,但是要注意 derp 是没有验证的,任何人知道 IP 都能访问
EVJohn

EVJohn      5 小时 33 分钟前

你说的是 tailscale 的客户端+headscale 的服务端,还是 tailscale 服务端+自建 drep+tailscale 客户端
mikaelson

mikaelson      5 小时 27 分钟前

@EVJohn 前者。tailscale 客户端+headscale 服务端、一顿瞎折腾,终于可以了,node 也添加成功了,想问一下,这个怎么自定义每台服务器的 IP ?我现在看是自动获取的
mikaelson

mikaelson      5 小时 26 分钟前

@EVJohn tailscale 的客户端+headscale 的服务端,还是 tailscale 服务端+自建 drep+tailscale 客户端
另外,这 2 个有什么区别吗?
whcoding

whcoding      5 小时 26 分钟前

我也在搞这个 drep 还没搞好, op 有推荐的教程么
mikaelson

mikaelson      5 小时 25 分钟前

@LykorisR 我现在是 tailscale+headscale ,然后我看说 DERP_VERIFY_CLIENTS=true 就可以防止白嫖了?
mikaelson

mikaelson      5 小时 22 分钟前

@whcoding 我就靠着那篇残缺的教程,现在暂时搞出来了
frankli0324

frankli0324      5 小时 22 分钟前

@mikaelson tailscale 控制面是整个网络的信任锚点,控制面负责 authenticate 各个节点(你的电脑、服务器等都是节点),headscale 就是将这个信任锚点掌握在你自己手里。
不过 tailscale 后来支持了使用已 authenticate 的 node 作为新的信任锚点,可以谷歌一下
mikaelson

mikaelson      5 小时 20 分钟前

@frankli0324 所以现在也没必要用 headscale 了?可以 tailscale 一整套?
frankli0324

frankli0324      5 小时 18 分钟前

控制面 authenticate 一个 node 的时候会把这个 node 的公钥分发给所有节点,所有节点以后就都信任这个公钥了,类比你在.ssh/authorized_keys 里加上你的 ssh pubkey 。这样的话假如 tailscale 偷偷给这个公钥列表里加上一个恶意 node 的公钥,你的内网 infrastructure 就暴露给这个恶意 node 了,如果你还配置了诸如 tailscale ssh 的东西那就影响面更大了
frankli0324

frankli0324      5 小时 17 分钟前

@mikaelson 其实。。也可以,不过如果想彻底杜绝外网流量也可以用 headscale ,毕竟节点需要和控制面通信
ZedRover

ZedRover      5 小时 14 分钟前

@mikaelson #18 开启 verify_clients 之后就行了,需要服务器上有 tailscale 并且登录自己的账号,这样别人就算能 在 acl 里加你的节点也没法用
mikaelson

mikaelson      5 小时 7 分钟前

@ZedRover 服务器上有 tailscale 并且登录自己的账号 这是什么意思?还得去注册官网的 tailscale 嘛?我现在拿来做 server 的服务器上装了 headscale+自建 docker 的 derp+tailscale 客户端。现在已经联通了几个节点了。不过好麻烦。。。我都是去各个 client 装 tailscale 然后 tailscale up xxxx 什么的,生成一串后,去浏览器拿到链接,再回来 server 端添加 node 。
mikaelson

mikaelson      5 小时 5 分钟前

@frankli0324 我现在把 server 和 client 都部署了 tailscale ,打算把一些业务转发到 server 上,然后映射 ip+端口出去访问。比如 ssh ,sftp 之类的。。。也没法给所有使用者都加 tailscale
mikaelson

mikaelson      4 小时 57 分钟前

@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

mikaelson      4 小时 56 分钟前

@root01 千篇一律的,有用了也就一两分吧
GGC4

GGC4      4 小时 45 分钟前

我那会儿也是绕进去了。如果你的要求和我一样简单,是不需要 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

mikaelson      4 小时 43 分钟前

@GGC4 我因为有自己的公网服务器,所以想用自己搭建 derp 。我现在也成了。问题是,节点之间的延迟很一般,但是只要走公网转发后,直接就没速度了
frankli0324

frankli0324      4 小时 26 分钟前

@mikaelson @ZedRover 要搞清楚各个部分解决的是两个不同的问题
headscale 解决的是控制面通信问题,适用于无法与 tailscale 控制面通信的环境(当然最开始也是解决 tailscale 控制面可信问题),tailscale lock 解决的是 tailscale 控制面是否可信的问题,而 verify client 解决的是 derper 不允许其他用户通过你的 derper 握手和转发流量。derper 只是一个握手的协商者和*加密后*流量的转发者,并不涉及网络的可信问题,别人用你的 derper 顶多耗费你的流量。verify client 的行为是在协商前校验协商的二者的身份。
我觉得还是执行一个 step 之前先搞明白这个 step 的目的是什么吧(
frankli0324

frankli0324      4 小时 25 分钟前

* 校验协商的双方都和自己本机在同一个 tailnet 中
mikaelson

mikaelson      4 小时 19 分钟前

@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

frankli0324      4 小时 19 分钟前

@mikaelson 300k/s 的问题听起来像是 SSH Protocol 的 overhead ,20M 的小水管本身也不快
mikaelson

mikaelson      4 小时 11 分钟前

@frankli0324 每秒能有 2M 还行了呀,用来转发一些服务不做大数据传输,我之前才 4M 的,这次换到 20M 了,从阿里迁移到腾讯,结果搞成这副模样,死活找不到原因。哎。
以前每次新加节点,也就是加入 tinc ,然后去云服务器转发端口,也没做其他的。。。
SoFarSoGood

SoFarSoGood      3 小时 49 分钟前

@mikaelson tailscale 也是基于 wireguard 创建链接的,算不出正确的 mtu ,速度肯定慢。
blankmiss

blankmiss      3 小时 41 分钟前

只要知道 ip 换个端口 就能用你的 derp server 还是上个域名 开启客户端验证吧
blankmiss

blankmiss      3 小时 41 分钟前

@blankmiss 只要知道 ip 和 端口
GGC4

GGC4      3 小时 30 分钟前

速度问题临时另开一个 frp 对比看看
mikaelson

mikaelson      3 小时 12 分钟前

@SoFarSoGood 好难过,之前 tinc 都好好的,也都没去算过 mtu 什么的,不懂为什么在也不行了
mikaelson

mikaelson      3 小时 1 分钟前

@frankli0324 frp 没问题,所以看过去,像是 firewall-cmd add-forward-port 转发的问题??
mikaelson

mikaelson      3 小时 1 分钟前

@GGC4 frp 没问题,所以看过去,像是 firewall-cmd add-forward-port 转发的问题??
LykorisR

LykorisR      1 小时 22 分钟前

@mikaelson 这就是最烦人的地方了,它只支持和 headscale 放在一台机器上,然后直接访问 socket 文件来进行验证
mikaelson

mikaelson      48 分钟前

@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

LykorisR      11 分钟前

@mikaelson 可能是 DERP 设置的问题,我是用的 headscale 内置的 DERP ,RDP 是很流畅的没有问题

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK