添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我的网络拓扑如下:
公网服务A -- FRPS -- FRPC(主机1) -- 内网服务B(主机2)

服务AB都是微服务,使用REST API架构。 当测试的时候,AB都在内网,我可以使用IP直接通过HTTP访问,但是现在必须将A部署在外网,B部署在内网。同时还有一个限制是主机1上可以访问公网,我部署了FRPC。 主机2不能访问公网,部署服务B。

我遇到的问题是,现在服务A 可以 访问到B的接口, 但是 服务B 如何通过主机1上的FRPC 访问到 公网服务A的接口?

frpc Version

0.44.0

frps Version

0.44.0

System Architecture

linux/amd64, windows/amd64

Configurations

frps.ini

[common]
vhost_http_port = 7000

#日志记录等级,有trace, debug, info, warn, error
log_level = debug
#日志保留时间
log_max_days = 3

No response

Steps to reproduce

使用 stcp 或在主机 1 部署 http proxy。

我google了一圈,issue也看了。 发现 #2280 这问题类似。 官网上也说了 通过代理连接 frps 。 看了 https://github.com/fatedier/frp/blob/dev/conf/frpc_full.ini, 但是配置是怎么样的还是不太清楚。
我举个例子:
假设主机1: 192.168.1.128 主机2: 192.168.1.130
现在frps.ini 配置是:
[common]
vhost_http_port = 7000

那么我是只要在主机1配置 frpc.ini:
[common]
server_addr = x.x.x.x
server_port = 7000
http_proxy = http://user:[email protected]:8080

那么,我由下面的问题:

  • 我主机2 是不是不需要启动frpc,只要在发送http请求的时候,指向主机1:192.168.1.128:8080?
  • 上面的user:pwd是在哪里设置的?
  • 如果你的内网服务B无法访问外网。首先保证主机1可以访问服务A的接口(利用frp实现,可以在frps的服务器上运行frpc,或者在其他能够直接访问服务A的能访问外网的主机上运行frpc)。 然后,在主机1上端口转发(firewall-cmd实现,转发主机1上的某个端口到frps服务器的对应端口,或者在主机1上使用stcp并firewall-cmd转发主机1某个端口到stcp设置的那个端口),服务B直接访问主机1的ip和端口就行。

    感谢,有些复杂,我去尝试下 @berlin2123

    tls_enable = true

    外网程序使用 frps 代理端口 8080 就相当于使用 主机1 作为代理
    主机1 主机2 在同一局域网,可以相互访问,因此外网程序使用 frps 代理端口 8080 可以访问局域网 主机2 任意开放了的端口;
    主机2 不需要启动frpc,

    公网服务A 可以通过 frps 代理端口 8080 访问到 服务B的接口 (通过 tcp 转发更直接,只是用来说明理解http_proxy使用方法 )

    frps 两种情况
    情况1: 主机1 所在局域网路由器有公网 ip,frps 跟 主机2 同一局域网,服务B 可以通过 frps 代理端口 8080 访问到 公网服务A的接口
    情况2: 主机1 所在局域网路由器无公网 ip,frps 跟 主机2 不同在一局域网, 主机1 增加 frps1 和 frpc1,
    主机1 frpc1,ini

    [common]
    server_addr = 192.168.1.128 (frps1 的地址:localhost 、127.0.0.1 都可以)
    server_port = 7000
    token = admin (密码)
    [http_proxy-128]
    type = tcp
    remote_port = 8080
    plugin = http_proxy
    plugin_http_user = user
    plugin_http_passwd = password
    use_encryption = true
    use_compression = true
    tls_enable = true

    服务B 可以通过 frps1 代理端口 8080 访问到 公网服务A的接口

    如下最简单:
    如果能通过ssh进入路由器后台,在路由器开机脚本加入如下命令即可
    iptables -I FORWARD -s 192.168.1.130 -d 外网访问A的ip -p tcp --dport 8081 -j ACCEPT
    允许局域网 ip 192.168.1.130 能访问外网服务A的 8081端口;
    假设公网服务A的接口端口为 8081

    另外逆向思维一下:把中国大陆看做互联网,把除了中国之外看做 局域网
    根据上面的方法,frps 在互联网内,frpc 在 局域网 内,frpc 配置 http_proxy,
    相关程序使用 frps 的 http_proxy 端口,即可不受限制的访问 局域网 ,懂的都会明白;