抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

经常光顾本站的小伙伴都很清楚,杜老师使用家中服务器对外提供服务。因家用宽带会封禁 80 等端口,借助 CDN 的端口回源功能,可使用户通过域名直接访问杜老师说旗下服务,但经常会遇到回源问题。点击进入本文听杜老师细聊!

回源问题

首先我们使用去不图床举例,说明下之前的网络连接拓扑。

内网的服务器是树莓派,映射端口分别为 80 和 443,通过软路由转换为可用端口,再使用 CDN 端口回源反代加速。

优点是网络节点少,效率较高。缺点是家用带宽会变动地址,需要经常调整 CDN 的回源地址。

之前杜老师通过 DDNS,加 DNSPod 付费服务「TTL 最低值」解决回源地址变动问题。

但是会有一段时间无法访问,原因还是出现在回源地址的解析上面。

新地址获得后,需要等待一段时间,才会同步到 DDNS。而 CDN 本地解析缓存时间较长,导致无法及时获取到新地址,就造成了回源失败。

内网穿透

为了加快地址变更后的回源生效速度,杜老师决定改为使用内网穿透的方式解决这一问题。

内网穿透是种网络技术,它允许局域网内的设备通过互联网与外部网络通信。这种技术通常用于家庭、办公室或其它内部网络环境,其中设备的 IP 地址是私有的,无法直接与公共互联网通信。

内网穿透的基本原理是通过在公共互联网上创建一个代理服务器,该服务器充当内部网络与外部网络之间的中介。当内部网络中的设备需与外部网络通信时,它会将数据发到代理服务器,然后由代理服务器将数据转发到目标设备。同样,当外部设备需与内部设备通信时,代理服务器会将数据发送到内部设备。

内网穿透的主要应用场景包括:远程访问、远程办公、游戏服务器及私有云服务等。

工具选择

在众多内网穿透工具中,杜老师选择 frp。

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP/UDP/HTTP/HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

工具特点

  1. 客户端服务端通信支持 TCP/QUIC/KCP 以及 Websocket 多种协议;

  2. 采用 TCP 连接流复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟;

  3. 代理组间负载均衡;

  4. 端口复用,多个服务通过同一个服务端端口暴露;

  5. 支持 P2P 的通信形式,流量不经过服务器中转,充分利用带宽资源;

  6. 多个原生支持的客户端插件,便于独立使用 frp 客户端完成某些工作;

  7. 高度扩展的服务端插件系统,易于结合自身需求进行功能扩展;

  8. 服务端和客户端 UI 页面。

服务部署

从官网页面下载软件包,解压其中的 frps 及 frps.ini 文件,并上传至服务端/opt/目录「可上传至任意目录,但影响到下面服务配置路径」编辑 frps.ini 文件并添加 token 项「等号右侧的值可自定义,与客户端相同」

1
2
3
[common]
bind_port = 7000
token = dusays.com

使用 systemd 控制 frps 的运行状态及配置开机自启,运行命令 vim /etc/systemd/system/frps.service 并添加下面代码,即可通过 systemctl start frps 启动 frp,使用命令 systemctl enable frps 配置 frps 开机自启:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frps -c /opt/frps.ini

[Install]
WantedBy = multi-user.target

客户部署

从官网页面下载软件包,解压其中的 frpc 及 frpc.ini 文件,并上传至客户端/opt/目录「可上传至任意目录,但影响到下面进程守护管理器的运行路径」编辑 frpc.ini 文件并添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[common]
server_addr = 123.123.123.123
server_port = 7000
token = dusays.com

[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8780

[web2]
type = tcp
local_ip = 127.0.0.1
local_port = 443
remote_port = 8443

杜老师使用的宝塔面板,安装了进程守护管理器插件,按照如下的配置即可运行客户端:

评论