前言
总所周知,在总计 $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
(按照推荐程度排序)
- 服务器有大于 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
或者 powershell
,cd
至 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
常见问题
-
Q: 为什么延迟那么高?
A: 因为是 用户 -> 中转服务器 -> 服务器,所以连接延迟将会是三端的延迟和 -
Q: 为什么无法启动
A: 检查配置文件是否正确,Windows下必须使用命令行工具 (cmd, powershell) 打开 -
Q: 为什么成功启动后无法连接到监控页面/客户端无法连接到服务器
A: 请确认服务器安全组有放行所需端口
注解
- [1] Mar. 20th, 2020; Statista: Number of internet users in China 2008-2020
- [2] Jul. 2020; Statista: Worldwide digital population as of July 2020
- [3] Oct. 10th, 2020; Google: IPv6 采用情况
frp © 2015 - 2020 fatedier, released under Apache License 2.0