雨滴科技yudear.com

在小米路由器上搭建自己专属的FRP内网穿透反向代理服务器

如何用网上一些免费的FRP服务器,实现内网的设备反向穿透,在外网(公网)访问的教程,在网上挺多的。但这些教程大都是教如何借助网上第三方收费或免费的FRP服务器来搭建FRP反向代理服务的。

可是天下毕竟没有永远免费的午餐:免费的FRP服务器能用多久?带宽够不够?以后是不是要收费….? 想想这些问题,如果能拥有自己专用而且永远“免费”的FRP服务器,何乐而不为?

如果你家里上网的宽带有公网IP地址,无论是IPV4还是IPV6地址,那在路由器上部署一个自己专用的FRP服务器,其实也不难。

先介绍下我自己的为何有搭建FRP反向代理服务器的需求,以及我的网络环境。

需求背景:

之所以有搭建FRP内网穿透反向代理服务器的需求,是因为家里此前装了一台群晖的NAS服务器。平时家里各成员的PC机以及笔记本电脑、手机、PAD等移动终端的的数据,大部分都通过WebDAV、DS Photo等方式备份回这台NAS服务器。由于这里面的数据挺重要(特别是有挺多家里领导珍爱的孩子们的各种照片),而且这玩意用着也挺好用,就不禁会担心,如果这台NAS坏了,或者家里的网络服务歇菜了,岂不是要糟糕?于是就想在位于异地的爷爷家里也放一台群晖的NAS(因为穷,这个备份机只好败了一台黑群:( ),两台NAS服务器之间,做一个异地灾备。

但爷爷家在广东的一个五线小县城,虽然用的也是电信的宽带,那里的中国电信服务就更糟糕,接咨询电话的服务员居然不懂什么叫公网IP(也可能是装不懂),要求给爷爷家里的宽带分配公网IP也就无从谈起了!而且当地也没有能提供公网IPV6地址的其它宽带运营商可选(在这里羡慕下河南等地的网友,听说几年前就用上了带IPV6公网IP的宽带!号称发达地区的广东,包括号称宇宙科创中心的深圳却至今也没有)。剩下能想到的较可行的解决方案,就是做FRP内网穿透来远程访问将要安装在爷爷家的NAS备份服务器了。

那做FRP,就涉及要用到FRP的服务器。如上文所讲,不想吃免费午餐,就得自己动手做一个FRP服务器。

网络环境:

1、家里用的是电信的600M光纤宽带,有一个动态的IPV4公网地址;

2、接入宽带用的是小米路由器HD,已经ROOT;(不懂怎么ROOT的,请自行问度娘)
(小米路由器HD)

有需求,恰好现在家里用的电信宽带,又分配有动态公网IP。如果能在接入宽带的小米路由器HD上直接安装一个FRP服务器,不就有了自己专用,且免费的FRP服务器吗?

马上就开干! (前提,家的小米路由器是Root过的,至于如果root,网上有教程,也可以自行请教度娘)

第一步:先查清楚小米路由器的指令集:

putty连到小米路由器(不知道putty是什么的请自行网上学习),执行以下命令,查看路由器的指令集。

cat /rpoc/cpuinfo

如下图,看到我这台小米路由器HD是ARMv7版的指令集,同时也就表明这台路由器用的是一颗32位的arm指令集处理器(ARM V7版本不支持64位处理器)。

第二步:下载相应的FRP服务器版本并安装:

到github这个地址下载所需的FRP服务器版本:

https://github.com/fatedier/frp/releasesgithub.com/fatedier/frp/releases

如下图,显然,我需要的是frp0.34.3_linux_arm.tar.gz这个版本

在选定好的,计划安装FRP服务器的目录,把安装包拉取回来(本来想直接贴个wget命令的,但知乎总是把粘贴的所有URL都直接搞成链接….我也不知道怎么把它改回文本,放弃了):

然后解压安装包: tar -zxvf frp_0.34.3_linux_arm.tar.gz

在解压的文件里,找到frps.ini (注意别看错,同目录下还有个frpc.ini文件,那是给客户端用的,不用改),参考下面的例子按需要修改frps.ini文件的内容。源文件只有两行,是最简单的配置,我根据自己的需要给改下如下这样:

[common] bind_port = 7700 token = write-anything dashboard_port = 7701 dashboard_user = admin dashboard_pwd = adminpwd vhost_http_port = 7780 vhost_https_port = 7781 vhost_http_webdav = 7800 vhost_https_webdav = 7801 vhost_nas_ssh = 7802

略为解读下这里的一些参数:

1、bind_port:这是用于FRP客户端和这台FRP服务端进行连接的端口,这个端口号我们之后在配置FRP客户端时要用到。

2、dashboard_port:这是FRP服务web管理端的访问端口。在FRP服务器配置完成且服务启动后,可以通过浏览器访问 x.x.x.x:7701 (其中x.x.x.x为小米路由器的公网IP或域名)查看frp服务器的运行信息。

3、token:表示用于客户端和服务端连接的口令(暗号,类似社会人见面,你来一句”天王盖地虎“,我应该回一句”宝塔镇河妖的“),请自行设置一个自己喜欢的字符串,配置FRP客户端时要用到。

4、dashboard_user 和 dashboard_pwd:表示打开FRP服务器web管理端时页面登录的用户名和密码,自行设置即可。

5、vhost_http_port、vhost_https_port、vhost_http_webdav…..这些端口,是给反向代理的NAS服务器(或者要使用FRP反向代理的机器)应用预留的端口,根据自己的需求配置即可。注意,如果你在小米路由器安装了防火墙,记得要先去防火墙开放相关端口的访问。

第三步:启动FRP服务器:

安装配置好FRP服务器后,当然就是启动服务器了!

在SSH终端命令行,先键入如下命令测试启动FRP服务器:

./frps -c frps.ini

如果看到如下图的提示,就表示FRP服务器启动成功!

这时候,在本机的浏览器上键入地址: http://XXX:7701 (其中XXX代表小米路由器的公网IP或者动态域名,端口对应INI配置文件里设的dashboard_port),就会显示如下图所示的FRP服务器管理仪表界面,这表示FRP服务器运行正常。

(FRP服务器运行监控界面)

第四步:配置路由器开机自动启动FRP服务器:

上文在SSH终端通过命令行启动FRP服务器的方式,如果退出SSH终端,FRP服务也会跟着关闭退出,这显然不符合我们希望FRP服务一直驻留运行的需求。

另外,为了保证小米路由器有持续稳定的性能,我设置了令小米路由器每天凌晨自动重启。所以在每次路由器重启时,自动加载FRP服务,才是最符合我需求的。

切换到路由器的 /etc 目录,目录里有一个名为rc.local的文件,用vi命令 (或者用WinSCP拉回本地改好再上传),在文件里的exit 0那一行前,增加如下一行:

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

(这里的FRP服务安装路径,请自行修改为你的真实安装路径)

配置后好,重启路由器,应该就会自动加载FRP服务器的相关服务了!

第五步:安装配置FRP客户端

如果如上面介绍的,ROOT自己的小米路由器,并在ROOT后的小米路由器上安装FRP服务器的事你都能搞定,那安装配置FRP客户端对您来讲就应该是很简单的事了!网上相关的教程也非常多,这里放一个我把自己的办公的PC(装的是Win10的系统)远程桌面服务反向穿透,在外网可以访问的例子。

先去github下载frp的客户端:

https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_windows_386.zip注意win10的防火墙会把这个安装包认为是有害程序,需要先关闭防火墙或者在防火墙告警时,把这个程序手动标识会无害。

然后把压缩包解压到一个安装目录,我这里选的是D:\Apply\Frp 目录。解压后,修改fprc.ini文件,我改成以下这样:

[common] server_addr = 【我小米路由器的域名】 server_port = 7700 token = 【我的token】 protocol = tcp [RemoteDesktop] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 3389 use_encryption = true use_compression = false

以上面这个配置文件为例,远程桌面的端口3389,要先在FRP服务端配置进去。

配置好后,用以下命令,把FRP客户端注册为Windows的自启动服务:

sc create FRPClient binpath= “D:\Apply\frp\frpc.exe -c D:\Apply\frp\frpc.ini” type= share start= auto displayname= “FRP for Windows Remotedesktop service”

如果PC机的远程桌面服务已经启动(通过我的电脑->属性->远程设置 菜单检查是否已启动),那就可以在任何能接入互联网的地方,通过另一台计算机(例如你的笔记本电脑)远程访问并使用放在办公室里那台PC机的远程桌面服务了。

再推荐一篇用FRP访问群晖NAS服务的教程:

群晖 FastConnect:自定义域名+内外网访问,比QC更顺滑_NAS存储_什么值得买post.smzdm.com/p/apzerk42/

高级玩法,配置自己的顶级域名

也可以花点小钱,买一个顶级域名,搞成自己各类联网设备的统一入口,或者专用的网站。

首先,去阿里巴巴的万网(域名注册_虚拟主机_云服务器_企业邮箱-万网-阿里云旗下品牌),或者花生壳(免费域名注册申请|域名价格查询|域名转入|二手域名|SSL证书-Oray贝锐科技域名注册官网)买一个自己喜欢的一级域名。我个人推荐去花生壳,不仅比万网便宜一半,而且还送了域名解析服务,土豪喜欢找马爸爸也行。

买了域名后,解析到自家的路由器上。注意@和*两种解析都得添加。下图是我的解析配置:

然后就参照上文给的群晖FastConnect那篇贴子,配置服务端frps.ini以及各FRP客户端frpc.ini的参数,把自己家里、办公室、异地的各种联网设备,都整合到一起来管理、使用…..。

下面是我的FRP服务端frps.ini配置文件内容的样例:

[common] bind_port = 7700 token = nasbackup dashboard_port = 7701 dashboard_user = admin dashboard_pwd = ad#m^i&n? max_pool_count = 5 #我的一级域名 subdomain_host = 请改为自己的一级域名,例如 baidudu.net #各类支持HTTP服务设备的共用端口,可在客户端配置子域名分别访问 vhost_http_port = 8090 vhost_https_port = 443 #证券数据库服务器的SSH服务专用端口 vhost_dba_ssh = 8022 #办公PC的远程桌面服务专用端口 vhost_RD = 3389 #位于SZ市的NAS服务器WebDav、SSH服务专用端口 vhost_sznas_webdav = 109000 vhost_sznas_ssh = 109001 #位于XY市的NAS服务器WebDav、SSH服务专用端口 vhost_xynas_webdav = 109002 vhost_xynas_ssh = 109003 #FRP服务器日志相关参数 log_file = ./frps.log log_level = info log_max_days = 9

以下是在位于其中一个地方的家里局域网,部署在一台群晖服务器上的一个FRP客户端的配置文件frpc.ini的内容实例:

[common] server_addr = 请改为自己的一级域名,例如 baidudu.net server_port = 7700 token = myhomefrp # FRP客户端日志文件参数 log_file = ./frpc.log log_level = info log_max_days = 3 #下面开始配置局域网内各设备需要从外网访问的服务参数 [dbsvr_web] type = http local_ip = 192.168.31.15 local_port = 5000 #通过subdomain配置可以在外网用http://dba.我的域名.net:8090 地址访问数据库服务器 #的web管理端 subdomain = dba [miRouter_web] type = http local_ip = 192.168.31.1 local_port = 80 #可以在外网用http://router.我的域名.net:8090 地址访问小米路由器web管理端 subdomain = router [HuaWei_ADC] type = https local_ip = 192.168.31.17 local_port = 443 #可以在外网用https://hwadc.我的域名.net:443 地址访问家里的华为AD9430DN无线 #网络管理器的web管理端 subdomain = hwadc #以下是配置数据库服务器的SSH服务 [dbsver_ssh] type = tcp local_ip = 192.168.31.16 local_port = 22 use_encryption = false use_compression = true remote_port = 8022 health_check_type = tcp health_check_timeout_s = 3 health_check_max_failed = 3 # every 1000 seconds will do a health check health_check_interval_s = 1000

配置完成后,从服务器的管理仪表板,看下如下图的运行情况:

大致就是这样吧,祝折腾愉快:)

发表回复