内网穿透工具 Frp 配置文件示例(中文翻译版)
若有错误,恳请指正
cicii翻译于2024年5月19日
GitHub - fatedier/frp
服务端配置文件 frps.toml
# frps.toml
# 此配置文件仅供参考。请不要直接使用此配置来运行程序,因为它可能存在各种问题。
# 必须包含IPv6的文本地址或主机名在方括号中,例如 [::1]:80 、 [IPv6-host]:http 或 [IPv6-host%zone]:80 。对于单个 bindAddr 字段,不需要方括号,例如 bindAddr = "::" 。
bindAddr = "0.0.0.0"
bindPort = 7000
# 用于KCP协议的UDP端口,它可以与 bindPort 相同。如果未设置,则在frp中禁用KCP协议。
kcpBindPort = 7000
# 用于QUIC协议的UDP端口。如果未设置,则QUIC将在frp中禁用。
# quicBindPort = 7002
# 指定代理将监听的地址,默认值与 bindAddr 相同。
# proxyBindAddr = "127.0.0.1"
# QUIC协议选项
# transport.quic.keepalivePeriod = 10
# transport.quic.maxIdleTimeout = 30
# transport.quic.maxIncomingStreams = 100000
# 心跳配置,不建议修改默认值, heartbeatTimeout 的默认值为90,设置负值以禁用它。
# transport.heartbeatTimeout = 90
# 每个代理中的池计数将保留不超过 maxPoolCount 。
transport.maxPoolCount = 5
# 如果使用TCP多路复用技术,则默认值为 true 。
# transport.tcpMux = true
# 指定TCP多路复用的保活间隔,仅当 tcpMux 为 true 时才有效。
# transport.tcpMuxKeepaliveInterval = 60
# tcpKeepalive 指定frpc和frps之间活动网络连接的保活探测器之间的间隔。如果为负数,则禁用保活探测器。
# transport.tcpKeepalive = 7200
# transport.tls.force 指定是否仅接受TLS加密的连接。默认情况下,该值为 false 。
transport.tls.force = false
# transport.tls.certFile = "server.crt"
# transport.tls.keyFile = "server.key"
# transport.tls.trustedCaFile = "ca.crt"
# 如果要支持虚拟主机,则必须设置用于监听的HTTP端口(可选)。注意:HTTP端口和HTTPS端口可以和 bindPort 一样。
vhostHTTPPort = 80
vhostHTTPSPort = 443
# vhostHTTP服务器的响应标头超时(秒),默认为60秒。
# vhostHTTPTimeout = 60
# tcpmuxHTTPConnectPort 指定服务器监听HTTP连接请求的TCP端口。
# 如果该值为0,则服务器不会在一个端口上TCP多路复用请求。
# 如果该值不为0,它将监听HTTP连接请求的TCP端口。默认情况下,此值为0。
# tcpmuxHTTPConnectPort = 1337
# 如果 tcpmuxPassthrough 为 true ,则frps不会对流量进行任何更新。
# tcpmuxPassthrough = false
# 配置Web服务器以启用frps仪表板。仪表板仅当设置了 webServer.port 时才可用。
webServer.addr = "127.0.0.1"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
# webServer.tls.certFile = "server.crt"
# webServer.tls.keyFile = "server.key"
# 仪表板资产目录(仅适用于调试模式)
# webServer.assetsDir = "./static"
# 在仪表板监听器中启用golang pprof处理程序。必须先设置仪表板端口。
webServer.pprofEnable = false
# enablePrometheus 将在 /metrics api 中导出 webServer 上的 prometheus 指标。
enablePrometheus = true
# 控制台或实际日志文件路径,如 ./frps.log 。
log.to = "./frps.log"
# 跟踪、调试、信息、警告、错误
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# log.to 为控制台时是否禁用日志颜色,默认为 false 。
log.disablePrintColor = false
# DetailedErrorsToClient 定义是否将特定错误(带有调试信息)发送到frpc。默认情况下,此值为 true 。
detailedErrorsToClient = true
# auth.method 指定使用哪种认证方式对frpc与frps之间进行认证。
# 如果指定了 token ,令牌将被读入登录消息中。
# 如果指定了 oidc ,将使用OIDC设置颁发OIDC令牌。默认情况下,此值为 token 。
auth.method = "token"
# auth.additionalScopes 指定包含其他范围的身份验证信息,可选值为 HeartBeats 、 NewWorkConns 。
# auth.additionalScopes = ["HeartBeats", "NewWorkConns"]
# 身份验证令牌
auth.token = "12345678"
# OIDC颁发者指定用于验证OIDC令牌的颁发者。
auth.oidc.issuer = ""
# oidc audience 指定验证时OIDC令牌应包含的受众。
auth.oidc.audience = ""
# oidc skipExpiryCheck 指定是否跳过检查OIDC令牌是否过期。
auth.oidc.skipExpiryCheck = false
# oidc skipIssuerCheck 指定是否跳过检查OIDC令牌的颁发者声明是否与 OidcIssuer 中指定的颁发者匹配。
auth.oidc.skipIssuerCheck = false
# userConnTimeout 指定等待工作连接的最长时间。
# userConnTimeout = 10
# 只允许frpc绑定你列出的端口。默认情况下,不会有任何限制。
allowPorts = [
{ start = 2000, end = 3000 },
{ single = 3001 },
{ single = 3003 },
{ start = 4000, end = 50000 }
]
# 每个客户端可以使用的最大端口数,默认值为0表示没有限制。
maxPortsPerClient = 0
# 如果 subDomainHost 不为空,则可以在frpc的配置文件中设置 type 为 http 或 https 时的 subdomain 。
# 当子域为 test 时,路由使用的主机为 test.frps.com 。
subDomainHost = "frps.com"
# HTTP请求的自定义404页面。
# custom404Page = "/path/to/404.html"
# 指定UDP数据包大小,单位为字节。如果未设置,则默认值为1500。客户端和服务器之间的参数应该相同。它会影响UDP和SUDP代理。
udpPacketSize = 1500
# NAT打孔分析数据的保留时间。
natholeAnalysisDataReserveHours = 168
# SSH隧道网关
# 如果要启用此功能,则 bindPort 参数是必需的,而其他参数是可选的。
# 默认情况下,此功能处于禁用状态。如果 bindPort 大于0,则启用它。
# sshTunnelGateway.bindPort = 2200
# sshTunnelGateway.privateKeyFile = "/home/frp-user/.ssh/id_rsa"
# sshTunnelGateway.autoGenPrivateKeyPath = ""
# sshTunnelGateway.authorizedKeysFile = "/home/frp-user/.ssh/authorized_keys"
[[httpPlugins]]
name = "user-manager"
addr = "127.0.0.1:9000"
path = "/handler"
ops = ["Login"]
[[httpPlugins]]
name = "port-manager"
addr = "127.0.0.1:9001"
path = "/handler"
ops = ["NewProxy"]
客户端配置文件 frpc.toml
# frpc.toml
# 此配置文件仅供参考。请不要直接使用此配置来运行程序,因为它可能存在各种问题。
# 您的代理名称将更改为 {user}.{proxy} 。
user = "your_name"
# 必须包含IPv6的文本地址或主机名在方括号中,例如 [::1]:80 、 [IPv6-host]:http 或 [IPv6-host%zone]:80 。对于单个 serverAddr 字段,不需要方括号,例如 serverAddr = "::" 。
serverAddr = "0.0.0.0"
serverPort = 7000
# STUN服务器帮助穿透NAT孔。
# natHoleStunServer = "stun.easyvoip.com:3478"
# 决定首次登录失败时是否退出程序,否则连续重新登录frps,默认值为 true 。
loginFailExit = true
# 控制台或实际日志文件路径,如 ./frpc.log 。
log.to = "./frpc.log"
# 跟踪、调试、信息、警告、错误
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# log.to为控制台时是否禁用日志颜色,默认为 false 。
log.disablePrintColor = false
auth.method = "token"
# auth.additionalScopes 指定包含其他范围的身份验证信息,可选值为 HeartBeats 、 NewWorkConns 。
# auth.additionalScopes = ["HeartBeats", "NewWorkConns"]
# 身份验证令牌
auth.token = "12345678"
# oidc.clientID 指定用于获取OIDC认证令牌的客户端ID。
# auth.oidc.clientID = ""
# oidc.clientSecret 指定用于在OIDC身份验证中获取令牌的客户端密钥。
# auth.oidc.clientSecret = ""
# oidc.audience 指定OIDC身份验证中令牌的受众。
# auth.oidc.audience = ""
# 如果 AuthenticationMethod == "oidc" , oidc.scope 指定令牌在OIDC身份验证中的权限。默认情况下,此值为 "" 。
# auth.oidc.scope = ""
# oidc.tokenEndpointURL 指定实现OIDC Token Endpoint的URL。它将用于获取OIDC令牌。
# auth.oidc.tokenEndpointURL = ""
# oidc.additionalEndpointParams 指定要发送到OIDC Token Endpoint的其他参数。
# 例如,如果要指定 audience 参数,可以设置如下。
# frp会将 audience=<value> 、 var1=<value> 添加到附加参数中。
# auth.oidc.additionalEndpointParams.audience = "https://dev.auth.com/api/v2/"
# auth.oidc.additionalEndpointParams.var1 = "foobar"
# 通过http api设置控制frpc操作的管理员地址,例如重新加载。
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
# 管理员资产目录。默认情况下,这些资产与frpc绑在一起。
# webServer.assetsDir = "./static"
# 在管理员监听器中启用golang pprof处理程序。
webServer.pprofEnable = false
# 拨号到服务器等待连接完成的最长时间。默认值为10秒。
# transport.dialServerTimeout = 10
# dialServerKeepalive 指定frpc和frps之间活动网络连接的保活探测器之间的间隔。如果为负数,则禁用保活探测器。
# transport.dialServerKeepalive = 7200
# 连接会提前建立,默认值为0。
transport.poolCount = 5
# 如果使用TCP多路复用技术,则默认值为 true ,它必须与frps相同
# transport.tcpMux = true
# 指定TCP多路复用的保活间隔,仅当 tcpMux 为 true 时才有效。
# transport.tcpMuxKeepaliveInterval = 60
# 用于连接服务器的通信协议。
# 现在支持TCP、KCP、QUIC、WEBSOCKET和WSS,默认为TCP。
transport.protocol = "tcp"
# 连接服务器时设置客户端绑定IP,默认为空。
# 仅当 protocol = tcp 或 protocol = websocket 时,才会使用该值。
transport.connectServerLocalIP = "0.0.0.0"
# 如果要通过HTTP代理或SOCKS5代理或NTLM代理连接frps, 您可以在此处或在全局环境变量中设置 proxyURL 。它仅在 protocol 为TCP时才有效。
# transport.proxyURL = "http://user:passwd@192.168.1.128:8080"
# transport.proxyURL = "socks5://user:passwd@192.168.1.128:1080"
# transport.proxyURL = "ntlm://user:passwd@192.168.1.128:2080"
# QUIC协议选项
# transport.quic.keepalivePeriod = 10
# transport.quic.maxIdleTimeout = 30
# transport.quic.maxIncomingStreams = 100000
# 如果 tls.enable 为 true ,则frpc将通过TLS连接frps。
# 从v0.50.0开始,默认值已更改为 true ,并且默认启用TLS。
transport.tls.enable = true
# transport.tls.certFile = "client.crt"
# transport.tls.keyFile = "client.key"
# transport.tls.trustedCaFile = "ca.crt"
# transport.tls.serverName = "example.com"
# 如果 disableCustomTLSFirstByte 设置为 false , 当启用TLS时,frpc将使用第一个自定义字节与frps建立连接。
# 从v0.50.0开始,默认值已更改为 true ,并且默认禁用第一个自定义字节。
# transport.tls.disableCustomTLSFirstByte = true
# 心跳配置,不建议修改默认值。
# heartbeatInterval 默认值为10, heartbeatTimeout 默认值为90。设置负值以禁用它。
# transport.heartbeatInterval = 30
# transport.heartbeatTimeout = 90
# 指定DNS服务器,frpc将使用它而不是使用默认的。
# dnsServer = "8.8.8.8"
# 你想要启动的代理名称。默认值为空,表示所有代理。
# start = ["ssh", "dns"]
# 指定UDP数据包大小,单位为字节。如果未设置,则默认值为1500。此参数在客户端和服务器之间应相同。它会影响UDP和SUDP代理。
udpPacketSize = 1500
# 客户端的其他 metadatas 。
metadatas.var1 = "abc"
metadatas.var2 = "123"
# 包含其他的代理配置文件。
# includes = ["./confd/*.ini"]
[[proxies]]
# ssh 是唯一的代理名称。如果全局 user 不为空,它将更改为 {user}.{proxy} 如 your_name.ssh 。
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
# 限制此代理的带宽,单位为KB和MB。
transport.bandwidthLimit = "1MB"
# 限制带宽的位置,可以是 client 或 server ,默认为 client 。
transport.bandwidthLimitMode = "client"
# 如果为 true ,则此代理的流量将被加密,默认为 false 。
transport.useEncryption = false
# 如果为 true ,则流量将被压缩。
transport.useCompression = false
# 远程frps上的监听端口
remotePort = 6001
# frps将对同一组中的代理的连接进行负载均衡。
loadBalancer.group = "test_group"
# 组应具有相同的组密钥
loadBalancer.groupKey = "123456"
# 后端服务开启健康检查,现在支持 tcp 和 http 。
# frpc将连接本地服务端口以检测其运行状态。
healthCheck.type = "tcp"
# 健康检查连接超时
healthCheck.timeoutSeconds = 3
# 如果连续失败3次,代理将从frps中移除。
healthCheck.maxFailed = 3
# 每10秒做一次健康检查。
healthCheck.intervalSeconds = 10
# 每个代理的其他 metadatas 。它将被传递给服务器端插件以供使用。
metadatas.var1 = "abc"
metadatas.var2 = "123"
# 你可以通过注解给代理添加一些额外的信息。这些注解会显示在frps仪表盘上。
[proxies.annotations]
key1 = "value1"
"prefix/key2" = "value2"
[[proxies]]
name = "ssh_random"
type = "tcp"
localIP = "192.168.31.100"
localPort = 22
# 如果 remotePort 为0,frps会随机为你分配一个端口。
remotePort = 0
[[proxies]]
name = "dns"
type = "udp"
localIP = "114.114.114.114"
localPort = 53
remotePort = 6002
# 将您的域名解析为 serverAddr 。因此,您可以使用 http://web01.yourdomain.com 浏览Web01和 http://web02.yourdomain.com 浏览Web02。
[[proxies]]
name = "web01"
type = "http"
localIP = "127.0.0.1"
localPort = 80
# httpUser 和 httpPassword 是HTTP协议的安全认证。
# 如果没有设置,你可以在没有证书的情况下访问这个 customDomains 。
httpPassword = "admin"
# 如果给frps设置的域名为frps.com,那么你可以通过URL访问 [web01]代理(http://web01.frps.com)。
subdomain = "web01"
customDomains = ["web01.yourdomain.com"]
# locations 仅适用于HTTP类型。
locations = ["/", "/pic"]
# 如果HTTP基本认证的用户名是abc,则将请求路由到这个服务。
# routeByHTTPUser = abc
hostHeaderRewrite = "example.com"
requestHeaders.set.x-from-where = "frp"
responseHeaders.set.foo = "bar"
healthCheck.type = "http"
#frpc将会向本地的HTTP服务发送一个GET请求,请求的路径是 /status 。
# 当HTTP服务返回 2xx HTTP响应状态码时,它处于活动状态。
healthCheck.path = "/status"
healthCheck.intervalSeconds = 10
healthCheck.maxFailed = 3
healthCheck.timeoutSeconds = 3
# 设置健康检查头
healthCheck.httpHeaders=[
{ name = "x-from-where", value = "frp" }
]
[[proxies]]
name = "web02"
type = "https"
localIP = "127.0.0.1"
localPort = 8000
subdomain = "web02"
customDomains = ["web02.yourdomain.com"]
# 如果不是空的,frpc将使用代理协议将连接信息传输到你的本地服务。
# v1 或 v2 或 "" (空)
transport.proxyProtocolVersion = "v2"
[[proxies]]
name = "tcpmuxhttpconnect"
type = "tcpmux"
multiplexer = "httpconnect"
localIP = "127.0.0.1"
localPort = 10701
customDomains = ["tunnel1"]
# routeByHTTPUser = "user1"
[[proxies]]
name = "plugin_unix_domain_socket"
type = "tcp"
remotePort = 6003
# 如果定义了插件,则 localIP 和 localPort 是无效的。插件将处理从frps获取的连接。
[proxies.plugin]
type = "unix_domain_socket"
unixPath = "/var/run/docker.sock"
[[proxies]]
name = "plugin_http_proxy"
type = "tcp"
remotePort = 6004
[proxies.plugin]
type = "http_proxy"
httpUser = "abc"
httpPassword = "abc"
[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 6005
[proxies.plugin]
type = "socks5"
username = "abc"
password = "abc"
[[proxies]]
name = "plugin_static_file"
type = "tcp"
remotePort = 6006
[proxies.plugin]
type = "static_file"
localPath = "/var/www/blog"
stripPrefix = "static"
httpUser = "abc"
httpPassword = "abc"
[[proxies]]
name = "plugin_https2http"
type = "https"
customDomains = ["test.yourdomain.com"]
[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:80"
crtPath = "./server.crt"
keyPath = "./server.key"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"
[[proxies]]
name = "plugin_https2https"
type = "https"
customDomains = ["test.yourdomain.com"]
[proxies.plugin]
type = "https2https"
localAddr = "127.0.0.1:443"
crtPath = "./server.crt"
keyPath = "./server.key"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"
[[proxies]]
name = "plugin_http2https"
type = "http"
customDomains = ["test.yourdomain.com"]
[proxies.plugin]
type = "http2https"
localAddr = "127.0.0.1:443"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"
[[proxies]]
name = "secret_tcp"
# 如果类型为 secret tcp ,则 remotePort 无效。
# 想要连接本地端口的人应该使用STCP代理部署另一个frpc,角色是 visitors 。
type = "stcp"
# secretKey 用于访客身份验证。
secretKey = "abcdefg"
localIP = "127.0.0.1"
localPort = 22
# 如果不为空,则只有指定用户的访客才能连接。
# 否则,来自同一 user 的 visitors 可以连接。 "*" 表示允许所有用户。
allowUsers = ["*"]
[[proxies]]
name = "p2p_tcp"
type = "xtcp"
secretKey = "abcdefg"
localIP = "127.0.0.1"
localPort = 22
# 如果不为空,则只有指定用户的访客才能连接。
# 否则,来自同一 user 的 visitors 才可以连接。 "*" 表示允许所有用户。
allowUsers = ["user1", "user2"]
# frpc role visitor -> frps -> frpc role server
[[visitors]]
name = "secret_tcp_visitor"
type = "stcp"
# the server name you want to visitor
serverName = "secret_tcp"
secretKey = "abcdefg"
# 将此地址连接到访客STCP服务器。
bindAddr = "127.0.0.1"
# bindPort 可以小于0,这意味着不要绑定到端口,而只接收从其他访问者重定向的连接。(SUDP现在不支持此功能)
bindPort = 9000
[[visitors]]
name = "p2p_tcp_visitor"
type = "xtcp"
# 如果未设置 serverUser ,则默认为当前用户。
serverUser = "user1"
serverName = "p2p_tcp"
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
# bindPort 可以小于0,这意味着不要绑定到端口,而只接收从其他访问者重定向的连接。(SUDP现在不支持此功能)
bindPort = 9001
# 当需要自动隧道持久化时,设置为 true 。
keepTunnelOpen = false
# 当 keepTunnelOpen 设置为 true 时有效,每小时尝试穿孔的次数。
maxRetriesAnHour = 8
minRetryInterval = 90
# fallbackTo = "stcp_visitor"
# fallbackTimeoutMs = 500