FRP内网穿透
Fast Reverse Proxy, 使用Golang开发的高性能的反向代理应用.
项目地址
https://github.com/fatedier/frp
作用
- 利用处于内网或防火墙后的机器, 对外网环境提供 HTTP 或 HTTPS 服务。
- 对于 HTTP, HTTPS 服务支持基于域名的虚拟主机, 支持自定义域名绑定, 使多个域名可以共用一个 80 端口。
- 利用处于内网或防火墙后的机器, 对外网环境提供 TCP 和 UDP 服务, 例如在家里通过 SSH 访问处于公司内网环境内的主机。
安装
支持多个平台部署. windows直接下载安装包解压即可, 下面是linux安装
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
mv frp_0.37.1_linux_amd64 frp
ssh
服务端配置
FRP 默认给出两个服务端配置文件, 一个是简版的 frps.ini, 另一个是完整版本 frps_full.ini。
$ vim frps.ini
[common]
bind_port = 7000
# 默认配置中监听的是 7000 端口, 可根据自己实际情况修改.
# 启动 FRP 服务端
root@vultr:/usr/local/frp# ./frps -c ./frps.ini
2020/02/19 17:01:22 [I] [service.go:152] frps tcp listen on 0.0.0.0:7000
2020/02/19 17:01:22 [I] [root.go:205] start frps success
通过上面简单的两步就可以成功启动一个监听在 7000 端口的 FRP 服务端。
客户端配置
和 FRP 服务端类似, FRP 默认也给出两个客户端配置文件, 一个是简版的 frpc.ini, 另一个是完整版本 frpc_full.ini
$ code frpc.ini
[common]
# server_addr 为 FRP 服务端的公网 IP
server_addr = 4.3.2.1
# server_port 为 FRP 服务端监听的端口
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
# 启动 FRP 客户端
D:\Tools\frp_0.31.2_windows_amd64>frpc.exe
2020/02/19 17:06:22 [I] [service.go:250] [69dc66a147a83abd] login to server success, get run id [69dc66a147a83abd], server udp port [0]
2020/02/19 17:06:22 [I] [proxy_manager.go:144] [69dc66a147a83abd] proxy added: [ssh]
2020/02/19 17:06:23 [I] [control.go:164] [69dc66a147a83abd] [ssh] start proxy success
访问
# 通过 ssh 访问内网机器, 假设用户名为 test
ssh -p 6000 [email protected]
web服务
有时想要让其他人通过域名访问或者测试在本地搭建的 web 服务, 但是由于本地机器没有公网 IP, 无法将域名解析到本地的机器, 通过 frp 就可以实现这一功能, 以下示例为 http 服务, https 服务配置方法相同, vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。
服务端
# 修改 frps.ini 文件, 设置 http 访问端口为 8080:
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
# 启动
./frps -c ./frps.ini
客户端
# 修改 frpc.ini 文件, 假设 frps 所在的服务器的 IP 为 x.x.x.x, local_port 为本地机器上 web 服务对应的端口, 绑定自定义域名 www.yourdomain.com
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
# 启动
./frpc -c ./frpc.ini
# 将 www.yourdomain.com 的域名 A 记录解析到 IP x.x.x.x, 如果服务器已经有对应的域名, 也可以将 CNAME 记录解析到服务器原先的域名。
# 通过浏览器访问 http://www.yourdomain.com:8080 即可访问到处于内网机器上的 web 服务。
远程桌面
服务端配置。
[common]
bind_port = 7000
token = xxxx
dashboard_port = 4008
dashboard_user = lgq
dashboard_pwd = lgq51233
nohup ./frps -c frps.ini >/dev/null 2>&1 &
客户端配置。local_port指向远程桌面服务端口,windows下默认是3389。
[common]
server_addr = xxxxx
server_port = 7000
token = xxxx
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 5800
停止和启动frp
# linux后台运行
nohup ./frps -c frps.ini >/dev/null 2>&1 &
# windows下后台运行
start /min %FRP_HOME%/frpc.exe -c %FRP_HOME%/conf/frpc.ini
# linux停止
ps -aux | grep frp
kill -9 [pid]
# windows停止
ps | findstr frp
# 12 20.43 14.98 1.34 716 1 frpc
kill [pid]