如今结合文档已经比较清楚了,在这里记录一下几个特殊的使用。

# 服务端

服务端的配置比较简单,主要就是配置一下监听的端口和 token 之类的:

bindPort = 7000
auth.token = "xxxxx"

# 客户端

# 普通服务

一开始想配置 http 服务,看到示例设置了域名,但没有设置端口。按照网上一些教程加上 remotePort 还报错了。实际上如下的配置是需要通过域名来区分不同的服务的,type="http" 的时候,没有 remotePort 这个选项:

serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["www.yourdomain.com"]
[[proxies]]
name = "web2"
type = "http"
localPort = 8080
customDomains = ["www.yourdomain2.com"]

对于一个普通的服务,http 或是其它 tcp 类型,直接使用 tcp 的方式进行:

serverAddr = "x.x.x.x"
serverPort = 7000
auth.token = "xxxxx"
[[proxies]]
name = "test-web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 5500
remotePort = 5500

此时可通过 remotePort 的端口进行访问。

会想起最初使用 frp 的时候没有搞明白这些端口,服务端只是监听客户端的连接,访问的主要端口还是客户端那里配置的。

# STCP

安全的暴露内网服务,本地需要使用 frpc 配置对应的信息后,映射到本地访问,避免直接暴露在公网:

内网服务端 frpc :

serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "secret_ssh"
type = "stcp"
# 只有与此处设置的 secretKey 一致的用户才能访问此服务
secretKey = "abcdefg"
localIP = "127.0.0.1"
localPort = 22

访问者端 frpc:

serverAddr = "x.x.x.x"
serverPort = 7000
[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
# 要访问的 stcp 代理的名字
serverName = "secret_ssh"
secretKey = "abcdefg"
# 绑定本地端口以访问 SSH 服务
bindAddr = "127.0.0.1"
bindPort = 6000

本地通过绑定的端口访问 ssh 服务:

ssh -o Port=6000 test@127.0.0.1

# HTTPS

以前使用 https 是在服务器上加了一层 nginx 转发,https 配置在 nginx 那里的。 frp 本身也支持 https,只需要设置一下证书。

首先服务端需要增加 https 端口设置:

bindPort = 7000
auth.token = "xxxxx"
vhostHTTPSPort = 443

剩下的就是客户端配置证书:

serverAddr = "x.x.x.x"
serverPort = 7000
auth.token = "xxxxx"
[[proxies]]
name = "https_test"
type = "https"
customDomains = ["xx.xxx.com"]
[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:5500"
# HTTPS 证书相关的配置
crtPath = "cert.cer"
keyPath = "cert.key"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"

之后通过指定的域名访问即可通过 https 访问到本地的服务了。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

HuaLin 微信支付

微信支付

HuaLin 支付宝

支付宝