frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
详细说明 https://github.com/fatedier/frp/blob/master/README_zh.md
下载地址 https://github.com/fatedier/frp/releases
1.frp的作用
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。对于 http, https 服务支持基于域名的虚拟主机,
支持自定义域名绑定,使多个域名 可以共用一个 80 端口。利用处于内网或防火墙后的机器,对外网环境提供 tcp 和udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机
2.frp支持的平台
darwinlinux 386 amd64armmips mips64 mips64le mipslewindows 386 amd64
3.常用场景
C 是内部网络它的 80 端口开放 WEB 服务,B 与 C 之间有防火墙过滤,现在想把 C 的 80 端口映射到公网 B 的 8000 端口上 那么 A 访问公网的 8000 的端口就能访问 C 的 80 端口的 WEB 服务,同理如果想访问内网 C 的 22 端口,就把 22 端口映射 到公网某个端口上,那么 A 就能访问 B 的某个端口 就能访问 C 的 SSH 服务,
因为这种方式是从 C 内部发起请求的,所以很好的穿透防火墙。
https://github.com/fatedier/frp/releases/tag/v0.46.1
4.测试环境
B公网vps 系统ubuntu
A与B分别都是内网的
5.frp分别服务端和客户端
frps 服务端为 linux 负责处理请求,转发流量
frpc 客户端 linux 和 windows 都支持 负责把本地的流量连到服务器,让服务 器读取&写入
在vps上修改规则
6.frps配置服务器端
在vps上下载软件配置服务端
wget https://github.com/fatedier/frp/releases/download/v0.46.1/frp_0.46.1_linux_amd64.tar.gz
配置服务端文件 frps.ini
[common]
bind_port = 7000
token = fla_erro2023
bind_port 客户端连接的端口
token 密码 一定设置
运行./frps -c frps.ini 运行正常即可
设置开机启动
vi /lib/systemd/system/frps.service
[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的 frps 的实际安装目录)
ExecStart=/root/frp/frps -c /root/frp/frps.ini [Install]
WantedBy=multi-user.target
#启动frpc
systemctl daemon-reload
systemctl start frps
#设置为开机启动 systemctl enable frps
以上服务端配置完毕,frps 启动后将监听监听 7000 端口
用 ps aux 查看进程信息 和 netstat antl端口
7.frpc配置客户端
下载对应系统版本的 frpc 配置客户端信息
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 7000
token = fla_erro2023
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8000
说明
server_addr = xxx.xxx.xxx.xxx #服务器的 IP
server_port = 7000 #服务器的端口
token = fla_erro2023 #连接的密码
[web] #服务器名
type = tcp #连接协议类型
local_ip = 127.0.0.1 #访问的 ip 可以是内网任何一个
ip local_port = 80 #本地端口
remote_port = 8000 #远程服务器的 ip
启动 frpc.exe -c frpc.ini 通信正常后
用浏览器访问
整个流程就是客户端与服务器端建立通信后,当 A 访问 B 的的 8000 端口后,B 收到请求对流量进行转发,那么 A 就能访问到 C