什么是 frp?
frp 是一个用于实现内网穿透的高性能反向代理应用。它支持多种协议,包括 TCP、UDP、HTTP 和 HTTPS。允许您向 Internet 公开位于 NAT 或防火墙后面的本地设备。
frp 的基本原理
映射和转发:frp 的核心思想是将内网设备(客户端)的端口映射到公网设备(服务端)的端口上,实现流量转发。
基础设施:frp 需要两个核心设备:
服务端:拥有公网 IP 的设备,用于公网通信。
客户端:要访问的内网设备,将配置的公网映射端口告知服务端。
如何搭建 frp服务端
以下是简单的步骤来搭建 frp:
获取安装包
安装:首先,从官方发布仓库下载适用于你的操作系统的 frp 包。例如,服务端一般是 Linux(Intel 64 位 CPU),而客户端可以是 Windows 或 macOS。
我选用0.51.3版本,后续版本配置和文章有出入需要根据官方文档配置
#amd64架构服务器
wget https://mirror.ghproxy.com/https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
tar -xzvf frp_0.51.3_linux_amd64.tar.gz
配置frp
修改 frps.ini 文件,设置服务端监听的端口(例如 7000)。
示例如下
[common]
bind_addr = 0.0.0.0
#监听端口
bind_port = 7000
kcp_bind_port = 7000
#面板一般用不上,随意就好
dashboard_port = 16443
#修改为自定义的用户名密码
dashboard_user = rainmos
dashboard_pwd = rainmosrainmos
log_file = ./frps.log
log_level = info
log_max_days = 3
#密钥 两端连接验证需要,建议设置复杂点
token = bhSQV55GxgfWvw2KTaRJ
#最大连接池
max_pool_count = 50
tcp_mux = true
配置service
编写service文件
vim /etc/systemd/system/frps.service
示例如下
[Unit]
Description=Frps
After=syslog.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/etc/frps
ExecStart= /usr/bin/frps -c /etc/frps/frps.ini
Restart=always
[Install]
WantedBy=multi-user.target
最后将文件放到指定位置,并启动frp的服务端
sudo mkdir -p /etc/frps
sudo cp frps.ini /etc/frps
sudo cp frps /usr/bin
sudo systemctl enable frps
sudo systemctl start frps
一键脚本
觉得太麻烦不想看?直接运行这个脚本吧
wget -O frps_install.sh https://www.rainmos.com/file/frps_install.sh
chmod +X frps_install.sh
sudo bash frps_install.sh
配置客户端:
修改 frpc.ini 文件,填入服务端的 IP 和端口,以及要转发的内网服务的端口(例如 SSH,默认 22 端口)。
启动客户端:./frpc -c ./frpc.ini
验证:如果一切顺利,你就可以通过公网访问内网设备了。