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也即服务端的配置,有两种情况:

  1. 如果同样是在openWRT上运行frps,那安装方法跟接下来的frpc是一回事。
  2. 如果跟我一样,云端走frps做转发用,张大妈上几乎每个博主都截图讲一遍,我是用CentOS命令行操作的,不在此赘述了,有需要联系。

 

在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,打开后是这样。

【注】如果遇到  module 'luci.cbi' not found:  这样报错,多半是你用了最新的19.07版本openWRT,那么你需要安装  luci-compat  来解决问题。原因是19.xx版将原来的以lua为后端的静态luci,换成了跟当今浏览器接轨的js为主的前端渲染方式,因此不少旧时代的luci界面包都出现问题。如果装了luci-compat仍然不解决问题,可以考虑回退到18.xx的版本。

选择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插件自动生成

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

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

最近文章

分享

2 条评论

  1. andy lu

    我的机器:
    system type : Qualcomm Atheros QCA9558 ver 1 rev 0
    machine : ARRIS SBR-AC1750
    processor : 0
    cpu model : MIPS 74Kc V5.0
    BogoMIPS : 358.80
    wait instruction : yes
    microsecond timers : yes
    tlb_entries : 32
    extra interrupt vector : yes
    hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
    isa : mips1 mips2 mips32r1 mips32r2
    ASEs implemented : mips16 dsp dsp2
    shadow register sets : 1
    kscratch registers : 0
    core : 0
    VCED exceptions : not available
    VCEI exceptions : not available

    这个版本安装不上:
    opkg install frpc_0.32.1-1_mips_mips32.ipk

    Unknown package ‘frpc’.
    Collected errors:
    * pkg_hash_fetch_best_installation_candidate: Packages for frpc found, but incompatible with the architectures configured
    * opkg_install_cmd: Cannot install package frpc.

    界面可以安装,无语

    • 不熟悉mips,看起来相关build好几个,你确定是这个mips32的build吗?
      此外,真想玩还可以搞个源码自己build试一下

发表评论

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