OpenWRT配置FRPC实现公网访问

2020-02-23 作者:

This post talks about running frpc (Github), the client of my favorite reverse proxy toolset, on an OpenWrt powered router, to expose one or more specific port of an local/intranet ip address onto public access.

在目前主流网络运营商大多不提供公网IP的大环境下,FRP套装搭配一台低配云主机,是最普遍也相对稳定的ddns替代方案。

长期以来,笔者使用的都是x64(amd64 on Centos/Ubuntu)和arm(树莓派)版本的frp release,启动配置上都是走的linux systemd。今天算另辟蹊径,要介绍一下在一台EX6200v2刷机的OpenWRT上跑frpc,接通阿里云的frps,来实现公网访问内网。其中frps也即服务端的配置,网上海量教程,张大妈上每个博主都截图讲一遍,本文不再赘述。

 

在openwrt上运行frpc,要用到的资源来自于这两个Github工程,openwrt-frpluci-app-frpc

第一步,先搞清路由器的CPU架构。

本文用到的是NETGEAR EX6200v2,经查板载高通IPQ4018,4核Cortex A7 Neon。如果是用Intel处理器的软路由,那就更好办,直接省去查cpu的这一步。

当然,从ssh登进路由器确认,也是一种办法。

第二步,查看路由器的存储空间是否够安装FRPC,然后去github release下载相应的ipk安装包。

从返回结果看,可用空间还有7.3M,frpc安装包尺寸3.6M,还是可以安装。前提是ipk要放在临时分区也就是/tmp(猜测这货是内存虚拟硬盘吧)中。

在路由器上使用wget下载,遇到一点小问题,需要安装SSL相关的包,否则无法走https下载。

为了节省路由器上有限的8M空间,就不装SSL包了。改用其他机器下载后,走scp传到路由器上。

【注】除了frpc客户端外,还要安装一个luci-app-frpc(尺寸很小),这样可以用web页面方便的配置和管理frpc。

在OpenWRT上走ssh运行opkg安装两个包。

 

第三步,登录管理页面,配置fprc。

进入openwrt管理页面后,顶栏菜单Service中,多了frpc,打开后是这样。

选择rule,把你需要的转发规则,使用edit和add一条条建出来。要把路由自己的22打到云端的35902就是如图这样一条规则。

假设另有本地机器192.168.10.100的80端口要转发到云端,那么Name=web(随便起,别重复),Type=TCP,Local IP=192.168.10.100,Local Port=80,Remote Port=10080(云端同样用80的话也可,FRPS要做相应设置)。

然后把frpc要访问的服务端(frps)设置搞起来。

Alias名字随便起,别重复。Server Addr是现有FRPS的访问地址,IP或域名都可以。

【注】这里的example.com只是示例,实际上要使用您自己已经设置好FRPS的域名或者server IP。

Server Port不是rule里的代理端口,而是frpc和frps之间通信的端口,默认7000,frps配置改过的话,跟着改。

Token也是frps那边的配置,这里要跟服务器端配置一致,否则登不上。TCP mux也是如此。

最后enable一下,保存应用,frpc就跑起来了。

检查一下frpc的运行情况。

如下,可以看到ps时,fprc进程已经运行。而netstat返回我们与frps服务器7000端口正常通信。

 

最后一步,检验成果的时候到了,测试转发连通性。

验证转发成功。

感兴趣的话,可以登进云主机,运行netstat -anlp,看客户端(frpc on OpenWRT)是如何通过运营商的出口IP到达云主机上frps侦听的7000端口,完成转发,将客户端tcp 22最终暴露到云端(frps)的35902端口。

 

潜在问题

在路由上执行top查看资源消耗

可以发现openwrt大部分进程的VSZ(虚拟内存)占用量只有1~3M,而frpc居然有786M之多。当然并非已经消耗,更像是预申请。但这个数字之大,还是令人咂舌,已经达到了物理内存的3倍之多。

虽然对于物理内存,整个路由器所有进程目前只消耗了60M,空闲还有190M。但总觉得如果frpc目前主要为不缺资源的计算机和服务器设计在先,对于路由器这种嵌入式设备看起来没有针对性优化,假定某版本引入bug出现内存泄漏,那么持续吃掉内存最后crash掉整个路由器,并非不可能。

所幸原作者fatedier还是非常主动在维护整个项目,我前几天提交的issue也很快的被解决。主要看frp在嵌入式领域是否存在足够的需求,如果需求量大,相信作者会感兴趣的。

 

原创文章,转载请注明: 转载自渔人小径

本文链接地址: OpenWRT配置FRPC实现公网访问

打赏 PayPal

文章的脚注信息由WordPress的wp-posturl插件自动生成

打赏 赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

最近文章

分享

发表评论

电子邮件地址不会被公开。 必填项已用*标注