FRP 工具介绍
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。可能听说过花生壳的读者对此比较熟悉,就是提供一种通道,让位于外网的用户访问位于局域网内的机器提供的服务。
另一个ngrok,1.0版本是开源的,但2.0就不再开源了,所以,我们这里利用的是开源的frp.
官网地址: https://github.com/fatedier/frp
提供了详细的中文文档。
前提
需要拥有一个位于公网的VPS或者ECS,笔者这里用的是腾讯云。
服务器端
下载release版,解压,编辑frps.ini文件:1
2
3
4[common]
server_addr = x.x.x.x #这里写你的公网VPS的IP地址
bind_port = 7000 #这里写服务器提供的端口
vhost_http_port = 7001 #这里是服务器对外提供http服务的端口
然后启动:1
./frps -c frps.ini
服务器显示:
客户端(局域网服务器)
1 | [common] |
然后启动服务:1
./frpc -c ./frpc.ini
客户端输出:
测试
在客户端启动一个简单的web服务:1
python -m SimpleHTTPServer 80
在公网访问:www.yy.com 就能看到你内网的提供的web服务了。
ssh穿透访问
想要用ssh的方式穿透访问到LAN的主机,可以使用如下的命令:1
ssh -oPort=6000 username@x.x.x.x
把frp设置成服务
利用systemd可以轻松地把frp设置成系统服务,在/etc/systemd/system中新建一个frps.service文件1
2
3
4
5
6
7
8
9
10
[Unit]
Description=frps daemon
[Service]
Type=simple
ExecStart=/home/ubuntu/frp/frp_0.17.0_linux_amd64/frps -c /home/ubuntu/frp/frp_0.17.0_linux_amd64/frps.ini
[Install]
WantedBy=multi-user.target
然后启动改服务1
2systemctl daemon-reload
systemctl enable frps
之后就可以利用system start\stop\restart等命令来管理服务了
安全的连接设置
虽然我们现在可以利用frp穿透访问了,但是我们的服务器端口是暴漏在公网上的,任何知道端口的人都可以连接,这显然不是我们希望的,给端口的访问设置一个认证的机制就是十分必要了。认证的方法是在配置文件中加入如下配置:1
2
3[common]
....
token = Mixoo_Frp_1234
这里是0.17版,0.10版本以后的auth_token和privilege_token 经测试均已失效。另外,建议对服务端和客户端的版本保持一致。
dashboard
frp也支持在web中监控流量的访问,配置如下:1
2
3
4dashboard_port = 7500
# dashboard's username and password are both optional,if not set, default is admin.
dashboard_user = xxxx
dashboard_pwd = xxxxx
然后访问你的服务地址就可以了:http://yourwebservice:port/