frp搭建内网穿透教程
步骤1:准备工作
- 公网服务器:需要一台具有公网IP的服务器作为中转服务器,安装frp服务器端(frps)。
- 内网设备:需要暴露服务的内网设备,安装frp客户端(frpc)。
步骤2:下载与安装
访问frp的GitHub页面(https://github.com/fatedier/frp)下载对应平台的压缩包,解压后分别获得frps(服务器端)和frpc(客户端)。
可下载的部分版本如下:
名称 |
---|
frp_0.62.0_android_arm64.targz |
frp_0.62.0_darwin_amd64.tar.gz |
frp_0.62.0_darwin_arm64.tar.gz |
frp_0.62.0_freebsd_amd64.tar.gz |
frp_0.62.0_linux_amd64.tar.gz(linux版本) |
frp_0.62.0_linux_arm.tar.gz |
frp_0.62.0_linux_arm64.tar.gz |
frp_0.62.0_linux_arm_hf.tar.gz(一般情况下,用于内网穿透的服务器是linux系统) |
frp_0.62.0_linux_loong64.tar.gz |
frp_0.62.0_linux_mips.tar.gz |
frp_0.62.0_linux_mips64.tar.gz |
frp_0.62.0_linux_mips64le.tar.gz |
frp_0.62.0_linux_mipsle.targz |
frp_0.62.0_linux_riscv64.tar.gz |
frp_0.62.0_windows_amd64.zip(windows版本,如果被内网穿透的客户端是windows系统,则需要在客户端下载此版本) |
frp_0.62.0_windows_arm64.zip |
frp_sha256_checksums.txt |
Source_code (zip) |
Source_code (tar.gz) |
步骤3:搭建服务端frps
- 下载后重命名为frp.tar.gz(可忽略),将linux压缩包上传至服务器/opt/frp目录并解压。
解压命令:
tar -zxvf frp.tar.gz
解压后,服务端主要用frps、frps.toml文件,frpc和frpc.toml是客户端要用的。
- 配置frp服务器端(frps)
- 在公网服务器上修改配置文件
frps.toml
,内容示例如下:
用vim frps.toml
命令,按i进入编辑模式,粘贴下面的内容稍作修改,按esc,输入:wq回车保存退出。
- 在公网服务器上修改配置文件
# 基础服务配置
bindAddr = "0.0.0.0" # 监听所有网络接口(IPv4)
bindPort = 7000 # 主服务端口(TCP)
kcpBindPort = 7000 # KCP 协议端口(UDP)
# Web 控制台配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin" # 建议修改为复杂用户名
webServer.password = "admin123" # 建议修改为强密码
# 日志配置
log.to = "/frpslog/frps.log"
log.level = "info"
log.maxDays = 3
# 安全认证
auth.method = "token"
auth.token = "tocken123" # 必须修改为复杂 Token
# 允许客户端使用的端口范围
allowPorts = [{ start = 3000, end = 4000 }
]
# 可选高级配置(可根据需要添加)
# transport.tls.force = true # 强制 TLS 加密
# vhostHTTPPort = 80 # HTTP 反向代理端口
# vhostHTTPSPort = 443 # HTTPS 反向代理端口
- 在Linux系统下,使用
systemd
可以方便地控制frps服务端的启动、停止、配置后台运行以及开机自启动。
使用文本编辑器(如vim)在/etc/systemd/system
目录下创建一个frps.service
文件,用于配置frps服务。
命令:vim /etc/systemd/system/frps.service
粘贴下面内容:
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frps/frps -c /opt/frp/frps/frps.toml
[Install]
WantedBy = multi-user.target
- 重载frps服务:
systemctl daemon-reload
- 启动frp:
sudo systemctl start frps
systemctl status frps
- 设置frps开机自启动:
systemctl enable frps
至此,在浏览器中输入<公网ip>:7500,进入web端,frps就搭建好了。
步骤4:搭建客户端frpc
服务端frps搭建好后,就可以进行客户端frpc的搭建。以内网中公司的git代码仓库为例,公司有一条公网ip网络110.23.22.145,公司的所有设备通过这个ip接入到公共网络,所有设备的ip可能是10.10.1.XXX,172.15.23.XXX等局域网ip,公司的git代码仓库安装在一台ip为10.10.5.123的服务器上,通过搭建内网穿透,可实现出差等情况下对该git仓库的访问。
- 在要搭建的内网穿透客户端上传frp.tar.gz压缩包并解压(步骤几乎和服务端一样,配置文件略改一下),若内网穿透的客户端是windows,请使用对应版本的frp。
将frp压缩包上传至客户端/opt/frp目录(客户端也是linux系统的),解压命令:
tar -zxvf frp.tar.gz
客户端只用到frpc和frpc.toml。
- 修改配置文件
frpc.toml
:
serverAddr = "130.127.35.28"
serverPort = 7000
auth.method = "token"
auth.token = "tocken123"
# 日志配置
log.to = "/frpclog/frpc.log"
log.level = "info"
log.maxDays = 3
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 3100
其中,serverAddr对应公网服务器ip,serverPort对应frps配置的端口,auth.token为frps配置的tocken密码,localIP为本地ip,默认127.0.0.1,remotePort是映射到frps服务端的端口,即要进行内网穿透的应用端口。
例如:内网客户端安装了一个gitlib应用,内网ip是10.10.5.101,端口号是8080,在其他网络环境要访问10.10.5.101:8080,是访问不通的。在配置好内网穿透后,访问130.127.35.28:3100就可以代理到内网的gitlib应用。
若还有其他应用进行内网穿透,在frpc.toml复制一份proxies进行修改即可:
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 3100
- 编写frpc.service
和上面frps.service配置差不多,略微修改一下:
[Unit]
# 服务名称,可自定义
Description = frp clent
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/frp/frpc/frpc -c /opt/frp/frpc/frpc.toml
[Install]
WantedBy = multi-user.target
- 重载frps服务:
systemctl daemon-reload
- 启动frp:
sudo systemctl start frps
systemctl status frps
- 设置frps开机自启动:
systemctl enable frps
至此,内网穿透算是搭建完毕!浏览器访问130.127.35.28:3100即可打开对应的内网应用。
补充内容
查看日志
- 查看frps运行日志:
cat /frpslog/frps.log
- 查看frpc运行日志:
cat /frpclog/frpc.log
服务器端口设置
- 服务器安全组要放行对应的端口号,如:7500、7000、3100。
- 若还是无法访问,检查服务器网络的默认区域:
firewall-cmd --zone=public --list-all
- 若输出的结果没有要用的端口号,则进行添加:
sudo firewall-cmd --zone=public --add-port=3100/tcp --permanent
sudo firewall-cmd --reload