什么是内网穿透?
内网穿透是一种技术,它允许用户通过公网访问位于内部网络中的设备或服务。通常情况下,内部网络中的设备不能直接从公网访问,因为它们可能位于防火墙或NAT(网络地址转换)之后。内网穿透通过建立一条从公网到内网的隧道,使用户能够通过公网访问内部设备或服务。这对于需要远程访问内网设备或提供内部服务给外部用户的情况非常有用。内网穿透可以通过不同的方法实现,包括端口转发、反向代理、VPN等。
frp
介绍
frp 是一款高性能的反向代理应用,专注于内网穿透。它支持多种协议,包括 TCP、UDP、HTTP、HTTPS 等,并且具备 P2P 通信功能。本次就是介绍如何实现web服务的内网穿透
基本原理
frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。
由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。
安装
操作系统: CentOS 7
frp版本: 0.59.0
1. 查看系统架构,选择对应的安装包
uname -m
- 如果输出是
x86_64
,那么是 AMD/Intel 64位架构。 - 如果输出是
aarch64
或armv7l
,那么是 ARM 架构。
这里我的是x86_64,所以执行下面命令进行下载,其他的可以从frp发布包去下载
curl -L -O https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
2. 修改配置文件
a. 公网机器上的配置文件修改
在 frps.toml 文件中添加以下内容,以指定 HTTP 请求的监听端口为 8080。
注意: 公网机器需要对外开放这两个端口,否则内网所在的客户端无法与之通信,其中bindPort是与客户端通信的端口
bindPort = 7000
vhostHTTPPort = 8080
b. 启动frps
./frps -c ./frps.toml
c. 内网机器上的配置文件修改
在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器 IP 地址、本地 Web 服务监听端口和自定义域名:
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["www.yourdomain.com"]
[[proxies]]
name = "web2"
type = "http"
localPort = 8080
customDomains = ["www.yourdomain2.com"]
d. 启动frpc
./frpc -c ./frpc.toml
3. 验证是否可以访问
直接输入域名看是否可以访问
4. 使用systemd来管理frps、frpc服务(可选,但建议)
- 创建frps.service文件
sudo vim /etc/systemd/system/frps.service
写入内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
- 使用 systemd 命令管理 frps 服务
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
- 设置 frps 开机自启动
sudo systemctl enable frps
最后在客户端机器上采用同样的方式来创建frpc服务