由于IPv4地址的越来越紧张,国内运营商基本都不再给家庭宽带用户提供公网IP地址,这让一些监控、NAS等一些有需要链接到公网的家庭应用难以突破家里这个小局域网。由于架设NAS需要,这几天研究了下内网穿透,采用Frp这款国人开发的开源软件,非常好用。另外还有一款Ngrok没有尝试。以下配置方法经我个人实践验证,实现了web和远程桌面应用的穿透,记录在这里既为了分享给有需要的网友,也为了资料留存。

首先需要下载Frp这个软件

Frp的下载地址:https://github.com/fatedier/frp/releases
Frp的官方中文文档:https://github.com/fatedier/frp/blob/master/README_zh.md
截至本文撰写时间,最新版本是V0.14.0,本文配置也是基于这个版本,其它版本未验证。
解压出来frps(windows为frps.exe)和frps.ini为服务端的程序和配置文件,frpc(windows为frpc.exe)和frpc.ini为客户端的程序和配置文件。我外网机器用的linux,内网机器是windows,其他系统配置上没有区别。

然后进行软件的配置

服务端frps.ini

[common]
bind_port = 7080 #客户端和服务端之间通信的端口
vhost_http_port = 8080 #对外网提供web访问的端口

客户端frpc.ini

[common]
server_addr = X.X.X.X  #服务端IP
server_port = 7080  #与服务端bind_port一致

[web]
type = http
local_port = 8800 #内网机器web服务端口
custom_domains = xxx.com #提供外网访问的域名

[RemoteDesktop]
type = tcp
local_port = 3389  #内网机器远程桌面端口
remote_port = 6000  #内网机器提供外网远程桌面链接的端口

最后启动软件

配置好后,服务端上传到外网服务器,客户端上传到家里的内网主机。采用命令行启动,格式为:程序 -c 配置文件。

./frps -c ./frps.ini #服务端启动(linux)
frpc.exe -c frpc.ini #客户端启动(windows)

服务端看到如下启动信息,即启动成功:

2017/12/12 22:11:59 [I] [service.go:87] frps tcp listen on 0.0.0.0:7080
2017/12/12 22:11:59 [I] [service.go:112] http service listen on 0.0.0.0:8080
2017/12/12 22:11:59 [I] [main.go:112] Start frps success
2017/12/12 22:11:59 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues

客户端看到如下启动信息,即启动成功:

2017/12/12 22:19:02 [I] [control.go:277] [xxxxxxxxxxxxxxxx] login to server success, get run id [xxxxxxxxxxxxxxxx], server udp port [0]
2017/12/12 22:19:02 [I] [control.go:412] [xxxxxxxxxxxxxxxx] [web] start proxy success
2017/12/12 22:19:02 [I] [control.go:412] [xxxxxxxxxxxxxxxx] [RemoteDesktop] start proxy success

如果内网程序启动时链接服务端失败,可能是由于服务端端口被防火墙屏蔽,可以查看防火墙设置。