内网穿透技术FRP实战
1 概念
1.1 官方文档
1.2 frp 是什么?
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
1.3 为什么使用 frp?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
1.4 原理
frp 主要由客户端(frpc)和服务端(frps)组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
2 服务端安装配置
2.1 下载 FRP 安装包
在服务器上安装配置的前提条件是该服务器需要拥有一个公网IP地址。在 Github Release 页面下载最新的 Linux 版本:
通过 SSH 登录到拥有公网 IP 地址的服务器上,我这里使用的是一台阿里云 ECS。
mkdir -p /opt/frp-server
cd /opt/frp-server
wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_amd64.tar.gz
tar zxf frp_0.35.1_linux_amd64.tar.gz
mv frp_0.35.1_linux_amd64 frp
cd frp
复制代码
2.2 配置
vim frps.ini
[common]
bind_port = 7000
token = frp2021
复制代码
这里的 token 为你的明文密码,请自定义。
设置开机自启动:
cp systemd/frps.service /usr/lib/systemd/system/
vim /usr/lib/systemd/system/frps.service
复制代码
修改启动路径:
ExecStart=/opt/frp-server/frp/frps -c /opt/frp-server/frp/frps.ini
复制代码
systemctl daemon-reload
systemctl enable frps
复制代码
启动服务:
systemctl start frps
ps -ef | grep frps
nobody 421370 1 1 12:27 ? 00:00:00 /opt/frp-server/frp/frps -c /opt/frp-server/frp/frps.ini
复制代码
在阿里云控制的安全组配置中将7000端口开放:
这里还要说明下6022端口为即将开放的内网服务的远程端口,为了方便,在开放安全组端口的时候可以开放一组端口,例如6000-7000。
3 客户端配置
3.1 安装 CentOS7 虚拟机
在需要开放服务的同一网段内安装一台虚拟机用来搭建 FRP 的客户端,或者使用一台很低配置的小服务器也可,推荐安装 CentOS7.6。
3.2 安装配置
同理下载上述服务器配置中的url:
mkdir -p /opt/frp-client
cd /opt/frp-client
wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_amd64.tar.gz
tar zxf frp_0.35.1_linux_amd64.tar.gz
mv frp_0.35.1_linux_amd64 frp
cd frp
复制代码
vim frpc.ini
[common]
server_addr = 114.114.114.114
server_port = 7000
token = frp2021
[ssh]
type = tcp
local_ip = 192.168.0.102
local_port = 22
remote_port = 6022
复制代码
注意事项:
- server_addr后面配置的是服务器端公网IP或者域名(假设你解析了域名)
- token 需要和服务器端配置的一样
- 下面[ssh]配置段就是需要穿透的内网服务,这里以 FRP 这台服务器的22端口为例
设置开机自启动:
cp systemd/frpc.service /usr/lib/systemd/system/
vim /usr/lib/systemd/system/frpc.service
复制代码
修改启动路径:
ExecStart=/opt/frp-client/frp/frpc -c /opt/frp-client/frp/frpc.ini
ExecReload=/opt/frp-client/frp/frpc reload -c /opt/frp-client/frp/frpc.ini
复制代码
systemctl daemon-reload
systemctl enable frpc
复制代码
启动服务:
systemctl start frpc
ps -ef | grep frpc
nobody 1650 1 0 23:49 ? 00:00:00 /opt/frp-client/frp/frpc -c /opt/frp-client/frp/frpc.ini
复制代码
4 测试
接下来使用手机连接4/5G网络来通过那个公网IP地址的6022端口连接到内网服务器。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END