因为要将内网的服务暴露在外网进行访问,需要使用Frp来做内网穿透。
记录一下搭建过程
服务器环境
腾讯云
操作系统:TencentOS Server 2.4
CPU:1核
内存:2G
公网带宽:1Mbps
搭建过程
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
下载最新稳定版
在release页面下载最新稳定版,将下载下来的包上传至服务器。
我选择将下载下来的包解压到/opt目录:

观察解压后的文件
frps是服务端运行文件frpc是客户端运行文件systemd文件夹,里面包含frps.service等文件,可用于配置systemctl启动,将frp服务设置为Linux守护线程、开机启动。frps.service [Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
执行相关命令
注意到frps.service中有这么一句:ExecStart=/usr/bin/frps -c /etc/frp/frps.ini,官方默认的执行位置在/usr/bin/frps 配置文件路径是/etc/frp/frps.ini。
因此,为了方便以后升级,执行以下命令:
ln -s /opt/frp/frps /usr/bin/frps |
将
frps.service文件复制到/etc/systemd/system执行命令
systemctl start frps以启动frps服务端执行命令
systemctl status frps以查看运行状态
执行命令
systemctl enable frps设置开机启动
客户端
frpc也是类似的配置
其他配置
通过自定义域名访问内网的 Web 服务
这个示例通过简单配置 HTTP 类型的代理让用户访问到内网的 Web 服务。
HTTP 类型的代理相比于 TCP 类型,不仅在服务端只需要监听一个额外的端口 vhost_http_port 用于接收 HTTP 请求,还额外提供了基于 HTTP 协议的诸多功能。
修改 frps.ini 文件,设置监听 HTTP 请求端口为 8080:
[common]
bind_port = 7000
vhost_http_port = 8080修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,
local_port为本地机器上 Web 服务监听的端口, 绑定自定义域名为custom_domains。[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
[web2]
type = http
local_port = 8080
custom_domains = www.yourdomain2.com分别启动 frps 和 frpc。
将
www.yourdomain.com和www.yourdomain2.com的域名 A 记录解析到 IPx.x.x.x,如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名。或者可以通过修改 HTTP 请求的 Host 字段来实现同样的效果。通过浏览器访问
http://www.yourdomain.com:8080即可访问到处于内网机器上 80 端口的服务,访问http://www.yourdomain2.com:8080则访问到内网机器上 8080 端口的服务。
