使用frp实现访问内网中的服务器
一、 准备工作
- 具有公网IP的服务器,这里使用的是阿里云轻量服务器
- 访问目标设备,就是内网中的服务器
- 会简单的Linux基础
二、服务端安装(公网IP端)
- 下载压缩包到服务器
https://github.com/fatedier/frp/releases
- 解压
tar -zxvf frp_0.22.0_linux_amd64.tar.gz
- 给文件夹改名,方便使用
cp -r frp_0.22.0_linux_amd64 frp
- 进入frp
cd frp
- 查看一下文件中有什么
ls -a
- 我们只需了解如下几个文件
- frps
- frps.ini
- frpc
- frpc.ini
- 前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。
因为我们现在正在配置服务端,所以可以删除客户端的两个文件
rm frpc
rm frpc.ini
然后修改frps.ini文件
vim frps.ini
文件格式如下
[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10080
vhost_https_port = 10443
端口可以使用默认值,也可以进行修改,token、user和password可以自行设置
- “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
- “dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
- “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
- “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。
- “vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。
- 编辑完成后保存,按如下命令运行frps即可
./frps -c frps.ini
如果出现如下类似提示则启动成功:
2019/01/12 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2019/01/12 15:22:39 [I] [service.go:172] http service listen on 0.0.0.0:10080
2019/01/12 15:22:39 [I] [service.go:193] https service listen on 0.0.0.0:10443
2019/01/12 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
2019/01/12 15:22:39 [I] [root.go:210] Start frps success
- 服务端后台运行
至此,我们的服务端仅运行在前台,如果Ctrl+C停止或者关闭SSH窗口后,frps均会停止运行,因而我们使用 nohup命令将其运行在后台。输入如下命令开启:
nohup ./frps -c frps.ini &
如果出现如下提示则表示正常运行
nohup: ignoring input and appending output to 'nohup.out'
此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs命令查看后台运行的程序,在结果中我们可以看到frps正在后台正常运行
[1]+ Running nohup ./frps -c frps.ini &
此时访问 x.x.x.x:7500 依然可以打开仪表板界面,至此,服务端即设置完成,你可以关闭SSH窗口了。
客户端配置
frp的客户端就是我们想要访问的目的主机,我这里是一台Linux操作系统的而服务器,其他操作系统配置方法类似。这里下载和解压frp的方法与上面的相同,就不再赘述。
- 修改frpc.ini
[common]
server_addr = 服务器ip(具有公网IP的服务器)
token = 12345678
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 #当前设备开放的远程连接端口,默认为22
remote_port = 33022
use_encryption = true
use_compression = false
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3385
- “server_addr”为服务端IP地址,填入即可。
- “server_port”为服务器端口,填入你设置的端口号即可,如果未改变就是7000
- “token”是你在服务器上设置的连接口令,原样填入即可。
上面frpc.ini的ssh、mysql字段都是自己定义的规则,自定义端口对应时格式如下。
- “[xxx]”表示一个规则名称,自己定义,便于查询即可。
- “type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
- “local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
- “remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。
- 启动frpc
./frpc -c frpc.ini
- 后台启动
nohup ./frpc -c frpc.ini &