frp内网穿透安装及配置
下载安装包
frp-release
本次的演示环境为:
服务端:Alibaba Cloud Linux
客户端:Windows 11 x86_64
配置
服务端 frps.toml
# frps.toml
bindAddr = "0.0.0.0" # 服务端绑定的 IP 地址,0.0.0.0 表示监听所有网络接口
bindPort = 7000 # 服务端监听的 TCP 端口,客户端通过此端口连接
kcpBindPort = 7000 # 服务端监听的 KCP 端口,用于加速连接
vhostHTTPPort = 8080 # 服务端监听的 HTTP 端口,用于支持虚拟主机功能
subdomainHost = "baizesz.com" # 虚拟主机的域名后缀,客户端可以通过子域名访问服务
userConnTimeout = 60 # 用户连接超时时间(单位:秒),客户端在指定时间内未完成连接则会被断开auth.method = "token" # 鉴权方法,此处使用 token 方式进行身份验证
auth.token = "123456" # 鉴权 token,客户端需要使用此 token 才能连接到服务端webServer.addr = "0.0.0.0" # Web 服务器的绑定地址,0.0.0.0 表示监听所有网络接口
webServer.port = 7500 # Web 服务器的监听端口,用于访问 Web 管理界面
webServer.user = "admin" # Web 管理界面的用户名
webServer.password = "12UnTBTKENTYTBuL" # Web 管理界面的密码#log.to="./frps.log" # 日志输出路径,注释掉表示不启用文件日志输出
log.level = "trace" # 日志级别,trace 表示记录所有日志信息,包括调试信息
log.maxDays = 3 # 日志文件保留的最大天数#allowPorts = [ # 允许客户端使用的端口范围,注释掉表示不限制端口
# { start = 6000, end = 7000 },
#]
客户端 frpc.toml
serverAddr = "120.24.191.53" # 服务端的 IP 地址,客户端连接的目标地址
serverPort = 7000 # 服务端的监听端口,客户端通过此端口连接服务端
loginFailExit = true # 登录失败时是否退出客户端,true 表示登录失败则退出#log.to = "./frpc.log" # 日志输出路径,注释掉表示不启用文件日志输出
log.level = "trace" # 日志级别,trace 表示记录所有日志信息,包括调试信息
log.maxDays = 3 # 日志文件保留的最大天数auth.method = "token" # 鉴权方法,此处使用 token 方式进行身份验证
auth.token = "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b" # 鉴权 token,客户端需要使用此 token 才能连接到服务端transport.dialServerTimeout = 60 # 连接服务端的超时时间(单位:秒)webServer.addr = "127.0.0.1" # Web 服务器的绑定地址,仅监听本地访问
webServer.port = 7400 # Web 服务器的监听端口,用于访问 Web 管理界面
webServer.user = "admin" # Web 管理界面的用户名
webServer.password = "admin" # Web 管理界面的密码# 定义代理服务,用于将本地服务暴露到公网
[[proxies]]
name = "django" # 代理服务的名称
type = "http" # 代理类型,此处为 HTTP 代理
localIP = "127.0.0.1" # 本地服务的 IP 地址
localPort = 8000 # 本地服务的端口
subdomain = "api" # 子域名,通过 <subdomain>.<subdomainHost> 访问服务[[proxies]]
name = "webui" # 另一个代理服务的名称
type = "http" # 代理类型,此处为 HTTP 代理
localIP = "127.0.0.1" # 本地服务的 IP 地址
localPort = 7860 # 本地服务的端口
subdomain = "webui" # 子域名,通过 <subdomain>.<subdomainHost> 访问服务
防火墙设置
云服务器端口授权
在阿里云服务器控制台 >> 安全组 >> 入方向 >> 添加对应的规则 》协议类型 tcp, 端口填上上面frps.toml
配置文件中所有的商品号,源选择所有IPv4(0.0.0.0/0)
系统防火墙设置
若在云服务器端口授权后,使用下面命令无法连通,则需要设置云服务系统的防火墙端口放行
测试端口连通性:
# 改成云服务器的 ip 以及端口号
telnet 120.24.191.53 8080
# 或者用下面这个命令
Test-NetConnection -ComputerName 120.24.191.53 -Port 7500
如果能连通,则不需要设置,否则按下面命令在服务器端进行设置
# 查看所有允许的端口
sudo firewall-cmd --list-all
# 添加一个7400端口
sudo firewall-cmd --add-port=7400/tcp --permanent
# 刷新防火墙配置
sudo firewall-cmd --reload
启动
服务端
cd xxx/frps_path/ # 进入 frps 的目录
./frps -c ./frps.toml # 用frps.toml 文件配置启动 frps
启动成功就可以看到下信息(根据你映射的端口不一样,信息会有差别)
# ./frps -c ./frps.toml
2025-01-22 21:22:37.390 [I] [frps/root.go:105] frps uses config file: ./frps.toml
2025-01-22 21:22:37.646 [I] [server/service.go:237] frps tcp listen on 0.0.0.0:7000
2025-01-22 21:22:37.646 [I] [server/service.go:246] frps kcp listen on udp 0.0.0.0:7000
2025-01-22 21:22:37.646 [I] [server/service.go:305] http service listen on 0.0.0.0:8080
2025-01-22 21:22:37.646 [I] [frps/root.go:114] frps started successfully
2025-01-22 21:22:37.646 [I] [server/service.go:351] dashboard listen on 0.0.0.0:7500
客户端
cd xxx/frpc_path/ # 进入 frps 的目录
./frpc -c ./frpc.toml # 用frps.toml 文件配置启动 frps
启动成功就可以看到下信息(根据你映射的端口不一样,信息会有差别)
# .\frpc.exe -c .\frpc.toml
2025-01-22 21:25:30.085 [I] [sub/root.go:142] start frpc service for config file [.\frpc.toml]
2025-01-22 21:25:30.089 [I] [client/service.go:295] try to connect to server...
2025-01-22 21:25:30.089 [I] [client/service.go:174] admin server listen on 127.0.0.1:7400
2025-01-22 21:25:30.121 [I] [client/service.go:287] [9adf4570a2ac6630] login to server success, get run id [9adf4570a2ac6630]
2025-01-22 21:25:30.121 [I] [proxy/proxy_manager.go:173] [9adf4570a2ac6630] proxy added: [django webui]
2025-01-22 21:25:30.121 [T] [proxy/proxy_wrapper.go:200] [9adf4570a2ac6630] [webui] change status from [new] to [wait start]
2025-01-22 21:25:30.121 [T] [proxy/proxy_wrapper.go:200] [9adf4570a2ac6630] [django] change status from [new] to [wait start]
2025-01-22 21:25:30.131 [I] [client/control.go:168] [9adf4570a2ac6630] [webui] start proxy success
2025-01-22 21:25:30.131 [I] [client/control.go:168] [9adf4570a2ac6630] [django] start proxy success
查看连接状态
刚才已经配置了 frp 的web 服务,打开下页链接就可以查看连接状态
http://120.24.191.53:7500
验证连接
在网页中打开刚才我拉映射的两个 http 端口
-
http://127.0.0.1:7860/
-
http://127.0.0.1:8000/api/v1/auth
没有配出的话是能正常访问的,更多属性配置查看官网,另外配置文件的写法,其实有两种,下面以 webServer 举例:
写法一:
webServer.addr = "127.0.0.1" # Web 服务器的绑定地址,仅监听本地访问
webServer.port = 7400 # Web 服务器的监听端口,用于访问 Web 管理界面
webServer.user = "admin" # Web 管理界面的用户名
webServer.password = "admin" # Web 管理界面的密码
写法二:
[webServer]
addr = "127.0.0.1" # Web 服务器的绑定地址,仅监听本地访问
port = 7400 # Web 服务器的监听端口,用于访问 Web 管理界面
user = "admin" # Web 管理界面的用户名
password = "admin" # Web 管理界面的密码
上面两种写法是等价的,但是如果两种写法混合使用的话,不建议这样做,因为从[]开始它会一直找往下,直到到下一组[],不然它都会认为是当前组的,例如:
[webServer]
addr = "127.0.0.1" # Web 服务器的绑定地址,仅监听本地访问
port = 7400 # Web 服务器的监听端口,用于访问 Web 管理界面
user = "admin" # Web 管理界面的用户名
password = "admin" # Web 管理界面的密码
auth.token = "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b" # 这里就会报错,它会被认为是webServer的子配置