使用FRP内网穿透拯救我的个人站点
0、参考资料
1、前情提要
在之前,我在学校的寝室里部署了一个铁威马的F2-220 NAS和一个当作个人服务器的NUC5PPY。其中铁威马NAS用于存储文件。NUC5用于部署wordpress博客、leanote笔记、bitwarden密码服务器。在以往的使用中,由于学校的教育网IP比较富裕,电信宽带拨号上网自动分配的就是动态公网IP。我通过调用阿里云的云解析API接口写了一个DDNS脚本实现了动态解析。
然而我昨天早晨起床之后发现邮箱中收到了一堆云解析IP变动提醒。
并且,解析过后的域名不可访问。我比对了云解析改动后的IP和路由器WAN口IP之后,悲惨的发现,之前的公网IP变成了内网IP。估计是因为我们学校之前电信宽带的独占期结束了,移动和联动宽带入局之后教育网IP资源不够了。由于是校园宽带,打电话投诉或者申请公网IP是不可能的。
我已经用了好久的网络拓扑结构面临着瘫痪的结局。
2、确定方案
首先要明确我这次改造的目标:在尽可能减小网络结构变换对我日常工作影响的前提下恢复各种服务的正常使用。那么在这种情况下主要有三种方案:
方案一:将现有服务全部从私有云迁移到公有云中。
方案二:使用花生壳等成熟内网穿透工具。
方案三:租用公有云服务器,自建内网穿透。
最终,正好碰到了腾讯云打折,以288三年的价格拿到了一个云主机,配置为1核 2GB内存 1Mbps带宽。虽然便宜,但是这个1Mbps的带宽着实有些寒酸。不过还好的是我的NAS可以通过铁威马的远程访问使用,这个带宽足够其他服务的使用了。
3、FRP部署
3.1 什么是FRP
frp 是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
代理组间的负载均衡。
端口复用,多个服务通过同一个服务端端口暴露。
多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
服务端和客户端 UI 页面。
这些都是frp官方的介绍。我们只需要知道frp就是一种把访问云服务器相应端口的数据流转发到客户端所在网络的工具。
3.2 frp服务器端部署
我的云主机的操作系统是Ubuntu,为了方便使用,我还是首先安装了宝塔面板,方便后续通过进程守护frp服务。
下载64位Linux版本的frp程序,官下载地址为:下载。在这里我们通过wget下载。
cd /opt # 我习惯把个人部署的源码放在这个目录下
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
2. 解压下载的压缩包
tar -zcvf frp_0.36.2_linux_amd64.tar.gz
3. 跳转到frp目录
cd frp_0.36.2_linux_amd64
4. 我们下载的源码中包含两个部分,分别是frp的服务器端、frp客户端。我们只需要在云主机上运行frp服务器端就可以了。修改服务器端配置文件frps.ini
vim frps.ini # 由于需要输入的东西不多,这里使用vim编辑器,也可以下载到本地修改后上传覆盖
# 按I键进入插入模式
# #输入如下内容
bind_port = 7000 # 用于接收frpc连接的端口
kcp_bind_port = 7000 # 用于接收采用 KCP 连接的端口
dashboard_port = 7500 # frp web dashboard访问端口
token = c4kTgvgW8sqVMJ # frp鉴权密钥,客户端需要使用相同配置
vhost_http_port = 80 # frp的http监听端口
vhost_https_port = 443 # frp的https监听端口
dashboard_user = xxx # frp网页dashboard访问用户名
dashboard_pwd = xxxxx # frp网页dashboard访问密码
# #输入完毕,按ESC键退出vim插入模式
# 输入 :wq (包含冒号)进行保存
上述配置需要说明的是:
由于我的云主机不再部署其他网站,因此将frp的http和https监听端口设为常用的80和443;如果你的云主机需要部署其他网站,可以设置为其他端口或设置反向代理。
其他服务器端的配置可查看官方手册。
5. 部署完毕之后可以输入指令开启:
/opt/frp/frps -c /opt/frp/frps.ini
需要注意的是,由于我在配置frp服务时使用了80和443,所以可能需要以root权限运行。
运行完毕之后可以看到我们配置的端口都已经成功监听
6. 剩下的就是设置frp开机自启了。您可以将指令写入rc.local中,不过在这里我为了方便管理,还是使用了宝塔面板的supervisor管理器。这个主要还是看您的使用习惯。宝塔面板的安装教程可以看一下官方的Linux宝塔面板安装。进程守护配置如下:
7. 云服务防火墙(安全组)放行
8. 宝塔防火墙放行(如果您使用了宝塔面板的防火墙),也是放行上述端口
至此,frp服务器端就配置完成。
3.3 frp客户端部署
客户端的部署和服务器端类似。我将frp客户端部署到了NUC主机服务器上。操作系统也是Ubuntu。frp源程序和服务器端一样。在这里我们使用的frpc,因此需要配置frpc.ini。配置内容如下:
[common] # 客户端通用配置
server_addr = xxx.xxxx.com # 部署frp服务的云主机地址,也可以是IP
server_port = 7000 # frp服务器监听端口
token = c4kTgvgW8sqVMJ # 鉴权token,要和frp服务器一致
[blog] # 服务名,单一客户端下不可重复
type = https # 协议类型
local_ip = 192.168.3.226 # 数据转发目标地址
local_port = 443 # 数据转发目标端口
custom_domains = blog.xxxx.com # 服务器绑定自定义域名
[note]
type = https
local_ip = 192.168.3.226
local_port = 443
custom_domains = note.xxxx.com
[bitwarden]
type = https
local_ip = 192.168.3.226
local_port = 443
custom_domains = alpha.xxxx.com
我把所有的二级域名都解析到云主机上,下面各个服务可以根据域名确定将数据转发到什么位置。而后运行frpc
/opt/frp/frpc # 客户端会自动使用frpc.ini
接下来我们也可以使用和服务器端相同的步骤配置开机自启或守护进程。
4、总结
通过配置之后,可以正常的通过域名访问寝室中的服务了。个人日常工作流程恢复正常。1Mbps的带宽基本不影响体验(NAS没有走这个通道)。这篇文章就是使用leantoe服务写的。

陈鱼皮
校验提示文案
铬儿
校验提示文案
風騷的毛毛虫
校验提示文案
皮皮虾大王呀
校验提示文案
Askr
校验提示文案
冰火易流
校验提示文案
大猫先生
校验提示文案
广撒网多捞鱼
vhost_http_port
这个不要写,不要写,写了就不能用了
我写了,中午搞到晚上,删了就OK了
校验提示文案
广撒网多捞鱼
校验提示文案
广撒网多捞鱼
校验提示文案
广撒网多捞鱼
vhost_http_port
这个不要写,不要写,写了就不能用了
我写了,中午搞到晚上,删了就OK了
校验提示文案
大猫先生
校验提示文案
冰火易流
校验提示文案
皮皮虾大王呀
校验提示文案
風騷的毛毛虫
校验提示文案
铬儿
校验提示文案
Askr
校验提示文案
陈鱼皮
校验提示文案