frp

开发中经常用到内网穿透,以前用 ngrok 现在改用 frp 了。

如果你愿意看 中文文档 那就没本文什么事了。直接关闭就行。

作用

  • 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
  • 对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
  • 利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

安装

可能需要准备的:

  1. 一台有公网IP的服务器(下文称外网主机)
  2. 一台需要实现内网穿透的机器(下文称内网主机)
  3. 一个域名(如果只是建立SSH反向代理则不需要域名)

服务端安装

  1. 首先 ssh 登录到外网主机执行 arch 看一下硬件结构类型,我的是 x86_64。
  2. 在 https://github.com/fatedier/frp/releases 页面,找到最新的稳定版本,目前是 frp_0.29.0_linux_amd64.tar.gz
  3. 外网主机上执行如下命令
wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
tar -xzvf frp_0.29.0_linux_amd64.tar.gz
mv frp_0.29.0_linux_amd64 frp # 只是为了方便后面操作,把目录改个名
cd frp
chmod +x frps

接着在服务端做一下配置,frps.ini 服务端配置:

[common]
bind_port = 7000
vhost_http_port = 12306

[common] 部分是必须有的配置,其中 bind_port 是自己设定的 frp 服务端端口,vhost_http_port 是自己设定的 http 访问端口。

保存上面的配置后,使用以下指令启动frp服务端:

nohup ./frps -c ./frps.ini &

客户端安装

安装和上面是一样的,frpc.ini 客户端配置

[common]
server_addr = x.x.x.x # 填写公网服务器IP地址
server_port = 7000

[web]
type = http
local_port = 8080 # 内网web服务的端口号
custom_domains = x.x.x.x # 所绑定的公网服务器域名,一级、二级域名都可以,这里填写公网服务器IP地址

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

客户端我不想放在后台运行了,所以执行:

./frpc -c ./frpc.ini

使用

我在本地内网主机启动了一个 golang 的 server,绑定的服务端口是 8080,现在我直接访问外网主机的 IP + 端口号 12306,所有请求就会转发到我内网主机上了。

另外注意一下,如果阿里云那边开了防火墙,记得把开放的端口增加一下。不然 frp 连不上。

参考

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @Victor Oct 9, 2019

奉献爱心