利用处于防火墙后的机器,对外网环境提供 http 或 https 服务。
对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
利用处于防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司局部环境的主机。
远程访问内网的 http/https 服务 远程桌面(Windows/Mac) 远程文件、 SSH 小程序开发 有了内网穿透在外访问家里的电脑、NAS、树莓派、摄像头等网络设备或远程控制,那都不是事儿~ frp是一个开源的内网穿透应用,有客户端软件和服务端软件,大概工作过程如下: 服务端运行在具有公网IP的服务器上,比如Linux上,并监听某个端口,等待客户端连接。 客户端运行在需要穿透的内网机器上,比如本地电脑上,连接到服务器之后,服务器开始监听客户端需要穿透的指定端口。 外网用户连接服务器监听的指定端口,然后服务器将用户数据转发到内网客户端,实现内网穿透
服务端运行,监听一个主端口,等待客户端的连接;
客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
服务端fork新的进程监听客户端指定的端口;
外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
服务器端和客户端约定通过7000端口通信,客户端告诉服务端要监听6000端口(客户端配置的remote_port =6000),然后外网服务器就会监听是否有连接请求:外网服务器Ip地址:6000,如果有就把连接给客户端,这样就可以达到内网穿透的目的。
#默认端口7000,就是客户端和服务端通信的端口,不是你转发的那个端口,如果要改端口,客户端和服务端两边的配置文件都要改 bindport = 7000 auth.token = "umui.cn" # 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。 webServer.addr = "0.0.0.0" webServer.port = 7500 # dashboard 用户名密码,可选,默认为空 webServer.user = "admin" webServer.password = "admin" # 配置http和https服务要监听的端口,这两个端口也要在阿里云安全组上放开,且不能是服务器已经使用的端口 # 为将服务器的80端口做http,443端口做https,原理就像nginx一样,可以多个网站使用这两个端口。 vhosthttpport = 80 vhosthttpsport = 443 # ===================== 日志核心配置 ===================== [log] # 输出目标:文件路径(绝对路径)或 stdout(控制台) to = "/var/log/frp/frps.log" # 服务端示例,客户端可改为 frpc.log # 日志级别 level = "info" # 日志保留天数 maxDays = 7 # 禁用控制台彩色输出(文件日志无乱码) disablePrintColor = true
[common] server_addr = 云服务器公网IP #frps服务端所在的公网IP server_port = 7000 # 默认端口7000,就是客户端和服务端通信的端口,不是你转发的那个端口,如果要改端口,客户端和服务端两边的配置文件都要改 auth.token = "umui.cn" #与服务器秘钥一致 [[proxies]] name = "web01" type = "tcp" localIP = "127.0.0.1" localPort = 80 remotePort = 80 # 目前支持 v1 和 v2 两个版本的 proxy protocol 协议。 transport.proxyProtocolVersion = "v2" 使用frp内网穿透时获取用户的真实ip [[proxies]] name = "webhttps" type = "tcp" localIP = "127.0.0.1" localPort = 443 remotePort = 443 # 目前支持 v1 和 v2 两个版本的 proxy protocol 协议。 transport.proxyProtocolVersion = "v2" 使用frp内网穿透时获取用户的真实ip
./frps {start|stop|restart|status|config|version}
Windows黑窗口使用命令
frpc.exe -c frpc.toml # windown上启动客户端
linux终端使用命令
./frpc {start|stop|restart|status|config|version} # linux上启动客户端
frp穿透服务已经成功了,我们再查看下frp面板,浏览器地址栏输入:服务器公网IP+7500
如果frp客户端配置在Linux上,远程连接
连接:
ssh -o Port=6001 test@x.x.x.x
注:test为内网机器的用户名,x.x.x.x为服务器的公网IP,连接时需要输入内网test用户的密码
vim /usr/lib/systemd/system/frps.service
[Unit] Description=frps After=network.target [Service] TimeoutStartSec=30 ExecStart=/home/frps/frps -c /home/frps/frps.toml #这里是执行文件的路径和配置文件的路径 ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target
systemctl start frps.service #启动
systemctl stop frps.service #停止
systemctl restart frps.service #重启
systemctl enable frps.service #开机启动
systemctl disable frps.service #开机不启动
systemctl status frps.service
systemctl list-units --type=service
vim /usr/lib/systemd/system/frpc.service
[Unit] Description=frpc daemon After=syslog.target network.target Wants=network.target [Service] Type=simple #此处的路劲地址根据自己的实际放置的地址进行修改 ExecStart=/home/frpc/frpc -c /home/frpc/frpc.toml Restart=always RestartSec=1min [Install] WantedBy=multi-user.target
systemctl start frpc.service #启动
systemctl stop frpc.service #停止
systemctl restart frpc.service #重启
systemctl enable frpc.service #开机启动
systemctl disable frpc.service #开机不启动
systemctl status frpc.service
systemctl list-units --type=service
[Unit] Description=Frp Server Service # 服务描述 After=network.target # frps 将会在 network.service 启动完毕之后再启动 [Service] Type=simple # 不论进程是否启动成功,systemctl start 都执行成功 User=nobody # 设置进程在执行时使用的用户 为了不报错 最好直接用 root Restart=on-failure # on-failure 表示仅在服务进程异常退出时重启 RestartSec=5s # 设置在重启服务前暂停多长时间 ExecStart=/usr/bin/frps -c /etc/frp/frps.ini # 在启动该服务时需要执行的命令行 [Install] WantedBy=multi-user.target # 用于 systemctl enable 时创建软连接
>> 下载地址:
密码:bpcd
特征
为 XTCP 代理和访客添加 NAT 穿越配置选项。支持禁用辅助地址,以避免在 NAT 穿透期间使用速度较慢的 VPN 连接。
增强了 OIDC 客户端配置,支持自定义 TLS 证书验证和代理设置。新增了trustedCaFileOIDC令牌端点连接的选项insecureSkipVerify。proxyURL
添加了详细的 Prometheus 指标,proxy_counts_detailed指标中包含代理类型和代理名称标签,从而可以监控单个代理连接,而不仅仅是聚合计数。
特征
支持从文件中加载身份验证令牌的 tokenSource。
修复
修复了 SSH 隧道网关错误地绑定到 proxyBindAddr 而不是 bindAddr 的问题,这导致当 proxyBindAddr 设置为 127.0.0.1 时,外部连接失败。
为Android系统开启兼容模式,解决时区问题和默认DNS解析失败导致的日志时间不正确的问题。
在严格配置模式下支持YAML合并功能(锚点和带点前缀字段的引用),而不需要——strict-config=false参数。•在UDP代理中支持代理协议,以保留真实的客户端IP地址。
注释
引入的功能开关:此版本引入了一种名为 “功能开关” 的全新实验机制。这使得用户能够在特定的实验性功能正式发布之前启用或禁用它们。功能开关可以在配置文件中的 “featureGates” 映射中进行配置。
虚拟网络(VirtualNet)功能开关:第一个可用的功能开关是 “虚拟网络(VirtualNet)”,它启用了实验性的虚拟网络功能(目前处于测试版阶段)。
功能
虚拟网络(VirtualNet):引入实验性的虚拟网络功能(测试版)。这允许创建一个由 frp 管理的 TUN 设备,实现 frp 网络内不同客户端之间的三层连接。需要 root / 管理员权限,目前在 Linux 和 macOS 系统上受支持。通过 “virtualNet” 部分和 “virtual_net” 插件进行配置。通过 “虚拟网络(VirtualNet)” 功能开关启用该功能。注意:作为测试版功能,配置细节在未来的版本中可能会发生变化。
修复
修复了 https2http 和 https2https 插件未启用 HTTP/2 的问题。
修复 INI 配置参数默认值与其他配置格式不一致的问题。
变化
将默认值从 60 更新为 30。transport.tcpMuxKeepaliveInterval
在Android平台上,只有在无法获取默认DNS服务器时才会使用Google DNS服务器。
特征
https2http插件现在支持 Header。https2httpsX-Forwared-For
修复
X-Forwared-For现在,在对代理类型 HTTP 的后端服务器的请求中正确设置了标头。
特征
支持使用 go 模板语法在 TOML/YAML/JSON 配置文件中映射范围端口。
例如:
{{- range $_, $v := parseNumberRangePair "6000-6006,6007" "6000-6006,6007" }}
[[proxies]]
name = "tcp-{{ $v.First }}"
type = "tcp"
localPort = {{ $v.First }}
remotePort = {{ $v.Second }}
{{- end }}
这将创建 8 个代理,例如 .tcp-6000, tcp-6001, ... tcp-6007
健康检查支持自定义请求头。
修复
修复按天轮换日志的间隔时间不正确的问题。
默认禁用quic-go的ECN支持。它可能会导致某些操作系统出现问题。
没有功能更改,只是修复了 0.55.0 版中没有发布资产的问题。
显著变化
支持的最低 Go 版本已更新为 。在新版本的 Go 中,默认支持的最低 TLS 版本已更改为 。1.22TLS 1.2
的默认值已从 更改为 。如果配置文件使用不存在的配置项目或出现拼写错误,则应用程序将引发错误。此启动参数是在版本 中引入的。如果希望继续使用旧行为,则需要显式设置 。--strict-configfalsetruev0.53.0--strict-config=false
特征
代理支持配置注解,注解将显示在 frps 仪表板中。
变化
删除了对 kcp-go 和 beego log 的分叉版本的依赖,kcp-go 现在使用上游版本,golib/log 取代了 beego log。
弃用通知
不推荐在标志名称中使用下划线,并已替换为连字符。下划线格式将在一段时间内保持兼容,直到在将来的版本中完全删除。例如,替换为 。--remote_port--remote-port
特征
和 按钮已添加到 frps 的仪表板中。RefreshClearOfflineProxies
修复
路由规则中的主机/域匹配已更改为不区分大小写。
修复
FRPC在登录时有一定的几率恐慌:关闭关闭通道。
特征
添加了新的命令行参数以启用严格的配置验证模式。它将为未知字段抛出错误,而不是忽略它们。在未来的版本中,我们会将此参数的默认值设置为 true,以避免配置错误。--strict_config
支持。使用此功能,您可以在不运行 frpc 的情况下公开本地服务,只需使用 SSH。与 frpc 代理相比,SSH 反向隧道代理具有许多功能限制。目前支持的代理类型包括 tcp、http、https、tcpmux 和 stcp。SSH reverse tunneling
frpc tcpmux 命令行参数已更新为支持配置 和 。http_userhttp_pwd
frpc stcp/sudp/xtcp 命令行参数已更新为支持配置 .allow_users
修复
frpc:首次登录尝试失败并退出时返回代码 1。
当 auth.method 为 且 auth.additionalScopes 包含 时,如果获取 AccessToken 失败,则应用程序将无响应。oidcHeartBeats