经常光顾本站的小伙伴都很清楚,杜老师使用家中服务器对外提供服务。因家用宽带会封禁 80 等端口,借助 CDN 的端口回源功能,可使用户通过域名直接访问杜老师说旗下服务,但经常会遇到回源问题。点击进入本文听杜老师细聊!
首先我们使用去不图床举例,说明下之前的网络连接拓扑。
内网的服务器是树莓派,映射端口分别为 80 和 443,通过软路由转换为可用端口,再使用 CDN 端口回源反代加速。
优点是网络节点少,效率较高。缺点是家用带宽会变动地址,需要经常调整 CDN 的回源地址。
之前杜老师通过 DDNS,加 DNSPod 付费服务「TTL 最低值」解决回源地址变动问题。
但是会有一段时间无法访问,原因还是出现在回源地址的解析上面。
新地址获得后,需要等待一段时间,才会同步到 DDNS。而 CDN 本地解析缓存时间较长,导致无法及时获取到新地址,就造成了回源失败。
为了加快地址变更后的回源生效速度,杜老师决定改为使用内网穿透的方式解决这一问题。
内网穿透是种网络技术,它允许局域网内的设备通过互联网与外部网络通信。这种技术通常用于家庭、办公室或其它内部网络环境,其中设备的 IP 地址是私有的,无法直接与公共互联网通信。
内网穿透的基本原理是通过在公共互联网上创建一个代理服务器,该服务器充当内部网络与外部网络之间的中介。当内部网络中的设备需与外部网络通信时,它会将数据发到代理服务器,然后由代理服务器将数据转发到目标设备。同样,当外部设备需与内部设备通信时,代理服务器会将数据发送到内部设备。
内网穿透的主要应用场景包括:远程访问、远程办公、游戏服务器及私有云服务等。
在众多内网穿透工具中,杜老师选择 frp。
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP/UDP/HTTP/HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
客户端服务端通信支持 TCP/QUIC/KCP 以及 Websocket 多种协议;
采用 TCP 连接流复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟;
代理组间负载均衡;
端口复用,多个服务通过同一个服务端端口暴露;
支持 P2P 的通信形式,流量不经过服务器中转,充分利用带宽资源;
多个原生支持的客户端插件,便于独立使用 frp 客户端完成某些工作;
高度扩展的服务端插件系统,易于结合自身需求进行功能扩展;
服务端和客户端 UI 页面。
从官网页面下载软件包,解压其中的 frps 及 frps.ini 文件,并上传至服务端/opt/目录「可上传至任意目录,但影响到下面服务配置路径」编辑 frps.ini 文件并添加 token
项「等号右侧的值可自定义,与客户端相同」
1 | [common] |
使用 systemd 控制 frps 的运行状态及配置开机自启,运行命令 vim /etc/systemd/system/frps.service
并添加下面代码,即可通过 systemctl start frps
启动 frp,使用命令 systemctl enable frps
配置 frps 开机自启:
1 | [Unit] |
从官网页面下载软件包,解压其中的 frpc 及 frpc.ini 文件,并上传至客户端/opt/目录「可上传至任意目录,但影响到下面进程守护管理器的运行路径」编辑 frpc.ini 文件并添加以下内容:
1 | [common] |
杜老师使用的宝塔面板,安装了进程守护管理器插件,按照如下的配置即可运行客户端: