重工电子论坛

标题: FRP设置 [打印本页]

作者: 李维强-15级    时间: 5 天前
标题: FRP设置
https://zhuanlan.zhihu.com/p/1911369835893466869

前言
目的:我希望能从外网环境下连接处于内网的服务器

现在最新frp软件,配置文件已经从.ini 改为了 .toml,而网上的很多攻略比较旧了,还是用的ini格式

stcp 相比于 tcp 更安全,但需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口,避免了很多安全风险。

想了解frp不同模式的原理可见

frp内网穿透的四种模式:tcp、udp、stcp、xtcp - 诸葛东流博客

前期准备:
一个具有公网ip的机器(我所使用的是腾讯云服务器),中转端

一个处于内网的,你所需要内网穿透进行连接的机器,服务端

一个你自己的电脑,访问端

三个配置文件

相同版本的frps和frpc软件:https://github.com/fatedier/frp (自行去github上面去下载相同版本的frp,注意看清楚自己所需要的是window还是linux还是MAC)



配置文件模版:
需要修改的注意事项:

三个配置文件中的auth.token项要一致

两个 frpc.toml 文件中的 serverPort 项要与 frps.toml 中的 bindPort 项要一致

两个 frpc.toml 文件中的 secretKey 项要一致

frpc_provider.toml 中的 name 项 和 frpc_visitor.toml 中的 serverName 项要一致

① 处于内网中的机器的frpc的配置文件,frpc_provider.toml :
# frpc_provider.toml (内网服务提供端配置)

# frps服务器的地址和端口
serverAddr = "xxx.xxx.xxx.xxx"  #你的公网IP,如10.10.10.10
serverPort = myPort1 #可自定义端口,如7011

# 认证方式和token,必须与frps配置一致
auth.method = "token"
auth.token = "mytoken" #自定义

# (可选)如果frps启用了TLS,这里也要启用
# transport.tls.enable = true

# (可选)日志配置
log.to = "./frpc_provider.log"
log.level = "info"
log.maxDays = 100

# 定义一个STCP代理
[[proxies]]
name = "my-ssh"          # 代理名称,需要唯一,访问者将通过此名称指定服务,可自定义
type = "stcp"                # 隧道类型为stcp
secretKey = "mySK" # STCP的加密密钥,访问者必须使用相同的密钥
localIP = "xxx.xxx.xxx.xxx"        # 内网服务的IP地址 (如果是本机服务用127.0.0.1)
localPort = 22               # 内网服务的端口 (SSH默认是22)
② 你自己的电脑的frpc的配置文件,frpc_visitor.toml :
# frpc_visitor.toml (访问端配置)

# frps服务器的地址和端口
serverAddr = "xxx.xxx.xxx.xxx"  #你的公网IP,如10.10.10.10
serverPort = myPort1 #可自定义端口,与frpc_provider.toml中相同,如7011

# 认证方式和token,必须与frps配置一致
auth.method = "token"
auth.token = "mytoken" #自定义

# (可选)如果frps启用了TLS,这里也要启用
# transport.tls.enable = true

# (可选)日志配置
log.to = "./frcp/frpc_visitor.log"
log.level = "info"
log.maxDays = 20

# 定义一个STCP访问者代理
[[visitors]]
name = "secret_ssh_visitor" # 访问端代理的本地名称,可以任意,但建议有意义
type = "stcp"               # 类型必须是stcp
serverName = "my-ssh"   # **必须** 匹配服务提供端 frpc_provider.toml 中定义的代理名称 (proxies.name)
secretKey = "mySK" # 必须 匹配服务提供端 frpc_provider.toml 中定义的 secretKey
bindAddr = "127.0.0.1"      # 访问者frpc在本机监听的地址
bindPort = myport2          # 访问者frpc在本机监听的端口,访问内网服务时连接此端口,可自定义,如6000
③ 具有公网ip的机器的frps的配置文件,frps.toml :
# frps.toml (服务器端配置)

# frps服务监听的端口,用于接收frpc的连接
bindPort = myPort1 #可自定义端口,与frpc_provider.toml和frpc_visitor.toml中相同,如7011


# 认证方式,使用token
auth.method = "token"
# 设置认证token,frpc连接时必须携带此token
auth.token = "mytoken" #自定义



# (可选但推荐)启用TLS加密frpc和frps之间的控制连接
# 如果启用,需要在frpc配置中也添加 transport.tls.enable = true
# transport.tls.enable = true

# (可选)日志配置
log.to = "./frps.log"
log.level = "info" # 可选值: trace, debug, info, warn, error
log.maxDays = 3
启动frp服务
要三端同时启用 frp 服务才能成功内网穿透

服务端:

# linux
frpc -c frpc_provider.toml

#window
frpc.exe -c frpc_provider.toml
中转端(具有公网ip)

# linux
frps -c frps.toml

#window
frps.exe -c frps.toml
访问端

# linux
frpc -c frpc_visitor.toml

#window
frpc.exe -c frpc_visitor.toml
注意事项:

不同操作系统的软件启动有所区别

在自己的电脑上连接内网服务器
ssh -p myport2 usename@127.0.0.1
注:

myport2 为 frpc_visitor.toml 中的 bindPort 项
usename 和你平时在内网登录服务器的用户名一致
127.0.0.1 修改为 frpc_visitor.toml 中的 bindAddr 项
注意事项
①中转端(即具有公网ip地址的机器)的防火墙需要放行 frps.toml 中 bindPort 项设置的端口

②测试服务端和访问端是否能连接得上你的官网机器

#服务端和访问端
ping 10.10.10.10
telnet 10.10.10.10 7011
③测试中转端是否监听frps.toml配置的端口

#中转端
sudo ss -tulnp | grep 7011
万能的报错解决方法
将三个配置文件和软件运行的日志复制发给ai,建议发给 Gemini 2.5 Pro,基本都能解决




欢迎光临 重工电子论坛 (http://www.cqutlab.cn/) Powered by Discuz! X3.1