frp

Introduction

Frp 是一个 Go 写的内网穿透工具,由于 Go 良好的跨平台性以及静态编译的特带你,所以它非常容易部署。但它默认的方式是通过中转来实现的,所以需要一个外网服务器来部署 frps。

服务端部署

Frp Release 中下载对应版本的frp,解压后就能得到一个frpsfrpc的可执行文件。frps.inifrps的配置文件。具体配置细节可以参考官方文档

以内网穿透 ssh 为例,配置文件大概可以为:

1
2
3
4
5
6
7
8
[common]
bind_port = 7000 # 建议修改掉
log_file = ./frps.log
token = mytoken
# 监控相关
dashboard_port = 7001
dashboard_user = your-username
dashboard_pwd = your-passwd

配置好后,直接./frps -c ./frps.ini

客户端部署

客户端的配置文件为frpc.ini

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = x.x.x.x
server_port = 7000 # 与前面 bind_port 一致
token = mytoken # 与前面 token 一致

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7022

配置好后,./frpc -c ./frpc.ini

这样就可以通过服务器IP和 frpc 中定义的remote_port访问客户端了。

配置 stcp

上面的配置是使用 tcp ,会把端口直接暴露在公网中,所以可能会有些危险。frp 提供了一种更加安全的方式,即 stcp。stcp 要求连接的客户端也同样运行 frpc 连接到 frps,并且连接者和被连接者所使用的 sk 是相同的。

被连接者的 frpc 配置:

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 119.29.188.142
server_port = 7888
token = wuxiaobai24-frp

[stcp-ssh]
type = stcp
sk = mysk
local_ip = 127.0.0.1
local_port = 22

连接者的 frpc 配置:

1
2
3
4
5
6
7
8
9
10
11
12
[common]
server_addr = x.x.x.x
server_port = 7000
token = mytoken

[wsl]
type = stcp
role = visitor
sk = mysk
server_name = stcp-ssh # 与被连接者的服务名相同,即`[]`中的内容
bind_ip = 127.0.0.1
bind_port = 2222

Reference

  1. https://gofrp.org/docs/
  2. https://gofrp.org/docs/examples/stcp/
  3. https://gofrp.org/docs/examples/ssh/

One More Thing

  • stcp 自动部署脚本 #ToDo