FRP - 开源免费的在家办公内网穿透工具
Feb 14, 2020 / 5 min read / 351
疫情影响 ,隔离在家了,只能远程办公了 !花生壳限制太多,就想到 用 FRP 自己搭建内网穿透工具,就弄个简单入门教程吧!

很多宽带都没有公网IP(电信貌似申请可能会有,但我们公司没有) 了,如果你想家里或者公司的设备如 NAS、电脑可在外网访问,就只有内网穿透工具可以实现,市面上我知道有 花生壳,但免费的有2条穿透限制,还有流量限制(疫情期间无限制),如果你想更多,这时候你就需要自己搭建一个内网穿透了。

「Frp」是一个跨平台开源免费可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力

你可以粗略理解它是一个中转站,帮你实现 公网 ←→ FRP(服务器) ←→ 内网 的连接,让内网里的设备也可以被公网访问到。你只需一台有公网IP的 VPS 服务器即可愉快地进行内网穿透,来让外网与你家内网建立起连接,实现远程访问!

当然 FRP 还尝试性支持了点对点穿透功能,但限制较多这里不讨论!

准备

服务端VPS安装配置 Frp

安装

FRP 使用 Go 语言开发,可以支持 Windows、Linux、macOS、ARM 等多平台部署。FRP 安装非常容易,因为开源,只需到 Github 发布页 下载对应系统平台的软件包并解压就可用了(最新版本0.31.2)。我的是 linux 就以 linux 系统为例

sudo mkdir -p /etc/frp
cd /etc/frp
sudo wget "https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_linux_amd64.tar.gz"
sudo tar xzvf frp_0.31.2_linux_amd64.tar.gz
sudo mv frp_0.31.2_linux_amd64/* /etc/frp

启动 FRP 服务端

./frps -c ./frps.ini

配置内网的 Frp 客户端

Frp 的客户端程序 frpc (frpc.exe) 与服务器端都在同一个压缩包里, 我们同样下载对应系统版本的软件包。
你可以将 Frp 客户端安装在内网的 Windows 电脑、Linux 设备或者 NAS,甚至部分路由器等设备上。Linux 客户端的安装和启动与服务器端没有太多区别,只是对应运行程序是 frpc 而不是 frps

公司电脑是windows 所以下载软件包回来解压

配置

启动动前,我们需要先修改配置文件。我们以配置“Windows 远程桌面控制”以及“群晖 NAS 管理界面”为例,假设你的 FRP 服务端所在的 VPS 公网 IP 为 1.1.1.1, 而客户端是 Windows 电脑,我们来修改 frpc.ini 配置文件:

[common]
# server_addr 为 FRP 服务端 (VPS 服务器) 的公网 IP
server_addr = 1.1.1.1
server_port = 7000 #开放的端口

[DSM]
type = tcp
local_ip = 192.168.1.100 #群晖 NAS 在局域网中的内网 IP
local_port = 5000
remote_port = 7001

[RDP]
type = tcp
local_ip = 192.168.1.30 #想要访问的电脑在局域网中的内网 IP (如是本机,也可使用 127.0.0.1)
local_port = 3389
remote_port = 7002

[tip type="warning" title="注意"]
每个服务的 remote_port 是远程访问时要用到的端口号,注意这些端口号也要在服务器的防火墙和安全组里放行才能顺利访问的,如上面的 7001、7002。
[/tip]

启动 FRP 客户端

假设你已将 Frp 的客户端解压缩到 D:frp 目录中,那么启动 Frp 客户端的命令就是:

D:\frp\frpc.exe -c D:\frp\frpc.ini

如果linux 启动客户端
打开客户端路径

./frpc -c ./frpc.ini

远程访问

服务器和客户端都已配置启动完毕
  1. 按照上面的配置,我们想要访问群晖 NAS 的界面,只需打开浏览器,在地址栏输入 服务器公网IP:7001 即可访问到群晖后台管理界面。
  2. 而如果需要远程桌面连接到家里的 Windows 电脑,那么打开“微软远程桌面客户端”后,在地址栏里填入 服务器公网IP:7002 即可连接。

这样你就能轻松在家访问公司的电脑和服务了!不止这些,你还可以用 Frp 来转发包括但不限于 ssh、http、https、转发 Unix 域套接字等服务。

web服务穿透

只需修改配置即可

服务器

在公网服务器的frps.ini中添加http服务配置如下:

[common]
bind_port = 7000
vhost_http_port = 6001 #新添加这行 同时放行端口

只需要在之前的配置文件中添加上vhost_http_port = 6001,这个配置意思是让别人在访问我们的服务器6001端口时。frp将http请求转发到内网服务器

客户端

需要在frpc.ini中添加上如下内容:

[web]
type = http
local_ip = 192.168.1.50 #内网 IP (如是本机,也可使用 127.0.0.1 或者这行不要)
local_port = 80
custom_domains = yuye.fun

多个web服务

客户端配置,添加多个[web]即可,注意不能重名,服务端不需要做任何修改,修改ftpc.ini内容如下

[web01]
type = http
local_port = 80
custom_domains = yuye.fun


[web02]
type = http
local_port = 8080
custom_domains = a.yuye.fun # 使用二级域名进行配置

这样 访问 a.yuye.fun:6001 yuye.fun:6001

最后

疫情期间,Frp 带来的便利性是非常大的,特别是在家办公的用户
这只是最基础的教程,Frp 还有很多很多高级功能,Frp 官网上有详细的文档,感兴趣的可以去了解一下。


出现Invalid Host header解决办法

在本地的Vue-cli3项目, 如果出现 Invalid Host header 需要设置一下

vue-cli3中:

// vue.config.js文件中
module.exports = {
  devServer: {
    disableHostCheck: true
  }
}
小小广告 谢谢支持