最近跟学长准备在校内跑点服务,无奈学校的墙比GFW还难受,65535个端口里只放行了2个(80,443)。。。看得出来。。。学校根本没打算让学生使用什么校外服务。。。。连22都被拦截到校内服务器了。。。。无奈的是,校内服务器用ssh登进去还不能上网(其实是没有dns服务),由于学生账户权限有限,没办法修改dns设置。。。于是跑了个走tcp:80端口的dns客户端。。。万事解决之后才意识到。。。。学校的墙连自己的服务器的端口也不让粗去。。。。于是只好回到起点开始想办法。
正巧群里有dalao们正在聊局域网相关内容,于是顺便去问了下相关的小工具什么的,得知了一个叫做 FRP 的工具,Google了下,使用还挺简单的。
总之咱就在这里简单的说一下折腾的过程好了quq
[infobox title="环境准备"]
嘛。。。首先说一下设备。。。。
FRP需要一台具有外网IP的设备对外提供服务,客户端只要可以联网就行,所以需要准备一台便宜又快的VPS,正巧遇到了当时正在打折的某服务商,于是去订了3年的vps(反正不用担心被墙换IP),简单的贴一下配置好了
[collapse title="VPS的bench.sh测试结果"]
----------------------------------------------------------------------
CPU model : Intel(R) Xeon(R) Gold 6126 CPU @ 2.40GHz
Number of cores : 2
CPU frequency : 2593.906 MHz
Total size of Disk : 48.2 GB (2.5 GB Used)
Total amount of Mem : 996 MB (708 MB Used)
Total amount of Swap : 1906 MB (0 MB Used)
System uptime : 14 days, 8 hour 34 min
Load average : 0.16, 0.08, 0.09
OS : Debian GNU/Linux 8
Arch : x86_64 (64 Bit)
Kernel : 3.16.0-8-amd64
----------------------------------------------------------------------
CPU model : Intel(R) Xeon(R) Gold 6126 CPU @ 2.40GHz
Number of cores : 2
CPU frequency : 2593.906 MHz
Total size of Disk : 48.2 GB (2.5 GB Used)
Total amount of Mem : 996 MB (708 MB Used)
Total amount of Swap : 1906 MB (0 MB Used)
System uptime : 14 days, 8 hour 34 min
Load average : 0.16, 0.08, 0.09
OS : Debian GNU/Linux 8
Arch : x86_64 (64 Bit)
Kernel : 3.16.0-8-amd64
I/O speed(1st run) : 566 MB/s
I/O speed(2nd run) : 414 MB/s
I/O speed(3rd run) : 1.1 GB/s
Average I/O speed : 702.1 MB/s
Node Name IPv4 address Download Speed
CacheFly 204.93.150.152 69.9MB/s
Linode, Tokyo, JP 106.187.96.148 75.9MB/s
Linode, Singapore, SG 139.162.23.4 25.7MB/s
Linode, London, UK 176.58.107.39 8.67MB/s
Linode, Frankfurt, DE 139.162.130.8 8.03MB/s
Linode, Fremont, CA 50.116.14.9 18.7MB/s
Softlayer, Dallas, TX 173.192.68.18 8.01MB/s
Softlayer, Seattle, WA 67.228.112.250 7.11MB/s
Softlayer, Frankfurt, DE 159.122.69.4 4.04MB/s
Softlayer, Singapore, SG 119.81.28.170 9.88MB/s
Softlayer, HongKong, CN 119.81.130.170 9.59MB/s
----------------------------------------------------------------------
[/collapse]
总的来说转发流量绰绰有余就是了。。。
由于frp有已经编译好的包,下载下来就能用,于是咱就直接从GitHub下载了
客户端没有特殊的设备限制,所以应该也不用贴配置了。。。。
[/infobox]
[infobox title="服务端配置"]
简单来说就是
下载压缩包
wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
解压下载到的压缩包
tar zxf frp_0.27.0_linux_amd64.tar.gz
复制文件到应该在的位置
cp frp_0.27.0_linux_amd64/frps /usr/bin/ && mkdir -p /etc/frp/ && cp frp_0.27.0_linux_amd64/frps.ini /etc/frp/ && cp frp_0.27.0_linux_amd64/systemd/frps.service /etc/systemd/system/
修改配置
nano /etc/frp/frps.ini
试运行
frps -c /etc/frp/frps.ini
激活并启用frp服务
systemctl enable frps.service && systemctl start frps.service
查看frp服务状态
systemctl status frps.service
具体配置文件咱是这样写的,具体的额外用法咱就不赘述了,可以从GitHub看到完整版的配置示例
[common]
## 绑定的TCP端口,用于让客户端链接
bind_port = 80
## 绑定的UDP端口,UDP协议的客户端将会自动获取这个设置
bind_udp_port = 81
## KCP端口可以和TCP一致
kcp_bind_port = 80
## 虚拟HTTP服务器绑定的端口
vhost_http_port = 1080
vhost_https_port = 1443
## FRP服务器状态面板绑定的端口
dashboard_port = 8848
## FRP服务器状态面板的登录信息
dashboard_user = 【用户名】
dashboard_pwd = 【密码】
## 日志文件位置
log_file = /root/frps.log
## 日志等级 [trace, debug, info, warn, error]
log_level = trace
## 日志保留时间
log_max_days = 3
## 客户端链接进来的时候需要使用的Token
token = 【你喜欢的字符串】
总的来说很好运的是,学校的80,443端口不是HTTP透明代理。。。否则就更难受了。。。
[/infobox]
[infobox title="客户端配置"]
几乎完全和服务器端的操作一样
下载压缩包
wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
解压下载到的压缩包
tar zxf frp_0.27.0_linux_amd64.tar.gz
复制文件到应该在的位置
cp frp_0.27.0_linux_amd64/frpc /usr/bin/ && mkdir -p /etc/frp/ && cp frp_0.27.0_linux_amd64/frpc.ini /etc/frp/ && cp frp_0.27.0_linux_amd64/systemd/frpc.service /etc/systemd/system/
修改配置
nano /etc/frp/frpc.ini
试运行
frpc -c /etc/frp/frpc.ini
激活并启用frp服务
systemctl enable frpc.service && systemctl start frpc.service
查看frp服务状态
systemctl status frpc.service
具体配置文件咱是这样写的,具体的额外用法咱就不赘述了,可以从GitHub看到完整版的配置示例(这一段其实是从上一段复制过来的quq)
[common]
## 服务器地址,也可以是域名
server_addr = 127.0.0.1
## 服务器绑定的TCP端口
server_port = 80
## 服务器指定的Token
token = 【服务器指定的Token】
## 这里填写使用者名称后将会给所有这个这个配置文件绑定的映射名前面添加一个使用者名称,方便区分
user = 【使用者名称】
## 日志文件位置
log_file = /root/frps.log
## 日志等级 [trace, debug, info, warn, error]
log_level = trace
## 日志保留时间
log_max_days = 3
[端口映射名]
## 协议
type = tcp
## 希望绑定的端口
remote_port = 3389
## 内网IP
local_ip = 127.0.0.1
## 内网端口
local_port = 22
## 启用加密和压缩
use_encryption = true
use_compression = true
[/infobox]
然后通过外网访问下是是quq。。。。如果一切正常的话,用
frp服务器第地址:客户端指定的remote_port
就可以访问得到。