FRP内网穿透服务

frp 的作用

利用处于防火墙后的机器,对外网环境提供 http 或 https 服务。

对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。

利用处于防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司局部环境的主机。

有了内网穿透你能干什么?

远程访问内网的 http/https 服务
远程桌面(Windows/Mac)
远程文件、 SSH
小程序开发
有了内网穿透在外访问家里的电脑、NAS、树莓派、摄像头等网络设备或远程控制,那都不是事儿~
frp是一个开源的内网穿透应用,有客户端软件和服务端软件,大概工作过程如下:

服务端运行在具有公网IP的服务器上,比如Linux上,并监听某个端口,等待客户端连接。
客户端运行在需要穿透的内网机器上,比如本地电脑上,连接到服务器之后,服务器开始监听客户端需要穿透的指定端口。
外网用户连接服务器监听的指定端口,然后服务器将用户数据转发到内网客户端,实现内网穿透

frp工作原理

服务端运行,监听一个主端口,等待客户端的连接;

客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;

服务端fork新的进程监听客户端指定的端口;

外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;

客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

原理简单解释

服务器端和客户端约定通过7000端口通信,客户端告诉服务端要监听6000端口(客户端配置的remote_port =6000),然后外网服务器就会监听是否有连接请求:外网服务器Ip地址:6000,如果有就把连接给客户端,这样就可以达到内网穿透的目的。

配置http穿透

  • 有域名配置http穿透

编辑frps.ini文件

#默认端口7000,就是客户端和服务端通信的端口,不是你转发的那个端口,如果要改端口,客户端和服务端两边的配置文件都要改
bind_port = 7000 

# 控制台配置,frp的web管理控制台的用户名和密码,7500是默认端口(所以前面把7500端口提前放开了),可以通过服务端ip+7500端口登录
dashboard_port = 7500 
dashboard_user = admin 
dashboard_pwd = admin

# 配置http和https服务要监听的端口,这两个端口也要在阿里云安全组上放开,且不能是服务器已经使用的端口
# 为将服务器的80端口做http,443端口做https,原理就像nginx一样,可以多个网站使用这两个端口。
vhost_http_port = 80
vhost_https_port = 443

编辑frpc.ini文件

[common]
server_addr = 云服务器公网IP        #frps服务端所在的公网IP
server_port = 7000        # 默认端口7000,就是客户端和服务端通信的端口,不是你转发的那个端口,如果要改端口,客户端和服务端两边的配置文件都要改

[ssh]        # frp内网穿透通道的名称,一定要唯一,自定义
type = tcp    # 连接类型
local_ip = 127.0.0.1    # 本地的地址
local_port = 22        # 穿透到本地内网的端口号
remote_port = 6000    # 本次TCP服务要监听的端口,就是外网服务器要监听的端口

# 自己有域名配置http穿透,要将指定域名解析到frps服务端的IP上。
[httptest]    # frp内网穿透通道的名称,一定要唯一,自定义
type = http    # 连接类型
local_ip = 127.0.0.1    # 本地的地址
local_port = 8081    # 穿透到本地内网的端口号
custom_domains = test.yang.com    # 填写你已经解析到frps服务端IP上的域名
# custom_domains = 这里填写你已经解析到frps服务端IP上的域名,自己每个穿透对应服务,都可以绑定一个专属域名用于访问,包括使用tcp和udp协议。然后就可以通过这个已经自定义域域名访问到自己的对应HTTP服务。

另外一种配置方式

有域名的http穿透是通过在frpc.ini中配置custom_domains域名,还有另外一种方式,就是在当 frp服务器frps.ini 中配置了 subdomain_host 参数(配置二级域名),并为所有用户提供了子域名服务.那么此时可以在frpc.ini中使用 subdomain 参数,其参数值应仅为主机头 .

例如:服务器frps.ini提供了subdomain_host= frp.com 的泛域名服务,那么在frpc.ini中设置 subdomain = nas 就可以使用 nas.frp.com 来穿透本条服务,当然主机头也是唯一性的,先到先得.此种配置多数用于 自建frps服务器 ,方便自己使用一个域名的泛域名来配置穿透.

  • 无域名配置http穿透

编辑frps.ini文件

#默认端口7000,就是客户端和服务端通信的端口,不是你转发的那个端口,如果要改端口,客户端和服务端两边的配置文件都要改
bind_port = 7000 

# 控制台配置,frp的web管理控制台的用户名和密码,7500是默认端口(所以前面把7500端口提前放开了),可以通过服务端ip+7500端口登录
dashboard_port = 7500 
dashboard_user = admin 
dashboard_pwd = admin

编辑frpc.ini文件

[common]
server_addr = 云服务器公网IP        #frps服务端所在的公网IP
server_port = 7000        # 默认端口7000,就是客户端和服务端通信的端口,不是你转发的那个端口,如果要改端口,客户端和服务端两边的配置文件都要改

[httpname]        # frp内网穿透通道的名称,一定要唯一,自定义
type = tcp    # 连接类型
local_ip = 127.0.0.1    # 本地的地址
local_port = 8082    # 穿透到本地内网的端口号
remote_port = 6000    # 访问公网IP+6000就可以访问127.0.0.1:8082了


启动

要先启动frp服务端

./frps -c ./frps.ini &    #后台启动
nohup ./frps -c ./frps.ini &  #后台启动

再启动frp客户端

Windows黑窗口使用命令

frpc.exe -c frpc.ini  # windown上启动客户端

linux终端使用命令

./frpc -c frpc.ini  # linux上启动客户端

查看面板

frp穿透服务已经成功了,我们再查看下frp面板,浏览器地址栏输入:服务器公网IP+7500

如果frp客户端配置在Linux上,远程连接

连接:

ssh -o Port=6001 test@x.x.x.x

注:test为内网机器的用户名,x.x.x.x为服务器的公网IP,连接时需要输入内网test用户的密码


服务开机自启动/重启/查看状态命令

FRPS

vim /usr/lib/systemd/system/frps.service
[Unit]
Description=frps
After=network.target

[Service]
TimeoutStartSec=30
ExecStart=/home/frps/frps -c /home/frps/frps.ini  
#这里是执行文件的路径和配置文件的路径
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

FRPC

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

解析一下



[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 时创建软连接 


第一、启动、终止、重启

systemctl start frpc.service #启动

systemctl stop frpc.service #停止

systemctl restart frpc.service #重启

第二、设置开机启动/关闭

systemctl enable frpc.service #开机启动

systemctl disable frpc.service #开机不启动

第三、检查frpc状态

systemctl status frpc.service

第四、查看所有已启动的服务

systemctl list-units --type=service

版本更新

下载地址:

FRP下载地址

Down: 蓝秦网盘 Down蓝秦网盘

密码:bpcd

  • v0.53.2

修复

FRPC在登录时有一定的几率恐慌:关闭关闭通道。

  • v0.53.0

特征

添加了新的命令行参数以启用严格的配置验证模式。它将为未知字段抛出错误,而不是忽略它们。在未来的版本中,我们会将此参数的默认值设置为 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

评论留言
验证码
一共0条留言
︿