什么是frp及工作原理
FRP 服务可以分配给你一个域名让你本地的web项目提供给外网访问, 特别适合向别人展示你本机的web demo 以及调试一些远程的API (比如微信公众号,企业号的开发)。
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
使用场景
在许多情况下,我们希望把内部的服务暴露到外网来使用,比如说:
- 在公司内网开发程序,要和微信联调。
- 想要随时随地登录家里的树莓派,使用上面的服务
实验目标
- 外网通过ssh访问内网机器
- 访问内网web服务
本次实验需要有公网服务器1台
配置说明
- 下载frp
下载地址是:https://github.com/fatedier/frp/releases,本次实验用的是linux版本frp_0.13.0_linux_amd64.tar.gz - 将下载好的文件解压并进行文件夹
文件结构如下:
[root@izwz9e0geg32a83u5wy4ciz frp_0.13.0_linux_amd64]# ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE
可以在里面看到frps 和 frpc。frps相关的是服务端的程序和配置文件,frpc开头的是客户端的程序和配置文件。
- 服务端配置(frps.ini)
在外网服务器上搭建frp服务端frps,修改服务端的配置为如下:
[root@izwz9e0geg32a83u5wy4ciz frp_0.13.0_linux_amd64]# vim frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
privilege_mode = true
privilege_token = ***** # 可选,但是建议加上,客户端需要有同样的值才允许连接,加固安全性
max_pool_count = 3
- 客户端配置(frpc.ini)
amu@amu:~/frp_0.13.0_linux_amd64$ vim frpc.ini
[common]
server_addr = 112.**.**.2**
privilege_token = ****
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = http
local_port = 80
custom_domains = 112.**.**.2**
- 启动frp服务端
#nohup ./frps -c ./frps.ini &
运行结果如下
[root@izwz9e0geg32a83u5wy4ciz frp_0.13.0_linux_amd64]# ./frps -c ./frps.ini
2018/05/09 17:18:59 [I] [service.go:83] frps tcp listen on 0.0.0.0:7000
2018/05/09 17:18:59 [I] [service.go:108] http service listen on 0.0.0.0:8080
2018/05/09 17:18:59 [I] [main.go:112] Start frps success
2018/05/09 17:18:59 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues
2018/05/09 17:19:15 [I] [service.go:230] client login info: ip [183.**.**.45:45] version [0.13.0] hostname [] os [linux] arch [amd64]
2018/05/09 17:19:15 [I] [proxy.go:170] [b8a3d006f5e2463b] [ssh] tcp proxy listen port [6000]
2018/05/09 17:19:15 [I] [control.go:318] [b8a3d006f5e2463b] new proxy [ssh] success
2018/05/09 17:19:15 [I] [proxy.go:209] [b8a3d006f5e2463b] [web] http proxy listen for host [112.**.**.2**] location []
2018/05/09 17:19:15 [I] [control.go:318] [b8a3d006f5e2463b] new proxy [web] success
2018/05/09 17:19:21 [I] [proxy.go:76] [b8a3d006f5e2463b] [ssh] get a new work connection: [183.**.**.45:45]
- 启动frpc客户端
# nohup ./ frpc -c ./frpc.ini &
运行结果如下:
root@amu:/home/amu/frp_0.13.0_linux_amd64# ./frpc -c ./frpc.ini
2018/05/09 17:23:31 [I] [control.go:276] [96a57ce5f9251658] login to server success, get run id [96a57ce5f9251658]
2018/05/09 17:23:31 [I] [control.go:411] [96a57ce5f9251658] [web] start proxy success
2018/05/09 17:23:31 [I] [control.go:411] [96a57ce5f9251658] [ssh] start proxy success
访问方式
- ssh访问方式
ssh -p 6000 user@x.x.x.x # x.x.x.x 为frp服务端地址
- web访问方式
http://x.x.x.x:8080/