You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
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 端口,即可不受限制的访问
局域网
,懂的都会明白;