- 适用对象
想要通过frp实现内网服务被外网访问的人。
- 关键词描述
内网:内网指的是局域网,几台或者几十台电脑之间互访,也叫私网。
外网:指的是我们上的Internet网络,也叫公网。
- 需要具备的知识基础和条件
1:外网服务器一台(还是需要有个公网ip的,一般推荐云服务器,对应云服务器会分配一个公网ip)
2:内网服务器一台
3:frp包以及基础的配置知识
- 主体流程图如下
我们可以看出,公网用户想要访问到我们内网的服务,还是需要有一个公网的服务器(此处用的云服务器)做转发,才能实现的。而我们frp技术就是链接公网服务器和内网服务器的。这样,用户访问了公网服务器(云服务器),然后公网把对应请求处理转发给内网,内网服务器回复给了公网服务器,然后公网服务器转回给用户。
- frp服务实现流程
gitHub下载地址:点击此处下载:https://github.com/fatedier/frp/releases
一定要注意:ubuntu linux 下载的是amd 不是 arm 后缀
- 服务器端部署
- 将Linux版frp上传至服务器,解压文件
tar -zxvf frp_0.46.1_linux_amd64.tar.gz
- 进入解压后frp目录,编辑frps.ini配置文件,创建日志目录
注意这次操作的是frps 后缀是s
cd frp_0.46.1_linux_amd64
vim frps.init
# 这个需要和下面的日志输出路径对应
mkdir -p /opt/frp/log/
做如下配置并且保存:
# 绑定服务端端口,给客户端连接的通道,都是7000 等熟悉了自己再调整
bind_port = 7000
# 设置客户端token,对应的客户端,也需要配置,有一定的安全保证,加上
token = !QAZ@WSX#EDC
# 日志 -- 这个可以查看转发和客户端是否链接成功,是排除错误的关键。可以用cat命令监听
log_file = /opt/frp/log/frps.log
log_level = info
# 日志最多保存天数
log_max_days = 3
保存:
按住esc后 输入 qw: 回车保存
- 启动服务端
在当前目录执行: nohup ./frps -c ./frps.init &
- 核对服务是否成功启动
cat /opt/frp/log/frps.log
能看到 7000 successful 就可以了,7002是我配置的别的端口
- 客户端部署
下载对应平台的frp包,我的客户端也是ubuntu,所以我用之前下号包frp_0.46.1_linux_amd64.tar.gz 就可以了
- 将Linux版frp上传至服务器,解压文件
tar -zxvf frp_0.46.1_linux_amd64.tar.gz
- 进入解压后frp目录,编辑frpc.ini配置文件,创建日志目录
注意这次操作的是frpc 后缀是c
cd frp_0.46.1_linux_amd64
vim frpc.init
编辑frpc.ini 初始化文件
[common]
# 把 **.**.**.** 换成你服务器的ip
server_addr = **.**.**.**
# 这个和服务器common标签下的保持一致
server_port = 7000
# 和服务器的token保持一致
token = !QAZ@WSX#EDC
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
# 自定义端口,定义后,frps 服务端会自动启动且监听对应端口
[ubuntu-web]
# 有些地方在用https,https只是针对https有针对扩展,tcp模式同样可以进行 https 和 http 转发
type = tcp
# 如果是你本地其他电脑的服务,可以换成192.168.31.11等本地地址,若果服务和frpc在同一电脑地址下,用127.0.0.1
local_ip = 127.0.0.1
local_port = 443
remote_port = 8082
- 启动服务端
注意这次操作的是frpc 后缀是c
在当前目录执行: nohup ./frpc -c ./frpc.init &
- 核对服务是否成功启动
注意:现在要去 服务器端 看握手,现在换到服务器frps 所在的后台执行命令
cat /opt/frp/log/frps.log
应该可以看到在 服务器端 激活了 客户端 配置的端口 8082
- 正常情况下所有操作都结束了,可以愉快访问服务器了,但是通常结果是不正常,所以我给大家列一下常见问题
通过telnet **.**.**.** 端口号 确认端口可用,如果不可用看看是不是云服务器安全组没有放开对应端口
去服务器log下核对当前异常问题,核对服务器init 客户端init文件是不是有错别字
postman如果请求失败,用浏览器试一试是否可以。(我是开始postman一致失败,浏览器可以,可能配置问题)
- 小建议
成功运行了后,你再考虑什么https 配置,nginx 转发之类的操作,不然只会更懵逼。
1:为什么有了公网服务器,还需要这么麻烦,用内网部署,再公网转发?
主要是云服务器很贵,其实我们可以用本地的高配置,加上公网的转发,把自己的本地高配服务通过低配云服务器暴露在公网,达到成本最小化的目的。
例如:
本地常规电脑配置通常达到:16G内存 + 1T硬盘
云服务器购买最低配置:2G内存+40G硬盘
2:服务可控,例如花生壳之类的,总体价格会贵近百块,而且我们可以针对购买的云服务器有更多的操作(云服务买新客优惠的买一年)。
其他的好处欢迎留言补充。