Unraid使用frp内网穿透为docker应用配置远程访问,实现公网访问
创作立场声明:把最近的对外网访问的研究方案分享出来,针对与Unraid这一个Nas系统平台,和大家探讨交流。
使用Unraid的Nas系统已有一个多月,对其强大的可定制能力以及对虚拟机和docker的各种硬件直通,喜爱不已。在Unraid系统中搭建了各种Docker:FileBrower私有云、Jellyfin媒体中心、typecho博客、MySQL数据库、TransmissionPT下载器、Nginx代理服务器Docker、Lychee相册。其中在Nginx的Docker下实现了我的个人小站、导航页、可道云、归档管理。搭建之后,不满足局域网中使用,便找一套能实现公网访问一些控制页面的方案。
Frp内网穿透是一款非常优秀的局域网穿透软件,其原理是,通过有公网ip的服务器作中转,将数据转递给局域网中的各种服务,实现外网访问局域网中的各种服务。家里没有IPV4公网IP(IPV6有公网ip,但是目前没有折腾),无法使用DDNS的方案,便考虑内网穿透的方式,内网穿透的方式有很对,其中FRP配置简单,有比较好的稳定性和可靠性,因此确定了以FRP为主的内网穿透。在Unraid平台下,实现内网穿透功能的方案:Unraid+OpenWrt旁路由+Frp插件。此方案分为三步:1.unraid下安装原版OPenwrt虚拟系统作为旁路由;2.在OpenWrt里安装中文包和frp插件;3.配置frp;
在上一篇文章里,集中探讨了Unraid下安装Openwrt虚拟机,以及对OpenWrt的初始配置,使其正常访问外网。
在此基础上,本文主要阐述Frp客户端插件的安装,以本地事先搭建的Piwigo相册为例,对frp客户端进行配置,从而实现了对Piwigo相册的外网访问,此方法可扩展到任意本地的docker应用,不仅仅限制于http/https通信协议,也适用于tcp/udp协议的外网远程访问。
必要的准备
1. 参考第一篇文章搭建好OpenWrt虚拟机
2. 下载OpenWrt的frp插件包:百度网盘:re1v
3. 使用工具:WinSCP(如果没有,百度下载一个)
注册免费的Frp服务账号
由于Frp内网穿透需要配合有公网的服务端使用,因此,找一个稳定的frp服务器是很关键的。推荐一家使用过的免费的Frp服务端,作为入门使用。
Sakura Frp 内网穿透 是一家免费提供Frp内网穿透服务的网站,目前处于测试阶段,其下拥有十几个国内和国外的机房,普通用户可以免费创建5条frp隧道,每条拥有10Mbps的上行和10Mbps的下行,也就是平均1M/s多的上传和下载的速度,这带宽只要用来跑视频类,绰绰有余。初始有5g的流量,每天签到随机1~5g。流量用完之后。会限制到4mpbs,而且没有流量限制,跑个网站、图片类的远程访问,稳稳地没问题。 链接此进行注册 Sakura Frp
1. 注册完成之后,登录进去,点击'每日签到'获取流量,点击'创建隧道'来创建一条frp隧道,用于后面使用。
2. 该网站有十几台服务器,由于国内的服务器如果走http或这https的流量(包括Tcp下的http
/Https流量),是需要实名的才能正常使用,而实名需要大概5元的人工费,国外的服务器没有这个限制,不需要实名。因此,建议选择国外的服务器作为初次尝试。考虑到香港和日本的服务器并不稳定,建议使用'俄勒冈'的服务器。
3. 选好服务器之后,接下来按图所示进行配置。其中隧道名称自己任意填写,本文以实现piwigo相册为例,此处填写'MyPiwigo'; 隧道类型有5种,其中TCP的配置最简单,而且Http/Https都是以TCP为基础的,因此TCP隧道适用于常见的大多数服务,例如远程桌面、SSH、访问Unraid的后台管理界面、piwigo相册的界面、OpenWrt软路由的界面等;'本地地址和本地端口'填写的是自己局域网中要访问设备的内网ip和设备的内网端口。例如,本文piwigo相册的内网ip是:192.168.5.101,端口是:80,对应的http访问(如果是https访问,对应的端口是443)。'远程端口'是上一个步骤选的'俄勒冈'的服务器的端口,这个端口是有一个可选的范围:10240~65535,这个端口自己任选,但不能和已有的重复,尽量大一点。本文使用:20485;'绑定域名'不填。如下图所示:
4. 继续配置'高级设置',其中'加密方式和压缩数据'默认;'URL 路由、Host 重写、请求来源'都不填;'访问密码',自己任意输入一段字符串即可,最后点击'完成创建'。如下图所示:
5. 点击'配置文件',选择'俄勒冈'服务器,查看生成好的配置文件,此网页不要关闭,放到一边,后面要用。如下图所示:
至此,注册免费的Frp服务账号及配置隧道完成。
OpenWrt旁路由安装Frp插件
1. 解压之前下载好的frp插件包(百度网盘:re1v)
解压后的frp插件包有一个文件夹和两个'ipk'为后缀的文件。其中两个'ipk'文件是OpenWrt的插件,frp程序包文件夹里是frp的核心程序。两个'ipk'文件中,其中'luci-app-frpc_1.2.1-1_all.ipk'是Frp在OpenWrt的UI管理插件,'luci-i18n-frpc-zh-cn_1.2.1-1_all.ipk'是这个UI插件的中文包。核心程序需要有两类,一类以'amd64'标识,一类以'386'标识;一般来说,intel平台且OpenWrt版本是32位的用'386'标识的frp程序,后面要用。不过具体是哪一种,后面可以尝试。
2. 打开之前创建好的OpenWrt后台管理界面,安装frp插件。在菜单栏依次点击'系统'->'SofeWare'->'Upload Package...'进行手动安装frp插件。
点击'浏览',找到两个'ipk'文件的位置,依次安装这两个'ipk'文件。首先安装'luci-app-frpc_1.2.1-1_all.ipk',点击'install'。遇到下面所提示的错误不同担心,刷新一下页面继续安装。然后安装'luci-i18n-frpc-zh-cn_1.2.1-1_all.ipk'。
3. 然后刷新一下页面,在菜单栏依次点击'服务'->'FRP',出现下图所示:
[提示]如果此处报错,提示:'/usr/lib/lua/luci/dispatcher.lua:938: module 'luci.cbi' not found:'字样,经测试有可能是使用国内源更新Openwrt造成的,建议使用下面更新源恢复到原来的,然后点击'Update Lists...'重新更新。如果还不起作用,建议参考第一篇,重新安装OpenWrt虚拟机,然后不使用国内源!!!(猜测那个国内源是64版本的,而这个Openwrtshi 32版本的,不兼容造成的)
src/gz openwrt_core http://downloads.openwrt.org/releases/19.07.1/targets/x86/generic/packages
src/gz openwrt_base http://downloads.openwrt.org/releases/19.07.1/packages/i386_pentium4/base
src/gz openwrt_luci http://downloads.openwrt.org/releases/19.07.1/packages/i386_pentium4/luci
src/gz openwrt_packages http://downloads.openwrt.org/releases/19.07.1/packages/i386_pentium4/packages
src/gz openwrt_routing http://downloads.openwrt.org/releases/19.07.1/packages/i386_pentium4/routing
src/gz openwrt_telephony http://downloads.openwrt.org/releases/19.07.1/packages/i386_pentium4/telephony
打开刚刚安装'Frp'管理界面,由于在OpenWrt系统的'/usr/bin/'目录下并没有'frpc'的核心程序,会提示'客户端文件无效',因此接下来操作是将核心程序导入到这个路径下。
4. 打开软件'WInSCP', 按下图所示创建一个会话链接。其中'文件协议'选择'SCP','主机ip'填写OpenWrt的ip,'端口'默认22,'用户名'为'root','密码'是OpenWrt的后台登录密码。点击保存然后登录。
5. 在WinSCP找到目录'/usr/bin/', 然后将之前解压的frp核心程序frp_0.31.1_linux_386文件夹里的'frpc'程序复制到'/usr/bin/'下。
返回OpenWrt的Frp的UI管理页面,查看有没有显示出版本号。如果没有显示版本号,尝试解压'frp_0.31.1_linux_amd64.tar.gz', 将其中的'frpc'程序复制到'/usr/bin/'下.
至此OPenWrt中安装frp客户端插件完成。接下来阐述如何配置frp客户端,实现外网访问。
frp客户端插件的配置
1. 打开之前创建'俄勒冈'服务器的frp隧道,生成好的配置文件,放在一边。然后打开OPenWrt中的'服务'->'FRP'->'服务端',点击'添加',按下图所示进行配置:其中,服务器的名字任意,此处为'PiwigoServer'。
按图全部配置之后点击'保存',然后显示如下:
2. 打开OPenWrt中的'服务'->'FRP'->'规则',点击'添加',按下图所示进行配置:其中,'代理名字',点击自定义,然后输入任意字符,按回车确定。未标注红框的按图默认填写。
按图全部配置之后点击'保存',然后显示如下:
4. 打开OPenWrt中的'服务'->'FRP'->'设置',点击'常规选项',按下图进行配置。其中,勾上'已启用',服务端选择之前创建的'PiwigoServer'。最后配置完成之后,点击'保存并应用'。
至此,frp客户端插件的配置完成,接下来进行外网测试吧~
外网访问测试
在浏览器中输入'俄勒冈'服务器:远程端口,本文的地址为:'35.160.49.136:20485',如下图所示:
回车,测试连接情况。
成功了~~~
至此,实现了外网访问本地'piwigo'相册的目的。大家可以尝试其他隧道线路,以及给其他本地的docker应用设置外网访问,只需要在OPenWrt中的frp插件里添加'代理规则'。

























校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案