赞
踩
一年前因为selenium运行问题在阿里云租用了一台windows的云服务器,当时费了好大工夫终于也算是搞定了frp内网穿透,实现了远程访问宿舍里的win10的功能。往后每次我掏出手机连上宿舍的电脑然后开始操作时,都感觉自己像个黑客一样……
可能也是受kiko这个角色的影响吧,从此便开始幻想自己像她一样随时掏出一个电脑
吹爆尚语贤小姐姐!!!!!!!!
最近因为c++协作项目、想转运维、阿里云网速慢等种种原因,决定再康康有没有更好的服务器商,然后便又在腾讯云购买了一个新的linux学生机。之前阿里云的有备案的域名也不能用了呜呜呜好烦,新的域名正在备案中,不知道啥时候可以搞定。
除此之外,最近心血来潮还买了一个树莓派放在宿舍,打算把之前写的内网图书馆抢座脚本改成网页,以后在外面有手机一键抢座。因此,frp再次出现在我的眼前,当时神秘的frp现在看来依旧神秘,不过我打算进一步深入了解它,由此便引发了今天的问题。
掐指一算,目前我有4台电脑,分别是阿里云windows,腾讯云linux(此后简称腾讯云),自用windows(此后简称win10),树莓派linux(此后简称树莓派)。除去只是因为续费续多了才闲置的阿里云之外,还有三台电脑,我的目的有如下几条:
所以我需要完成如下三件事情:
解释一下,frpc为frp客户端程序,frps为frp服务端程序
注意,如果你有幸看到我的博客,请意识到,我写的从来不是教程,不会手把手教你从零开始配置xxxx。这些东西网上多的是,不重复造轮子是程序员的基本,利用搜索引擎也是。我只会写那些我搜索了许久,或者思考了许久的东西。希望这些可以帮到你,也帮到未来的我。
下载步骤直接掠过,详细请参考如何安装frp 。
我的frpc放在了/root/frp文件夹中
[root@VM-8-13-centos frp]# pwd
/root/frp
[root@VM-8-13-centos frp]# ls
frps frps.ini LICENSE nohup.out systemd
第一步,配置frps.ini配置文件
[root@VM-8-13-centos frp]# vim frps.ini
[common]
bind_port = 6000
vhost_http_port = 5998
frps配置非常简单,只需要两行即可,其中:
bind_port
为与客户端对接的端口号,要求客户端与服务端保持一致即可,此处为6000。注意,这个端口仅用于对接使用,内网穿透每一个服务都需要一个其他的端口。
重复,bind_port
仅用于对接
vhost_http_port
为http服务的端口,此处为5998,即意味着当我访问*http://腾讯云ip:5998/*时,frp会将我的所有请求通过6000(即对接端口)发送给符合要求的内网服务器。判断是否符合要求有两种形式。其一,通过客户端设置的remote_port;其二,通过客户端设置的custom_domains,这些在后面我会讲到。
如果你查阅了大量其他答案,你会发现这里少了一个vhost_https_port
。这是因为我将要通过nginx反向代理,并不需要https。这也就是接下来我要讲述的nginx配置。
我先摆出frp配置的nginx.conf片段
server { listen 82 ssl; server_name lib.chantaria.xyz; ssl_certificate ssl.crt; ssl_certificate_key ssl.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; error_page 497 https://lib.chantaria.xyz:82$uri; location / { proxy_pass http://127.0.0.1:5998; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass_header Set-Cookie; } }
前两行是nginx通用配置,监听82端口,并启用ssl证书(此处是82是因为我的备案还没下来,如果备案下来了会改成80)。同时绑定域名,即当访问的是*https://lib.chantaria.xyz:82/*时nginx才会执行这个代码块。
后几行是ssl配置,在此处也不是重点。
error_page 497 https://lib.chantaria.xyz:82$uri;
是rewrite,即当访问的是http://lib.chantaria.xyz:82/时将链接重写为https://lib.chantaria.xyz:82/。
后面的location片段即反向代理到frps的片段。其中:
proxy_pass
为反向代理到的url,至于为什么是http://127.0.0.1:5998,请参考我在frp段的讲述。
此段中最重点的是proxy_set_header Host $host;
如果你没有这句话,那么当你访问*https://lib.chantaria.xyz:82/*时,浏览器会显示
The page you requested was not found.
而此时你的frps会告诉你:
[W] [http.go:86] do http proxy request error: no such domain: 127.0.0.1 /
其中的原因,是frp在收到http请求后,会根据请求的url分配受理请求的客户端。而nginx在进行反向代理时,会主动擦去这些,导致frps接收不到正确的url,也就无法分配正确的客户端来处理这些请求。
至此,nginx配置也告一段落
大功告成后,记得执行nginx -s reload
重新载入配置文件,然后在frp路径执行nohup ./frps -c ./frps.ini
来后台启动frps服务。
还是先摆上配置
此处复制失败了,索性放一张图片。
[common]
中是frpc的基本配置,分别为远程服务器ip,以及对接用的端口。
[ssh]
中是ssh配置,图片中意思即为将远程的5997端口映射到本地的22端口。
[http]
中便是http服务的配置,我在此配置的ip和port是flask运行的位置(毕竟只是一个小脚本,所以就没有再配置wsgi之类的东西,flask自带的开发级服务器足够了)
其中比较重点的是custom_domains
参数,这个参数便是frps所寻找的客户端特征值。切记,即使你使用的并不是80端口,也请不要自作主张在后面附加上端口号。因为frp并不管这些,它只在乎域名,不在乎你是哪个端口。(我在这里踩了好久的坑)
除此之外应该就没什么需要注意的事情了
还是同样的,在frp路径执行nohup ./frpc -c ./frpc.ini
来后台启动frpc服务。
至此,树莓派配置也告一段落
配置完前两个,win10其实也就没什么可说的了。
[common]
server_addr = 81.xxxxxxxx
server_port = 6000
[remove]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 5999
即腾讯云的5999端口被映射到了3389端口(即远程桌面端口)。
然后简单地编写一个bat批处理命令(话说虽然叫批处理命令不过我好像都用来执行单个操作了哈哈哈哈,批处理当然要用python)
@echo off
frpc.exe -c frpc.ini
平时只要双击bat
2020/12/18 02:53:13 [I] [service.go:288] [a0e3b36022e1d765] login to server success, get run id [a0e3b36022e1d765], server udp port [0]
2020/12/18 02:53:13 [I] [proxy_manager.go:144] [a0e3b36022e1d765] proxy added: [remove]
2020/12/18 02:53:13 [I] [control.go:180] [a0e3b36022e1d765] [remove] start proxy success
便可以顺利启动,随后掏出你的手机来尽情装x吧哈哈哈哈哈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。