FRP教程(二):反向代理隧穿内网

很多公司的防火墙都很严格,想要访问公网资源并不是易事。本文要实现的目标是,利用FRP创建一个反向代理的TLS隧道,把流量转发公网服务器的正向代理上。

拓扑简略

  • 用户处在公司内网,公网可用性不高
  • 用户拥有一个可以通过IP访问的内网服务器
  • 用户有一个位于公网的Linux云服务器
  • 目标:用户在终端上设置代理,IP是内网服务器IP,端口也是内网服务器上的端口;内网服务器接到代理流量,加密,再用TLS加密,穿越公司防火墙传输给公网服务器,公网服务器解密流量,转发给公网服务器的代理进程。

实操

公网服务器

公网服务器作为FRP客户端,并且部署一个正向代理服务端,例如Shadowsocks。

部署Shadowsocks(利用Gost):

1
gost -L ss://rc4-md5:passwd@:12345

FRP客户端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
server_addr = x.x.x.x
# 公司内网服务器的IP和端口
server_port = 7000
tls_enable = true
# 启用TLS

[ss]
type = tcp
local_port = 12345
remote_port = 8888
use_encryption = true
# 启用加密
# 开启后性能较差的可以关闭加密,但是请勿关闭tls

这样,先对流量加密,再用TLS加密,保障传输安全

启动FRP客户端

1
./frpc -c ./frpc.ini

公司内网服务器(有公网IP)

公司内网服务器作为FRP服务端,用来接收TCP连接,转发TCP流量。

FRP服务端配置

1
2
3
4
[common]
bind_port = 7000
tls_only = true
# 只接受tls安全连接

启动FRP服务端

1
./frps -c ./frps.ini

连接

在终端上启动代理时,IP与端口都是公司内网服务器的,这样一来,流量会先在客户端加密,然后到达公司内网服务器,服务器对流量进行tls加密,转发给客户端,客户端解密,转发给本地正向代理服务,正向代理服务解密,流量发送给公网服务器,流量返回时会原路返回(路由可能不同,中间我们人为设置的节点是一直的)。

完成

在公司局域网里享受公网的快乐吧。