frp官方文档:https://gofrp.org/zh-cn/docs/reference/server-configures/

需要一个公网ip服务器运行frps,客户端运行frpc. 值得注意的是,运行frpc的客户端之间可以借助frps实现点对点直连(nat打洞),从而绕开frps(公网服务器)的带宽限制。

frps配置示例

# file:///frps.toml
 
#: Refer to https://gofrp.org/zh-cn/docs/reference/server-configures/
#: for more information.
 
auth.token = "abc" # 用于认证frpc的连接,frpc需要设置同样token才能连接
bindPort = 7000
# kcp 绑定的是 UDP 端口,可以和 bindPort 一样
kcpBindPort = 7000
# quic 绑定的是 UDP 端口,不能和 kcp 的一样
quicBindPort = 7001
 
transport.tls.force = true
 
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"

frpc配置示例

# file:///frpc.toml
 
#: refer to https://gofrp.org/zh-cn/docs
serverAddr = "10.10.10.10"
serverPort = 7000
auth.token = "abc
 
# 开启网页后台
# webServer.addr = "127.0.0.1"
# webServer.port = 7400
# webServer.user = "admin"
# webServer.password = "admin"
 
[[proxies]]
name = "ssh-tunnel"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 8000
 
 
[[proxies]]
name = "p2p_ssh"
type = "xtcp"
# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务
secretKey = "abcdefg"
localIP = "127.0.0.1"
localPort = 22

如此在外网可以通过ssh root@10.10.10.10 -p8000访问内网机器的sshd,流量经过公网服务器转发到内网机器。如果要建立点对点连接,需要在访问内网服务的机器上(下称本机)也执行frpc,作为visitor. 在这种情况下,内网机器frpc作为“服务端”,本机的frpc作为“客户端”。

frpc visitor配置示例

# file:///frpc_visitor.toml
 
#: refer to https://gofrp.org/zh-cn/docs
serverAddr = "10.10.10.10"
serverPort = 7000
auth.token = "abc"
 
[[visitors]]
name = "p2p_ssh_visitor"
type = "xtcp"
protocol = "kcp"
serverName = "p2p_ssh"
# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
bindPort = 3344 # 本地端口
keepTunnelOpen = true

如此可以在本机使用ssh root@127.0.0.1 -p3344访问内网机器的sshd,且流量不用经过frps,绕过了公网服务器的带宽限制。