2018-10-02
- 修正树莓派错误使用64位客户端的问题
- 更新使用frp v0.17.0;当然你也可以使用其他更新版本的 frp。
引言
上了大学后,开始逐渐了解到校园网内有许多资源以及页面是外网访问不到的,例如教务系统(只有特定时期才能从外网访问)、特殊管理页面、校内ftp服务器以及图书馆资源(由于版权问题,强烈不建议通过代理获取图书馆资源)等。但有我们经常会有这么一种情况:身处外网,却又对内网的访问有所需求。比如教务系统、ftp访问以及特殊管理页面登陆等。此时就需要架设代理服务器,通过代理进行内网的访问。
准备
- 内网主机:可以是你的win电脑(十分不推荐),也可以是其他的“不关机”的主机,建议使用Linux系统的主机,在这里我使用树莓派,系统为Raspbian(关键功耗低,10w左右)
- 公网主机:因为各种原因,有的校园网不分配公网IP,或者你的内网主机前连接着路由器等,即存在以下情况:无法直接通过内网主机分配到的ip从外网进行访问,此时就需要公网主机。(若使用路由器,也可以免除公网主机,通过路由器内的DMZ(以及DDNS)来实现,不过本文主要来实践frp内网穿透)
原理
本文使用frp进行内网穿透,使用*SR进行代理架设。
有很多人会问,为什么R都已经停止维护了,还要用它。相较于其他代理方式,无论是服务端的配置难度还是客户端的易用性、兼容性,S和R都是做得比较好的。而相较于S,R的客户端的易用性最好,所以在此只写R。实际上我还是建议使用S-libev+obfs,不过这样win端就不能开http代理,因此使用情况上具有局限性;而R可以。
步骤
服务端配置
#切换到root用户,你也可以不切换,不过需要在下面的命令前加上sudo
sudo su
#下载程序
wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz
#解压
tar -zxvf frp_0.17.0_linux_amd64.tar.gz
#切换目录
cd frp_0.17.0_linux_arm64
# 编辑frps.ini
sudo nano frps.ini
frps.ini 内容
-
bind_port
为验证的端口,一般不作改动 -
token
为自定义的值(数字如:1234567890),需要记下,并与后面配置的 frpc.ini 中的值相同
[common]
bind_port = 7000
token = token_value
最后启动frp服务端
#请确保在 frp_0.13.0_linux_arm64 目录下运行
screen ./frps -c ./frps.ini
客户端配置
#切换到root用户,你也可以不切换,不过需要在下面的命令前加上sudo
sudo su
#下载程序
wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd.tar.gz
#解压
tar -zxvf frp_0.17.0_linux_amd.tar.gz
#切换目录
cd frp_0.17.0_linux_arm
# 编辑frps.ini
sudo nano frpc.ini
frpc.ini 内容
[common]
-
server_addr
为公网服务器IP -
bind_port
为验证的端口,一般不作改动 -
token_value
与前面配置的frps.ini中的值相同
[ssr]
-
local_port
ssr的端口 -
remote_port
你连接公网主机的端口
[common]
server_addr = your_server_ip
server_port = 7000
token = token_value
[ssr]
type = tcp
local_ip = 127.0.0.1
local_port = ssr_port_number
remote_port = remote_port_number
#以下可选
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = remote_port_number
最后启动frp客户端
#请确保在 frp_0.13.0_linux_arm 目录下运行
screen ./frpc -c ./frpc.ini
树莓派上R的安装(这里使用了错误的方法)
由于我这里用的 raspberry debian 系统会被一些一键脚本识别错误,可实际运行是没问题的。因此我们需要通过修改文件来使脚本运行。
#编辑/etc/issue,将 Raspbian 改成 Debian
nano /etc/issue
执行一键安装脚本
来源:https://github.com/ToyoDAdoubi/doubi
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh && chmod +x ssr.sh && bash ssr.sh
安装过程不赘述
可能遇到的错误
- 未安装 screen 的请运行
sudo apt-get install screen
更多有关 screen 的使用方法请访问 Linux screen命令| 菜鸟教程
- 启动 frpc 时遇到黄字
connect failed: No route to host
这有可能是防火墙的问题,请检查你的树莓派以及VPS的防火墙设置,开放相应ip以及端口的访问权限,请自行搜索 iptables 相关命令。
使用
与你们熟知的R的使用方法一致,只不过不具备「科学」的效果,因为你的树莓派在国内。R客户端的服务器IP填公网服务器IP,端口填写frpc.ini文件中[ssr]的 remote_port_number 即可。
另外说明,你的网站访问数据都是需要经过公网主机以及内网主机的,是需要消耗vps流量的。
最终效果
参考资料
借助 frp 随时随地访问自己的树莓派
在 Raspberry Pi 上安装s*
【frp配置教程】frp内网穿透服务端frps.ini各配置参数详解
【frp配置教程】frp内网穿透客户端frpc.ini各配置参数详解
后记
或许有的人觉得我写得太详细了,或许还是有些小细节没能覆盖完全,但看得懂的人自然看得懂。在我看来,写文章的主要目的还是记录我的操作以及思考过程,用作教程分享还只是次要目的,给后来者指指路罢了。