使用 frp 进行内网穿透

· · 个人记录

前言

不想看的同学可以点击跳到我的博客就可以点击跳到正文了

总所周知,在总计 2^{32} 个可用的 IPv4 地址中,可用的仅有 4006967296(约40亿)个。而仅仅中国大陆的网民数量就已经达到了 9亿,全世界更是达到惊人的 45.7亿。很显然 IPv4 连个人用户的需求都无法满足,更别说各类互联网服务所依赖的众多服务器了。现实情况便是,大多数可用的 IPv4 地址都被掌握在 ISP 手中,并未被分发给用户

但是这个时候,聪明的同学就要问了,那 IPv6 呢?IPv6的 2^{128} 个 IP 地址不是永远都用不完么?

这个问题非常好,虽然 IPv6 在全世界逐渐普及开来,但根据 Google 的统计数据,世界范围(不包括中国大陆)内,仅有 33.42% 的用户拥有 IPv6 连接。即便是在中国大陆,在三大运营商都开始在给 LTE 与家庭宽带提供 IPv6 连接时,仍然会有很多用户,例如部分大学、中学、小学、公共网络(机场等)受限于维护成本及设备兼容性等各种原因,无法提供 IPv6 服务。同时,在物理条件的限制之外,所需要的应用程序也可能由于各种原因并不能很好地支持 IPv6。

在这样的条件下,如果我们需要创建或运行互联网程序,并从本机局域网以外的地方访问它的话,就需要我们本篇文章的主角,frp 了。

前置条件

以下条件并非必要,但可能会提升使用体验

(按照推荐程度排序)

正文

服务端设置

Windows

前往 Release 页面下载最新版 Windows 应用

或点击直达 下载 frp 0.34.1 Windows amd64 后解压,编辑文件夹中 frps.ini 文件,格式如下:

[common]
#客户端地址,0.0.0.0意为所有地址,可自行选择
bind_addr = 0.0.0.0
#frp连接端口,随意选择未占用端口即可
bind_port = 7000
#网页端监控的用户名
dashboard_user = Yajuu_Senpai
#网页端监控的密码
dashboard_pwd = 114514
#网页端监控端口
dashboard_port = 7500

打开 cmd 或者 powershellcd 至 frp 所在目录,运行 ./frps.exe -c frps.ini,若出现以下提示,则运行成功。

F:\frp_0.34.1_windows_amd64>frps.exe -c frps.ini
2020/10/16 16:12:56 [I] [service.go:190] frps tcp listen on 0.0.0.0:7000
2020/10/16 16:12:56 [I] [service.go:289] Dashboard listen on 0.0.0.0:7500
2020/10/16 16:12:56 [I] [root.go:212] start frps success

打开浏览器访问 IP 地址:网页端监控端口

输入用户名与密码,即可进入监控页面。服务端设置完成

如果需要更多自定功能可以查看同目录的 frps_full.ini

Linux

鉴于大部分人用的 Linux 都基于 x86/amd64,故仅放出 frp_0.34.1 linux amd64下载链接,如有其他架构版本使用需求,可自行前往 Release 页面下载。

与 Windows 同理,前往想要安装的目录,

mkdir /usr/frp/
cd /usr/frp/

使用

wget https://github.com/fatedier/frp/releases/download/v0.34.1/frp_0.34.1_linux_amd64.tar.gz

命令下载 frp 或手动上传后,使用

tar -zxvf frp_0.34.1_linux_amd64.tar.gz
cd frp_0.34.1_linux_amd64
vim frps.ini

修改完成配置后,使用

./frps -c frps.ini

运行程序,出现

root@iZk83e8lmsn2ltZ:/usr/frp/frp_0.34.1_linux_amd64# ./frps -c frps.ini
2020/10/16 16:30:02 [I] [service.go:190] frps tcp listen on 0.0.0.0:7000
2020/10/16 16:30:02 [I] [service.go:289] Dashboard listen on 0.0.0.0:7500
2020/10/16 16:30:02 [I] [root.go:212] start frps success

即为安装成功。

但是此时如果我们按下 ctrl + c 或断开 ssh 连接,frp 服务器就会停止运行。所以我们还需要在服务器上安装 screen。(不需要后台运行的同学也可以直接跳过)

apt-get/yum install screen

按照自己的 Linux 发行版安装完 screen 后,输入

screen -S frp
cd /usr/frp/
./frps -c frps.ini

然后即使是断开 ssh 连接 frp 服务器也可以保持运行了。

客户端设置

Linux / Windows 的客户端设置方法与服务端设置完全相同,唯二的区别是运行的程序为 frpc.exe / frpc 而非 frps.exe / frps,设置文件也有不同。

[common]
#服务端IP地址
server_addr = 114.514.19.19
#服务端端口
server_port = 810

#单端口转发(名称不能重复,最好只用英文)
[customService]
#类型:tcp/udp/xtcp等
type = tcp
#本地ip地址
local_ip = 127.0.0.1
#本地映射端口
local_port = 11451
#映射到服务端的端口
remote_port = 19198

#第二个单端口转发,同理
[customService2]
#类型:tcp/udp/xtcp等
type = tcp
#本地ip地址
local_ip = 127.0.0.1
#本地映射端口
local_port = 41919
#映射到服务端的端口
remote_port = 81011

#端口范围转发
[range:services]
#类型:tcp/udp/xtcp等
type = tcp
#本地ip地址
local_ip = 127.0.0.1
#本地映射端口范围
local_port = 10010-10086,23333
#映射到服务端的端口范围
remote_port = 23310-23386,25565

#第二个端口范围转发,同理
[range:servicesNo2]
#类型:tcp/udp/xtcp等
type = tcp
#本地ip地址
local_ip = 127.0.0.1
#本地映射端口范围
local_port = 28000-29000,12345
#映射到服务端的端口范围
remote_port = 12456-13456,44444

常见问题