如今结合文档已经比较清楚了,在这里记录一下几个特殊的使用。
# 服务端
服务端的配置比较简单,主要就是配置一下监听的端口和 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 访问到本地的服务了。