V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
fortitudeZDY
V2EX  ›  分享创造

撸了个 Tailscale 的国内发行版,分享给大家

  •  2
     
  •   fortitudeZDY · 2022-12-05 13:49:13 +08:00 · 8077 次点击
    这是一个创建于 500 天前的主题,其中的信息可能已经有所发展或是发生改变。

    楼主是一名网络通信领域的老程序员,先前在大厂工作过一段时间,因为期望陪伴家人且亦到了卷出病也卷不动的年龄,机缘巧合下回到定居地工作。

    因为工作强度降低以及需要调理身体的缘故,在工作之余,撸了个 Tailscale 的国内发行版,目前感觉基本能用,所以分享出来。

    产品定位

    Tailscale 的国内发行版,提供国内 SSO 认证(当前是微信)及 P2P 打洞失败时的国内中转能力;为用户提供易用的(扫码入)、安全的终端内网互联工具。

    技术背景及现状

    总体上是复用了 Tailscale + Headscale 的核心代码,做了些外围界面的微小工作(此处致敬一下长 者 ,可惜加不了 1s 了)。

    管理平台方面,主要利用 vue 以及 go 来开发 web 前端及后台,文档部分用到了开源 cms ( strapi ) + nuxt 来实现静态化。

    桌面 app 方面,主要是基于 Tailscale 内核,通过 go build 工具来生成静态库(从 Tailscale Android 代码学习得到),基于 tauri 以及 rust ffi 来实现跨平台桌面 App 构建(注:此桌面 App 计划整理注释以及代码后开源),目前支持 Linux/Windows/Mac(含 M1 及之后芯片)的桌面应用。

    Android app 方案,则主要针对 Tailscale 开源代码进行汉化,集成微信认证能力。

    Ios/IPad 暂时没有精力开发,因为目前及未来仍会兼容 Tailscale 官方客户端,因此可参考 Headscale 的方式接入。

    免费用户及付费策略

    因为这个产品算是楼主的全干(全水)工程师的一个尝试,个人的应用主要是连接自己的各个云服务器以及家用 NAS 同步(之前被百度网盘搞伤了),所以从自己的使用来看,流量需求并不高,并且 Tailscale 的 subnet router 等高级功能尚未集成出来,因此当前仅有免费套餐提供出来。

    详细的免费用户规则,请参考官网链接: https://xedge.cc/doc/faq/2

    关于付费,楼主觉得主要还是从功能(比如楼主考虑的提供短域名池,供用户自定义网络子域名以及终端别名)、流量规格层面进行约束,以便能够维持这个服务的长期运行,这部分功能会根据运行情况进一步优化及开发。

    关于 Tailscale ,在 V2EX 上已经有较多讨论了,这里就不再介绍了;楼主做的国内发行版产品官网为: https://xedge.cc

    上手文档为: https://xedge.cc/doc/quickstart/1

    期待这个东西能够帮助到大家,如果有问题,请在本楼反馈,以及参考前面的免费用户规则反馈即可。

    65 条回复    2024-03-21 16:40:29 +08:00
    shinko
        1
    shinko  
       2022-12-05 14:22:23 +08:00 via iPhone
    个人的话,现有的 Tailscale + Headscale 已经很完善了,我用这个方案几个月,非常稳定。6 个地方的宽带都没出过问题
    matzoh
        2
    matzoh  
       2022-12-05 14:46:17 +08:00
    我个人还是比较在意 ios 设备的支持度(缺一不可)

    headscale 不支持 ios ( tailscale 没开源)
    fortitudeZDY
        3
    fortitudeZDY  
    OP
       2022-12-05 14:51:13 +08:00
    @shinko 个人的话,我觉得有技术基础用 Headscale 是完全没问题的;但是如果想省事也不太会部署的话,用 xEdge 则会比较方便。
    fortitudeZDY
        4
    fortitudeZDY  
    OP
       2022-12-05 14:52:33 +08:00
    @matzoh 谢谢反馈,iOS 这个我觉得应该是可以做的,后面会重点解决,不然对不住全终端支持这个口号:)
    zuijiapangzi
        5
    zuijiapangzi  
       2022-12-05 15:18:16 +08:00
    @shinko 请问下,是否有详细教程推荐?
    billzhuang
        6
    billzhuang  
       2022-12-05 15:24:09 +08:00
    " P2P 打洞失败时的国内中转能力" 那么还能使用官方的节点么?
    fortitudeZDY
        7
    fortitudeZDY  
    OP
       2022-12-05 15:28:26 +08:00
    @billzhuang 主要是考虑合规因素,因为不会考虑支持国外 ip 的终端接入,因此官方节点的意义就不大了:(
    shinko
        8
    shinko  
       2022-12-05 15:38:33 +08:00   ❤️ 1
    @zuijiapangzi https://icloudnative.io/ 这里几篇文章已经算是非常详细了。
    @fortitudeZDY 确实,没有开箱即食对于一些人是难点。特别中继那部分要自己编译~~要不用 Tailscale 的服务器太慢了
    wwqgtxx
        9
    wwqgtxx  
       2022-12-05 20:06:56 +08:00
    能和官方版本共存么
    fortitudeZDY
        10
    fortitudeZDY  
    OP
       2022-12-06 11:47:22 +08:00
    @wwqgtxx 可以和官方共存,但官方部分平台,比如 ios 是不支持修改 login url ,就无法对接了。
    Aixtuz
        11
    Aixtuz  
       2022-12-06 16:12:43 +08:00
    主力设备 iOS ,所以只好用原版了,自建 derp 体验还行。
    wolfmei
        12
    wolfmei  
       2022-12-06 21:50:48 +08:00
    哦,前不久才自建 tailscale + headscale + derp
    ixinshang
        13
    ixinshang  
       2022-12-07 10:21:26 +08:00
    最近折腾 zero ,有些移动网络打不通。。。
    OP 的提供一个 docker 客户端把。
    blackmolycat
        14
    blackmolycat  
       2022-12-20 10:13:12 +08:00
    这几天因为 google 团队盘挂掉的事,想到还是自己搭建个人网盘好一点,终归逃不过。
    刚开始尝试了下 zerotier ,但是 ios 客户端上次更新居然是 6 个月以前,不出意外连接后打洞失败走外网服务器中转,网速慢的无法使用,后切换到 tailscale 解决。然后 tailscale 的 ios 客户端目前隔一天就得重新验证登录,重新验证就会很容易失败(sso 我用的 google ,不太清楚这个过程是否会受到墙的问题)。
    ios 刚需,但目前用起来都有毛病...
    fortitudeZDY
        15
    fortitudeZDY  
    OP
       2022-12-23 10:52:02 +08:00
    @lgjx123 ios 客户端看来我这里要提上日程啦,已经找到之前做的 ios 代码原版,假期抽空再撸一个 ios 的:)
    fortitudeZDY
        16
    fortitudeZDY  
    OP
       2022-12-29 10:53:25 +08:00
    新冠初愈,发一个年末的版本( v0.1.4 ),感谢前期朋友们的试用。

    预祝大家都顺利抗过病毒以及新年快乐。

    在即将到来的新年,xEdge 计划支持 subnet router 、自定义域名别名、ios 平台支持;欢迎各位继续关注试用。
    Awes0me
        17
    Awes0me  
       2023-01-04 14:51:55 +08:00
    使用了一段时间很好用, 谢谢开发
    techstay
        18
    techstay  
       2023-01-11 01:36:31 +08:00
    感谢,之前也是在 v 站看到另一个朋友分享的工具,不知道哪里没设置对,能 ping 通能访问 VNC ,但是别的就访问不了,简直有毒。这个工具一次就成功了,好东西
    techstay
        19
    techstay  
       2023-01-14 03:43:50 +08:00
    大佬能不能给客户端加个注销功能,我给我朋友分享,他没看我说啥就直接登录了自己的账号,结果我想让他退出登录我的账号时候才发现没有注销功能。然后找了半天配置文件,删除了在登录结果还是用上次的状态登录。折腾了一晚上也没解决……
    fortitudeZDY
        20
    fortitudeZDY  
    OP
       2023-01-22 11:09:22 +08:00
    @techstay 嗯,这个功能我记录一下,后面的版本应该可以加上,之前也有计划增加重置状态能力的。
    fortitudeZDY
        21
    fortitudeZDY  
    OP
       2023-01-22 11:11:57 +08:00
    各位朋友新春快乐,预祝大家兔年大展宏兔:)

    近期把 Tailscale 的 subnet router 功能移植过来了,目前控制后台已经上线该功能,但终端方案暂仅支持 Linux 终端。

    具体使用可参考如下文档:

    https://xedge.cc/doc/usecase/3
    Reserdog
        22
    Reserdog  
       2023-02-04 09:44:14 +08:00
    @fortitudeZDY 嗨,楼主,方便留个联系方式吗?
    Reserdog
        23
    Reserdog  
       2023-02-04 10:00:54 +08:00
    @fortitudeZDY 发现楼主是前公司兼兄弟部门的,有事情想详聊,我邮箱 [email protected]
    fortitudeZDY
        24
    fortitudeZDY  
    OP
       2023-02-06 11:45:38 +08:00
    @Reserdog 欢迎交流,我邮箱是(base64 decode please):Zm9ydGl0dWRlLnpoYW5nQGdtYWlsLmNvbQ==
    luckjoe680
        25
    luckjoe680  
       2023-02-07 21:02:22 +08:00 via Android
    @lgjx123 是不是没有禁用过期啊
    hanguofu
        26
    hanguofu  
       2023-02-08 00:33:25 +08:00 via Android
    文档写得很详细:)
    blackmolycat
        27
    blackmolycat  
       2023-02-08 11:14:24 +08:00
    @luckjoe680 嗯,发现不是哈。是因为多 vpn 配置的话,需要手动到 vpn 里面选择配置,tailscale 不会自己切换配置。
    例如我用着小火箭,用完关了切换到 tailscale ,需要自己到 vpn 配置那里切换到 tailscale ,不然进客户端就会出现获取不到配置的情况...安卓下没有这个问题。
    qiabaobao
        28
    qiabaobao  
       2023-02-09 17:12:48 +08:00
    大佬,我想问下,我用官方源码编译出来的 tailscale ,为什么没法用,但是 mac 可以,具体差异就是 windows 虚拟网卡的时候分配的 ipv4 设置失败,但是 mac 成功了
    fortitudeZDY
        29
    fortitudeZDY  
    OP
       2023-02-10 10:18:08 +08:00 via Android
    @qiabaobao 是直接用 go 代码编译出来的吗?是的话你可能要把 wintun.dll 这个库放到同目录下试试
    qiabaobao
        30
    qiabaobao  
       2023-02-15 10:21:43 +08:00
    @fortitudeZDY 不行,我想问下大佬你是怎么支持 windows 的,加个 wx 交流一下 Y29zbW9zbl9u(Base64)
    kumiko
        31
    kumiko  
       2023-03-17 14:07:46 +08:00 via Android
    用着用着突然出现
    程序异常,错误 TypeError: Cannot convert undefined or null to object 请联系官方支持。

    怎么办,卸载重启试过了没用。。。
    fortitudeZDY
        32
    fortitudeZDY  
    OP
       2023-03-17 19:28:02 +08:00 via Android
    控制台里能反馈下 network id 吗?可以私发我
    abbottcn
        33
    abbottcn  
       2023-03-21 16:16:04 +08:00
    试了好多次,
    Mac mini (M1, 2020),
    一直提示,
    xedge-tui.app” is damaged and can’t be opened. You should move it to the Trash.

    下载了多次, 依旧是这个问题.

    另一个是 Intel 处理器,
    运行之后, 提示信息如下:
    程序异常,错误 TypeError: Object.entries requires that input parameter not be null or undefined 请联系官方支持。
    fortitudeZDY
        34
    fortitudeZDY  
    OP
       2023-03-21 22:30:36 +08:00
    @abbottcn 抱歉,今天我这里也试了一下,看起来好像我本地编译出的 dmg 可以安装,但是上传到 oss 上重新下载后,因为来源的问题好像就安装不生效了。查了下 tauri 的资料,可能是需要 code signing :( 这个我最近在抽时间研究 ios 的 app 开发,到时会一并处理一下。

    intel 的您可以确认下是否是以 sudo 方式启动的,如果没有 sudo 执行,是无法正确工作的。
    abbottcn
        35
    abbottcn  
       2023-03-22 13:47:19 +08:00
    @fortitudeZDY "Intel 的您可以确认下是否是以 sudo 方式启动的,如果没有 sudo 执行,是无法正确工作的。"

    的确是采用 sudo 方式运行的.

    GUI 中, 链接状态显示“程序异常,错误 TypeError: Object.entries requires that input parameter not be null or undefined 请联系官方支持。“

    本机安全内网 IP 显示为 100.64.0.66

    至少在元旦之前就是这个样子.

    当然, 03-22 下载的安装包, Intel 版本, 也是同样错误信息呀.
    fortitudeZDY
        36
    fortitudeZDY  
    OP
       2023-03-22 15:58:05 +08:00 via Android
    刚才才群里确认了下,如果网络中有单节点的话,app 前端会有问题。另外那个貌似现在 apple 要求 app 需要公证了,这个我申请完开发者后,到时签名下
    fortitudeZDY
        37
    fortitudeZDY  
    OP
       2023-03-23 12:06:16 +08:00
    @abbottcn

    这个应该是 m1 mac 的安全策略控制的,因为目前 app 不是通过 app store 分发的,可以用如下命令来关闭校验:

    sudo xattr -r -d com.apple.quarantine /Applications/xedge-tui.app

    信息来自这个 mac 下同样基于 tauri 的 ChatGPT app:)

    https://github.com/lencx/ChatGPT/issues/663
    abbottcn
        38
    abbottcn  
       2023-03-27 12:16:27 +08:00
    @fortitudeZDY 苹果芯片的机器, 如此处理之后, 可以使用. 网络正常. 不够那个客户端, 显示的确有点问题. :)
    fortitudeZDY
        39
    fortitudeZDY  
    OP
       2023-03-27 14:56:58 +08:00 via Android
    @abbottcn 嗯,近期会发布一个新的版本,解决掉这个问题,谢谢反馈啊
    fortitudeZDY
        40
    fortitudeZDY  
    OP
       2023-03-30 09:46:04 +08:00
    感谢坛友们的热心试用,这几个月一直在关注用户的反馈,对于我这样一个业余时间投入的小产品,能有坛友们愿意花时间试用,还是很感谢大家的。

    近期图形版本做了一个大版本升级,控制中心也做了一定的优化。主要包括如下改进:
    1 、支持发布路由;
    2 、支持登出账号重新认证;
    3 、Windows/MacOS 增加 tray icon 以支持隐藏窗口;
    4 、升级 tailscale 内核至 1.38.2 ;
    5 、bugfix ;
    6 、增加在线反馈问题能力。 

    希望大家继续支持,有问题也可以继续反馈。
    fortitudeZDY
        41
    fortitudeZDY  
    OP
       2023-04-12 16:59:52 +08:00
    感谢近期用户群里的用户反馈:

    最近将桌面 App 版本进行了一次升级,解决了 Windows/MacOS 无法作为中转节点的 bug 。

    另外将 Android 设备也拉起到与桌面版本相同的 tailscale 内核。

    欢迎关注这个应用的朋友继续试用反馈哈:)
    faceair
        42
    faceair  
       364 天前
    在 macOS 端也是可以用命令行来登录的,在点击 UI 的 get started 之后,不点 join network ,然后去命令行执行

    /Applications/Tailscale.app/Contents/MacOS/Tailscale up --login-server https://login.xedge.cc

    就可以连上了,目前官方的客户端体验比 xedge-tui.app 好不少
    fortitudeZDY
        43
    fortitudeZDY  
    OP
       363 天前
    @faceair 感谢分享啊,官方会一直兼容下去的,桌面 app 肯定还有不少不足的地方,我这里也在逐渐优化:)
    fortitudeZDY
        44
    fortitudeZDY  
    OP
       315 天前
    更新一下前面承诺过的进展,xEdge iOS 版本已经适配完成(因复用 tailscale android 代码,整体操作模式类似,且同样增加了微信认证能力),目前已经投放到 test flight 渠道,如有需求,欢迎发送您的联系邮箱到我们的邮箱( base64 ) aW9zQGdhbGF4bmV0LmNj 我来添加到 test flight 测试组,即可使用该 app 。
    Danswerme
        45
    Danswerme  
       313 天前
    你好楼主,请教一下 Tailscale 客户端在使用出口节点模式之后,所有的流量经过出口节点进行转发时被 NAT 了一次,有办法让出口节点只进行流量转发而不 NAT 吗?
    fortitudeZDY
        46
    fortitudeZDY  
    OP
       312 天前 via Android
    @Danswerme 如果不 nat ,目的机器上怎么回源呢?如果你可以通过给目的机器配置路由解决这个,那么你应该可以通过直接配置路由到 ts 接口,他可能没有做检查
    Danswerme
        47
    Danswerme  
       312 天前
    @fortitudeZDY 好的,之前用的 ZeroTier ,我是在出口节点所在局域网的路由器上做了静态路由;我研究下怎么禁用出口节点 ts 接口的 NAT 吧。
    Danswerme
        48
    Danswerme  
       312 天前
    @Danswerme 解决了,看源码里是对 mark 之后的包进行了 MASQUERADE ,在出口节点上将 iptables ts-forward 链上的两条 mark 0x40000/0xff0000 规则删除即可。
    fortitudeZDY
        49
    fortitudeZDY  
    OP
       311 天前
    @Danswerme 嗯,非用户态模式下( linux 下默认),就是用的 iptables 做了 maquerade ,你到目标机器上是回指路由到出口节点吗?
    fortitudeZDY
        50
    fortitudeZDY  
    OP
       311 天前
    @fortitudeZDY 稍微更新下,apple 通过了 public beta test flight ,这样可以直接访问 https://testflight.apple.com/join/wXThdIaM 这个链接进行试用。
    Danswerme
        51
    Danswerme  
       311 天前   ❤️ 1
    @fortitudeZDY 是的,出口节点的 Linux 机器上默认路由指向了局域网内的一台路由器,然后我在路由器上加了一条 Tailscale 网段的静态路由,网关指向出口节点的局域网 IP 。
    Danswerme
        52
    Danswerme  
       311 天前
    再次更新一下吧,希望能帮到需要的人,是我没有仔细看文档。tailscale 提供了禁用 NAT 的 cli 选项,执行 tailscale up 时加上 --snat-subnet-routes=false 即可。
    fortitudeZDY
        53
    fortitudeZDY  
    OP
       295 天前
    继续更新一下,目前 xEdge iOS 免费应用已经成功上架 App Store ,受 VPN 应用国内上架限制,目前在美、新、港、台四区上架,欢迎大家试用,如之前有朋友用的 test flight 版本,也可更新到此版本,避免受 90d 试用限制。
    Apol1oBelvedere
        54
    Apol1oBelvedere  
       282 天前
    @fortitudeZDY #53 公司内网有各种审计和检测系统,会不会通过这种组网方式把我家庭网络监控到(如各种设备信息,拓扑等)? Todesk 不会出现这种情况是因为流量全部走了服务器。
    fortitudeZDY
        55
    fortitudeZDY  
    OP
       280 天前 via Android
    @Apol1oBelvedere 我觉得如果公司在你电脑上有装软件,理论上有可能扫到,普通是外部机器,理论上不太会
    PowerDi
        56
    PowerDi  
       244 天前
    @shinko #1 但我感觉问题在于,国内中转网速不能实用
    fortitudeZDY
        57
    fortitudeZDY  
    OP
       184 天前
    国庆期间解决了 iOS app 目前的已经知问题,上一个版本糊的有点渣,今天通过 apple 大爷的审核(为此强制在 App 首次安装前增加了信息收集确认按钮),欢迎有需要的朋友取用。

    因 iOS 与 android 共享 gioui 框架,对 android 版本也同样进行了升级。
    wm5d8b
        58
    wm5d8b  
       114 天前 via Android
    有 arm64 docker 版吗,容器化部署更容易些
    fortitudeZDY
        59
    fortitudeZDY  
    OP
       114 天前   ❤️ 1
    @wm5d8b 基于 tailscale 撸了一个出来,托管在阿里云上,仅替换了镜像中的登陆服务器地址,其他命令行同开源版本。

    registry.cn-hangzhou.aliyuncs.com/xedge/xedge

    另外 xEdge 最新已经支持认证 key ,也可以用来认证 docker ,欢迎试用。
    fdghjk
        60
    fdghjk  
       108 天前
    楼主你好,请问这个和官方的客户端冲突吗?安装了你这个 官方的那个是不是必须要卸载呢
    fdghjk
        61
    fdghjk  
       108 天前
    @fdghjk 我想同时用你的和官方的 行不行
    fdghjk
        62
    fdghjk  
       108 天前
    怎么判断现在走的是打洞还是中转啊 我害怕浏览不够用的
    fortitudeZDY
        63
    fortitudeZDY  
    OP
       106 天前 via Android
    @fdghjk 可能会有地址冲突,可以停用官方的后台服务就可以啦
    fortitudeZDY
        64
    fortitudeZDY  
    OP
       106 天前 via Android
    @fdghjk 我们的客户端都加了状态显示,可以从那里看出来的哈
    fortitudeZDY
        65
    fortitudeZDY  
    OP
       28 天前
    这里稍微做一下我们这个小服务的更新,感谢 V2EX 一直对我们产品进行试用的用户,部分用户已经付费支持,再次感谢!

    1 、因为顺利拿到国内 VPN 组网牌照,因此 iOS 客户端已经上架国内 App Store ,UI 方面因为与 android 一样采用了 gioui 框架,可能还是有一些 ugly 和不稳定,但由于 iOS VPN 是独立进程,并不影响组网使用;等俺学习 SwiftUI 到一定水平后准备再优化一版。
    2 、最近基于 tailscale 的 funnel 的技术原理,实现了内网穿透功能,此功能兼容原有开源 tailscale 客户端,目前已经上架专业套餐和免费的体验套餐,欢迎有需求的朋友来试用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:29 · PVG 03:29 · LAX 12:29 · JFK 15:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.