V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sudoy
V2EX  ›  问与答

付费咨询 frps 设置

  •  
  •   sudoy · 253 天前 · 1145 次点击
    这是一个创建于 253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:我在 frps 启用了subdomain_host,并且将 *.example.com 解析到我的云服务器(假设 5.6.7.8 )。这样一来,任何人只要有我的云服务器 IP 、frps 端口以及 token ,都能通过自定义的二级域名(如 test1.example.com )将本地暴露在公网。我现在需要在 frps 那里设置域名和二级域名白名单,只有白名单里的域名和二级域名才能使用我的反代服务。

    我用 cloudflare 作为 DNS 管理并且开启了代理(橙色的云朵),因此,我所有的二级域名自带 https ,并且可以正常访问所有内网 web 服务。我刚才试了用 nginx 来创建域名白名单,但是无法正常访问内网 web 服务。我需要不影响 cloudflare 免费 ssl 使用,同时能在 frps 那里启用白名单。

    FRPS 和 FRPC 配置如下:

    FRPS

    # frps.ini
    [common]
    bind_port = 7000
    vhost_http_port = 80
    subdomain_host = example.com
    token = test123
    
    

    FRPC

    [common]
    server_addr = 5.6.7.8
    server_port = 7000
    authentication_method = token
    token = test123
    
    [web1]
    type = http
    local_ip = 127.0.0.1
    local_port = 8080
    subdomain = web1
    custom_domains = customer.com
    authentication_method = token
    token = test123
    
    

    在上面这个配置里面,假设某个不认识的人,知道了我的服务器 IP 5.6.7.8 、端口 7000 以及 token test123 ,他就能免费用我的反代服务。我想限制只有我授权的域名和二级域名才能用我的反代服务。

    有解决访问的老哥,请加我微信报价,我的预算是 100RMB

    IMG

    第 1 条附言  ·  252 天前
    问题已经解决了,感谢大家的回复!

    目前解决方案是通过 nginx 设置域名白名单
    26 条回复    2023-08-19 17:09:37 +08:00
    des
        1
    des  
       253 天前
    所以为什么不保密 token ,让别人知道呢?
    sudoy
        2
    sudoy  
    OP
       253 天前
    @des token 是发给很多学生使用的,为了避免学生将 token 泄露给别人,才想到限制域名
    bing1178
        3
    bing1178  
       253 天前
    前面加个 nginx 呢? 有电报吗
    des
        4
    des  
       253 天前
    jllove
        5
    jllove  
       253 天前 via iPhone
    @bing1178 试过加 nginx ,访问不了,*.example.com 的解析使用 Cloudflare 的免费 https ,不知道是不是这个原因。我没用电报
    jllove
        6
    jllove  
       253 天前 via iPhone
    @des 这个昨天研究过,不会弄
    des
        7
    des  
       253 天前 via iPhone
    @jllove 用 nginx 应该是最简单的,应该是你没配置对
    yaott2020
        8
    yaott2020  
       253 天前 via Android   ❤️ 1
    @sudoy frps 可以设置多 token ,有插件实现,如果会 go 的话可以自己写,不难,我自己就写了一个
    bing1178
        9
    bing1178  
       253 天前
    cloudflare 回源协议是 https 还是 http ?
    不过 nginx 这都支持。nginx 这只通过允许的域名。
    yinmin
        10
    yinmin  
       253 天前 via iPhone   ❤️ 1
    配置有 1 处 bug ,frpc.ini 去掉 custom_domains = customer.com

    另外,nginx 的配置没贴出来,nginx 也有可能有问题。
    mcone
        11
    mcone  
       253 天前   ❤️ 1
    怎么感觉有点精神分类了,中间那个号也是楼主吗?

    个人感觉这种 token 如果分发对象不可信(可能会散播),token 鉴权的意义其实就没有了……
    sailei
        12
    sailei  
       252 天前
    cloudflare 代理的 ip 应该是动态的吧
    virualv
        13
    virualv  
       252 天前 via iPhone   ❤️ 1
    你是只要使用 http 和 https 反代嘛
    ysc3839
        14
    ysc3839  
       252 天前 via Android   ❤️ 2
    怀疑是 X-Y Problem https://coolshell.cn/articles/10804.html
    建议说原始需求

    我个人推测,你需要让别人可以借用你的服务器进行 http/https 的内网穿透,但是要限制别人能用的域名?
    这种需求个人建议用 WireGuard+nginx 反代,不同客户端用不同的密钥,客户端只需要暴露未加密的 http 服务,https 加密由服务器上的 nginx 来做,可以配合通配域名证书。这种方案客户端密钥泄漏了可以取消授权,同时客户端和服务器之间通信是确保安全的,frp 的加密功能安全性未知。
    ysc3839
        15
    ysc3839  
       252 天前 via Android   ❤️ 1
    @ysc3839 上述这种方案,假如你添加了某人 (假设是 A) 的 Key-A 的公钥,这个 Key-A 的私钥泄漏之后,别人使用时会出现 A 的客户端和别人的客户端“打架”的情况,实际上很难正常通信。
    WireGuard 的逻辑是,收到包后更新对端 IP ,如果有包要发到对端,就会发到最后更新的 IP ,如果有两个客户端用相同的 Key ,且同时向服务端发包,那对端 IP 就会在这两个客户端之间反复横跳,服务端发回的包也是一部分发到一个客户端,一部分发到另一个,因此很难正常通信。
    sudoy
        16
    sudoy  
    OP
       252 天前
    @bing1178

    “cloudflare 回源协议是 https 还是 http ?
    不过 nginx 这都支持。nginx 这只通过允许的域名。”

    是 https 的,已经搞定了
    sudoy
        17
    sudoy  
    OP
       252 天前
    @yinmin 确实是 nginx 的问题,已经搞定了,谢谢回复🙏
    sudoy
        18
    sudoy  
    OP
       252 天前
    @mcone

    “怎么感觉有点精神分类了,中间那个号也是楼主吗?“

    哈哈那个也是我的号,一个办公室登录,一个手机和家里登录。

    ”个人感觉这种 token 如果分发对象不可信(可能会散播),token 鉴权的意义其实就没有了……”
    是的,token 只是其中一道保护,所以我需要域名白名单这另外一道保护
    sudoy
        19
    sudoy  
    OP
       252 天前
    @sailei
    “cloudflare 代理的 ip 应该是动态的吧”
    这个没有关系,我启用 cloudflare 代理也正常使用,问题在于我加了一道 nginx 就出错。现在问题解决了,一个老哥帮我配置了 nginx 就解决了
    sudoy
        20
    sudoy  
    OP
       252 天前
    @virualv
    “你是只要使用 http 和 https 反代嘛”
    是的,我只要这两个,ssh 啥的都不用
    sudoy
        21
    sudoy  
    OP
       252 天前
    @ysc3839 感谢老哥写这么专业的回复,我这个其实没有那么复杂,每个客户端分配一个唯一的 id ,一个 id 绑定一个域名或者子域名。而且我只启用 http 服务,所以没有域名他即便有我的反代信息也没啥用。
    yinmin
        22
    yinmin  
       252 天前 via iPhone
    @sudoy #21 这种模式是有隐患的,例如别人可以使用 stcp 协议,用你的服务器做中转站
    sudoy
        23
    sudoy  
    OP
       252 天前 via iPhone
    @yinmin frps 除了 http 别的都没有开启的
    yinmin
        24
    yinmin  
       251 天前   ❤️ 1
    @sudoy #23 仍然可以使用你的服务器做中转 https://gofrp.org/docs/examples/stcp/
    sudoy
        25
    sudoy  
    OP
       251 天前 via iPhone
    @yinmin 老哥能加个微信吗?
    sudoy
        26
    sudoy  
    OP
       251 天前 via iPhone
    @ysc3839 是的,原始需求就是让别人借用我的服务器进行 http/https 进行内网穿透,但是要限制别人能用的域名。目前用的是 nginx 挡在 frps 前面,基本能实现限制域名使用的需求。但是就像 24 楼的老哥说的,可能会被人蹭网用来做中转,这 wireguard 应该可以解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2808 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:15 · PVG 14:15 · LAX 23:15 · JFK 02:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.