Featured image of post 使用 frp 完成内网穿透

使用 frp 完成内网穿透

简单记录一下配置的过程

很长一段时间里,我一直是同时使用多台设备工作的,但这种工作流比较令人恼火的是,我必须要一直把这些电脑都带在身边——当你同时有两台游戏本和一台 Mac Book Pro 的时候,即使你的力量可以轻松负担这几块砖头加在一起的重量,你也要掂量掂量你的包能不能扛得住。所以,我常常会想,如果能只带一台电脑、远程操控其他设备就好了。

然而,基础的计算机知识告诉我们,除非是位于同一个局域网中,否则想要访问一台设备就需要公网 IP,而国情在此显然想要拿到公网 IP 也不是什么简单的事情。于是我就想,那能不能曲线救国,搞到一台服务器进行转发呢?好奇心驱使下我进行了相关资料的检索,发现这种技术早就有了,那就是内网穿透。

本文的重点不是介绍内网穿透的各种技术细节——我也不懂这些。事实上,现在想要做内网穿透也不需要懂这些,因为现有的一些工具已经可以让我们十分轻松地完成这一过程。而我在搭建内网穿透过程中使用的工具,就叫做 frp

1 前置条件

使用 frp 进行内网穿透的前置条件其实非常简单,那就是除了你要访问的本地机器之外,还要有一台有公网 IP 的服务器。服务器还是比较好搞,在阿里云这种大的厂商那就可以买到。值得一提的是,做内网穿透的服务器其实并不是很需要高配,更重要的参数是带宽,小水管服务器使用起来势必体验很差,所以我比较推荐买一个 2 核 2 G 的丐中丐服务器,然后把带宽设置为按量计费。

另外,使用 frp 可能会用到一些不常用的端口,所以可以在安全组配置里直接开放所有端口,

接着,我们分别在本地机器上和服务器上下载对应版本的 frp,下载地址就在官方仓库的 release 中。下载后解压即可。

2 服务器配置

使用 frp 的时候,服务器和本地机器上都需要编写相应的配置文件。服务器这边的配置相对来说比较简单,我们可以在家目录下创建一个 frps.toml

1
2
3
4
5
bindPort = 7000 # 运行在服务器的 7000 端口上;可以自行设置,和本地机器配置保持一致即可

# 使用 token 校验
auth.method = "token"
auth.token  = "Replace with your token"

然后,我们 cd 到刚才解压的 frp 文件夹,这里你应该可以找到 frps 这个二进制文件。运行 frps -c ~/frps.toml 即可。

3 本地机器配置

本地机器同样需要这样一个配置文件。我们可以在家目录下创建一个 frpc.toml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
serverAddr = "<your server ip>"
serverPort = 7000 # 和刚才服务器设置的端口保持一致

auth.method = "token"
auth.token  = "Replace with your token"

[[proxies]]
name = "ssh" # 名字随便取
type = "tcp"
localIP = "127.0.0.1"
localPort = 22 # 本地机器服务运行的端口;这个应用是用来跑 ssh 的,一般是开放 22 端口
remotePort = 6000 # 映射到服务器上的端口

[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8080
remotePort = 8080

然后,我们 cd 到解压好的 frp 文件夹,这里你可以找到 frpc 这个二进制文件。运行 frpc -c ~/frpc.toml 即可。

4 开始享受

此时,我们的服务就算是跑起来了。我们可以尝试着 ssh 到我们的本地机器:

1
ssh -p 6000 <local-machine-user-name>@<your-server-ip>

需要注意的是,如果你是要远程连接到你的 mac,可能需要先在通用 -> 共享 -> 高级中打开远程登录。

我们还可以在本地的 8080 端口跑一个服务器,然后就可以通过 <your-server-ip>:8080 访问到这个服务。

使用 Hugo + Stack 主题构建