使用 frp 进行内网穿透

前言

不想看的同学可以点击跳到正文

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

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

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

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

前置条件

  • frp 服务端及客户端 (当然了)
  • 一台能由公网访问的服务器
  • 服务器未被防火墙屏蔽
  • 一些基础计算机常识

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

服务器推荐

【腾讯云】轻量应用服务器Lighthouse限时1.2折起,1核1G3M低至128元/年,高带宽首选!
【腾讯云】11.11 云上盛惠,云产品限时抢购,1核2G云服务器首年88元
【阿里云】ECS老用户升级四重礼遇
虽然是广告,但是这两家的 HK/SG 和其他一些地方都有 CN2-GIA

(按照推荐程度排序)

  • 服务器位于中国大陆
  • 服务器位于亚洲且拥有 CN2 线路
  • 服务器拥有 CN2 线路
  • 服务器位于亚洲

  • 服务器有大于 30 Mbps 的上行带宽
  • 服务器有大于 5 Mbps 的上行带宽
  • 虽然理论上说只要有公网 IP 就可以使用,但是带宽太低确实会给使用体验造成严重打击

正文

服务端设置

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,若出现以下提示,则运行成功。

cmdWindow

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 地址:网页端监控端口

dashBoardLogin

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

dashBoardMainPage

如果需要更多自定功能可以查看同目录的 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

常见问题

  • Q: 为什么延迟那么高?
    A: 因为是 用户 -> 中转服务器 -> 服务器,所以连接延迟将会是三端的延迟和

  • Q: 为什么无法启动
    A: 检查配置文件是否正确,Windows下必须使用命令行工具 (cmd, powershell) 打开

  • Q: 为什么成功启动后无法连接到监控页面/客户端无法连接到服务器
    A: 请确认服务器安全组有放行所需端口

注解

frp © 2015 - 2020 fatedier, released under Apache License 2.0

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注